diff --git a/module/Application/src/Controller/OffreFormationController.php b/module/Application/src/Controller/OffreFormationController.php
index 36e1ab09fa8e3264bcb8f9a340e0a4e423a6121f..e8893aa5d9b5dcec4ecdac4eaebf7a4992745ed4 100755
--- a/module/Application/src/Controller/OffreFormationController.php
+++ b/module/Application/src/Controller/OffreFormationController.php
@@ -59,7 +59,7 @@ class OffreFormationController extends AbstractController
 
         $params = [];
         if ($structure) $params['structure'] = $structure->getId();
-        if ($niveau) $params['niveau'] = $niveau->getId();
+        if ($niveau) $params['niveau'] = ($niveau->getPertinence()) ? $niveau->getId() : $niveau->getLib();
         if ($etape) $params['etape'] = $etape->getId();
 
 
@@ -82,7 +82,6 @@ class OffreFormationController extends AbstractController
     }
 
 
-
     public function exportAction()
     {
         $this->initFilters();
@@ -119,30 +118,30 @@ class OffreFormationController extends AbstractController
 
 
         foreach ($elements as $element) {
-            $cm       = '0';
-            $td       = '0';
-            $tp       = '0';
+            $cm = '0';
+            $td = '0';
+            $tp = '0';
             $cmGroupe = '0';
             $tdGroupe = '0';
             $tpGroupe = '0';
 
             foreach ($element->getVolumeHoraireEns() as $vhe) {
                 if ($vhe->getTypeIntervention()->getCode() == 'CM') {
-                    $cm       = (!empty($vhe->getHeures())) ? $vhe->getHeures() : '0';
+                    $cm = (!empty($vhe->getHeures())) ? $vhe->getHeures() : '0';
                     $cmGroupe = (!empty($vhe->getGroupes())) ? $vhe->getGroupes() : '0';
                 }
                 if ($vhe->getTypeIntervention()->getCode() == 'TD') {
-                    $td       = (!empty($vhe->getHeures())) ? $vhe->getHeures() : '0';
+                    $td = (!empty($vhe->getHeures())) ? $vhe->getHeures() : '0';
                     $tdGroupe = (!empty($vhe->getGroupes())) ? $vhe->getGroupes() : '0';
                 }
                 if ($vhe->getTypeIntervention()->getCode() == 'TP') {
-                    $tp       = (!empty($vhe->getHeures())) ? $vhe->getHeures() : '0';
+                    $tp = (!empty($vhe->getHeures())) ? $vhe->getHeures() : '0';
                     $tpGroupe = (!empty($vhe->getGroupes())) ? $vhe->getGroupes() : '0';
                 }
             }
 
-            $etape      = $element->getEtape();
-            $effectifs  = $element->getEffectifs();
+            $etape = $element->getEtape();
+            $effectifs = $element->getEffectifs();
             $discipline = $element->getDiscipline();
             $csvModel->addLine([
                 $etape->getCode(),
@@ -174,14 +173,12 @@ class OffreFormationController extends AbstractController
     }
 
 
-
     public function administrationOffreAction()
     {
         return [];
     }
 
 
-
     public function reconductionAction()
     {
         $this->initFilterHistorique();
@@ -198,13 +195,13 @@ class OffreFormationController extends AbstractController
         [$offresComplementaires, $mappingEtape, $reconductionTotale] = $this->getServiceOffreFormation()->getOffreComplementaire($structure, $niveau, $etape);
 
         $reconductionStep = '';
-        $messageStep      = '';
-        $fromPost         = false;
+        $messageStep = '';
+        $fromPost = false;
 
 
         $request = $this->getRequest();
         if ($request->isPost()) {
-            $datas    = $request->getPost();
+            $datas = $request->getPost();
             $fromPost = true;
             //Ajout du mapping des EtapesN et EtapesN1 pour pouvoir reconduire un element pédagogique sur une etape déjà reconduite.
             $datas['mappingEtape'] = $mappingEtape;
@@ -219,7 +216,7 @@ class OffreFormationController extends AbstractController
                 }
             } catch (\Exception $e) {
                 $reconductionStep = false;
-                $messageStep      = $e->getMessage();
+                $messageStep = $e->getMessage();
                 $this->flashMessenger()->addErrorMessage($e->getMessage());
             }
         }
@@ -238,7 +235,6 @@ class OffreFormationController extends AbstractController
     }
 
 
-
     public function reconductionCentreCoutAction()
     {
         $this->initFilterHistorique();
@@ -259,7 +255,7 @@ class OffreFormationController extends AbstractController
             $datas = $request->getPost();
             //Reconduire les centres de coût des EP de l'étape.
             try {
-                $etapesReconduites   = $this->getServiceEtape()->getEtapeCentreCoutReconductible($structure);
+                $etapesReconduites = $this->getServiceEtape()->getEtapeCentreCoutReconductible($structure);
                 $etapesReconduitesCc = [];
                 if (isset($datas['etapes'])) {
                     foreach ($datas['etapes'] as $code) {
@@ -268,7 +264,7 @@ class OffreFormationController extends AbstractController
                         }
                     }
                 }
-                $result            = $this->getProcessusReconduction()->reconduireCCFormation($etapesReconduitesCc);
+                $result = $this->getProcessusReconduction()->reconduireCCFormation($etapesReconduitesCc);
                 $etapesReconduites = $this->getServiceEtape()->getEtapeCentreCoutReconductible($structure);
 
                 $this->flashMessenger()->addSuccessMessage("$result centre(s) de coût(s) ont été reconduit pour l'année prochaine. ");
@@ -290,14 +286,13 @@ class OffreFormationController extends AbstractController
     }
 
 
-
     public function reconductionModulateurAction()
     {
         $this->initFilterHistorique();
 
         [$structure, $niveau, $etape] = $this->getParams();
         $etapesReconduites = [];
-        $role              = $this->getServiceContext()->getSelectedIdentityRole();
+        $role = $this->getServiceContext()->getSelectedIdentityRole();
 
         $qb = $this->getServiceStructure()->finderByHistorique();
         $this->getServiceStructure()->finderByEnseignement($qb);
@@ -307,7 +302,7 @@ class OffreFormationController extends AbstractController
 
         $request = $this->getRequest();
         if ($request->isPost()) {
-            $datas             = $request->getPost();
+            $datas = $request->getPost();
             $etapesReconduites = $this->getServiceEtape()->getEtapeModulateurReconductible($structure);
             try {
                 $etapesReconduitesCc = [];
@@ -343,7 +338,6 @@ class OffreFormationController extends AbstractController
     }
 
 
-
     protected function initFilters()
     {
         $this->initFilterAnnee();
@@ -351,7 +345,6 @@ class OffreFormationController extends AbstractController
     }
 
 
-
     protected function initFilterAnnee()
     {
         $this->em()->getFilters()->enable('annee')->init([
@@ -362,7 +355,6 @@ class OffreFormationController extends AbstractController
     }
 
 
-
     protected function initFilterHistorique()
     {
         /* Mise en place des filtres */
@@ -377,19 +369,17 @@ class OffreFormationController extends AbstractController
     }
 
 
-
     protected function disableFilters($name)
     {
         $this->em()->getFilters()->disable($name);
     }
 
 
-
     protected function getParams()
     {
         $structure = $this->context()->structureFromQuery() ?: $this->getServiceContext()->getStructure();
-        $niveau    = $this->context()->niveauFromQuery();
-        $etape     = $this->context()->etapeFromQuery();
+        $niveau = $this->context()->niveauFromQuery();
+        $etape = $this->context()->etapeFromQuery();
         if ($niveau) $niveau = $this->getServiceNiveauEtape()->get($niveau); // entité Niveau
 
         return [$structure, $niveau, $etape];
diff --git a/module/Application/src/Entity/NiveauEtape.php b/module/Application/src/Entity/NiveauEtape.php
index 4460c2c90a6e80ccb21ed5d2797c50cef7f304b9..f6da00cc53a6b8718faf683f238b1ab7b6b820e2 100755
--- a/module/Application/src/Entity/NiveauEtape.php
+++ b/module/Application/src/Entity/NiveauEtape.php
@@ -25,6 +25,8 @@ class NiveauEtape
      */
     protected $lib;
 
+    protected $pertinence;
+
     /**
      *
      * @param \Application\Entity\Db\Etape $etape
@@ -93,6 +95,11 @@ class NiveauEtape
         return $this->lib;
     }
 
+    public function getPertinence()
+    {
+        return $this->pertinence;
+    }
+
     public function setNiv($niv)
     {
         $this->niv = $niv;
@@ -105,11 +112,18 @@ class NiveauEtape
         return $this;
     }
 
+    public function setPertinence($pertinence)
+    {
+        $this->pertinence = $pertinence;
+        return $this;
+    }
+
     public function setEtape(Etape $etape)
     {
         $this->etape = $etape;
-        $this->niv   = $this->etape->getNiveau();
-        $this->lib   = $this->etape->getTypeFormation()->getGroupe()->getLibelleCourt();
+        $this->niv = $this->etape->getNiveau();
+        $this->lib = $this->etape->getTypeFormation()->getGroupe()->getLibelleCourt();
+        $this->pertinence = $this->etape->getTypeFormation()->getGroupe()->getPertinenceNiveau();
         return $this;
     }
 }
\ No newline at end of file
diff --git a/module/Application/src/Service/NiveauEtapeService.php b/module/Application/src/Service/NiveauEtapeService.php
index 665df2df1f9319dc2f28824ceaab3d5fa92590a2..4a14a7fd61805e1b2dd9659597e2c585c52c95cd 100755
--- a/module/Application/src/Service/NiveauEtapeService.php
+++ b/module/Application/src/Service/NiveauEtapeService.php
@@ -18,14 +18,15 @@ class NiveauEtapeService extends AbstractService
      */
     public function get($id)
     {
-        if (null === $id || 0 === $id || '-' === $id){
+        if (null === $id || 0 === $id || '-' === $id) {
             return null;
         }
-        $tiretPos = strrpos($id,'-');
-        $groupeTypeFormationLibelleCourt = substr( $id, 0, $tiretPos );
-        $niv = substr( $id, $tiretPos+1 );
+        $tiretPos = strrpos($id, '-');
+
+        $groupeTypeFormationLibelleCourt = (!$tiretPos) ? $id : substr($id, 0, $tiretPos);
+        $niv = (!$tiretPos) ? false : substr($id, $tiretPos + 1);
         if ($niv === false) $niv = null;
-        
+
         $niveau = new NiveauEtape();
         $niveau->setLib($groupeTypeFormationLibelleCourt);
         $niveau->setNiv($niv);
diff --git a/module/Application/src/Service/OffreFormationService.php b/module/Application/src/Service/OffreFormationService.php
index b0105f3975f310681510a425d1d3119b76098cb5..116cda85d31d85a65427cff7d2055dbc9c5b12cb 100755
--- a/module/Application/src/Service/OffreFormationService.php
+++ b/module/Application/src/Service/OffreFormationService.php
@@ -30,13 +30,11 @@ class OffreFormationService extends AbstractEntityService
     }
 
 
-
     public function getAlias()
     {
     }
 
 
-
     public function getNeep($structure, $niveau, $etape, $annee = null, $source = null)
     {
         if ($etape) {
@@ -50,14 +48,14 @@ class OffreFormationService extends AbstractEntityService
 
         if (!$structure) return [[], [], []];
 
-        $niveaux  = [];
-        $etapes   = [];
+        $niveaux = [];
+        $etapes = [];
         $elements = [];
 
         $dql = 'SELECT
                 partial e.{id,code,annee,libelle,sourceCode,niveau,histoDestruction},
                 partial tf.{id},
-                partial gtf.{id, libelleCourt, ordre},
+                partial gtf.{id, libelleCourt, ordre, pertinenceNiveau},
                 partial ep.{id,code,libelle,sourceCode,etape,periode,tauxFoad,fi,fc,fa,tauxFi,tauxFc,tauxFa},
                 partial vme.{id,heures, groupes}
             FROM
@@ -92,9 +90,14 @@ class OffreFormationService extends AbstractEntityService
             if ($object instanceof Etape) {
                 $n = NiveauEtape::getInstanceFromEtape($object);
                 if ($object->estNonHistorise()) {
-                    $niveaux[$n->getId()] = $n;
+                    $gtf = $object->getTypeFormation()->getGroupe()->getPertinenceNiveau();
+                    if ($gtf) {
+                        $niveaux[$n->getId()] = $n;
+                    } else {
+                        $niveaux[$n->getLib()] = $n;
+                    }
                 }
-                if (!$niveau || $niveau->getId() == $n->getId()) {
+                if (!$niveau || ($niveau->getId() == $n->getId() && $n->getPertinence()) || ($niveau->getLib() == $n->getLib() && !$n->getPertinence())) {
                     if ($object->estNonHistorise() || $object->getElementPedagogique()->count() > 0) {
                         $etapes[] = $object;
                     }
@@ -122,15 +125,15 @@ class OffreFormationService extends AbstractEntityService
             return $e1Lib > $e2Lib ? 1 : 0;
         });
 
+
         return [$niveaux, $etapes, $elements];
     }
 
 
-
     public function getNeepEtape($etape)
     {
-        $niveaux  = [];
-        $etapes   = [];
+        $niveaux = [];
+        $etapes = [];
         $elements = [];
 
         $dql = 'SELECT
@@ -155,12 +158,12 @@ class OffreFormationService extends AbstractEntityService
             /** @var CheminPedagogique $object */
             if ($object->estHistorise()) continue;
 
-            $etape   = $object->getEtape();
+            $etape = $object->getEtape();
             $element = $object->getElementPedagogique();
 
-            $n                           = NiveauEtape::getInstanceFromEtape($etape);
-            $niveaux[$n->getId()]        = $n;
-            $etapes[$etape->getId()]     = $etape;
+            $n = NiveauEtape::getInstanceFromEtape($etape);
+            $niveaux[$n->getId()] = $n;
+            $etapes[$etape->getId()] = $etape;
             $elements[$element->getId()] = $element;
         }
 
@@ -176,7 +179,6 @@ class OffreFormationService extends AbstractEntityService
     }
 
 
-
     /**
      * @return array
      */
@@ -184,9 +186,9 @@ class OffreFormationService extends AbstractEntityService
     public function getOffreComplementaire($structure, $niveau, $etape)
     {
         $offresComplementaires = [];
-        $anneeEnCours          = $this->getServiceContext()->getAnnee();
-        $anneeSuivante         = $this->getServiceAnnee()->getSuivante($anneeEnCours);
-        $source                = $this->getServiceSource()->getOse();
+        $anneeEnCours = $this->getServiceContext()->getAnnee();
+        $anneeSuivante = $this->getServiceAnnee()->getSuivante($anneeEnCours);
+        $source = $this->getServiceSource()->getOse();
 
         $this->getServiceLocalContext()
             ->setStructure($structure)
@@ -200,9 +202,9 @@ class OffreFormationService extends AbstractEntityService
         [$niveauxN1, $etapesN1, $elementsN1] = $this->getNeep($structure, $niveau, $etape, $anneeSuivante, $source);
 
         //Organisation pour traitement dans la vue
-        $codesEtapeN1          = [];
-        $codesElementN1        = [];
-        $etapesNonReconduits   = array_diff($etapes, $etapesN1);
+        $codesEtapeN1 = [];
+        $codesElementN1 = [];
+        $etapesNonReconduits = array_diff($etapes, $etapesN1);
         $elementsNonReconduits = array_diff($elements, $elementsN1);
 
         $reconductionTotale = 'non';
@@ -223,8 +225,8 @@ class OffreFormationService extends AbstractEntityService
                 continue;
             }*/
             $offresComplementaires[$v->getId()]['reconduction_partiel'] = 'non';
-            $offresComplementaires[$v->getId()]['reconduction']         = (in_array($v->getCode(), $codesEtapeN1)) ? 'oui' : 'non';
-            $offresComplementaires[$v->getId()]['etape']                = $v;
+            $offresComplementaires[$v->getId()]['reconduction'] = (in_array($v->getCode(), $codesEtapeN1)) ? 'oui' : 'non';
+            $offresComplementaires[$v->getId()]['etape'] = $v;
             $offresComplementaires[$v->getId()]['elements_pedagogique'] = [];
         }
 
@@ -241,7 +243,7 @@ class OffreFormationService extends AbstractEntityService
             }
 
             $offresComplementaires[$etapeId]['elements_pedagogique'][$v->getId()]['reconduction'] = (in_array($v->getCode(), $codesElementN1)) ? 'oui' : 'non';
-            $offresComplementaires[$etapeId]['elements_pedagogique'][$v->getId()]['element']      = $v;
+            $offresComplementaires[$etapeId]['elements_pedagogique'][$v->getId()]['element'] = $v;
         }
 
         $mappingEtape = $this->createMappingEtapeNEtapeN1($etapes, $etapesN1);
@@ -250,10 +252,9 @@ class OffreFormationService extends AbstractEntityService
     }
 
 
-
     public function createMappingEtapeNEtapeN1($etapesN, $etapesN1)
     {
-        $codesEtapeN  = [];
+        $codesEtapeN = [];
         $codesEtapeN1 = [];
         $mappingEtape = [];
 
diff --git a/module/Application/view/application/offre-formation/index.phtml b/module/Application/view/application/offre-formation/index.phtml
index 56c6a1639eeb8c536d384f08e7285de30ccdc826..f0f35382dbbea46100afcd04953e80090a64cb17 100755
--- a/module/Application/view/application/offre-formation/index.phtml
+++ b/module/Application/view/application/offre-formation/index.phtml
@@ -16,16 +16,16 @@ use Application\Provider\Privilege\Privileges;
 
 /**
  * @param \Application\Entity\Db\Structure $structure
- * @param \Application\Entity\NiveauEtape  $niveau
- * @param \Application\Entity\Db\Etape     $etape
+ * @param \Application\Entity\NiveauEtape $niveau
+ * @param \Application\Entity\Db\Etape $etape
  */
 function makeQuery($structure = null, $niveau = null, $etape = null)
 {
     $params = [];
     //@formatter:off
-    if ($structure) $params['structure']    = $structure->getId();
-    if ($niveau)    $params['niveau']       = $niveau->getId();
-    if ($etape)     $params['etape']        = $etape->getId();
+    if ($structure) $params['structure'] = $structure->getId();
+    if ($niveau) $params['niveau'] = ($niveau->getPertinence()) ? $niveau->getId() : $niveau->getLib();
+    if ($etape) $params['etape'] = $etape->getId();
     //@formatter:on
 
     return ['query' => $params];
@@ -41,9 +41,9 @@ $niveauxItems = [
     ],
 ];
 
-foreach ($niveaux as $niv) {
-    $niveauxItems[$niv->getId()] = [
-        'label'  => (string)$niv,
+foreach ($niveaux as $code => $niv) {
+    $niveauxItems[$code] = [
+        'label'  => ($niv->getPertinence()) ? (string)$niv : $code,
         'niveau' => $niv,
         'url'    => $this->url('of', [], makeQuery($structure, $niv)),
     ];
@@ -77,8 +77,8 @@ if ($structure) {
 }
 $this->headTitle()->append("Offre de formation");
 
-$canExport      = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_EXPORT_CSV)) && count($elements);
-$canViewEtape   = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_ETAPE_VISUALISATION));
+$canExport = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_EXPORT_CSV)) && count($elements);
+$canViewEtape = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_ETAPE_VISUALISATION));
 $canEditElement = $this->isAllowed($structure, Privileges::ODF_ELEMENT_EDITION);
 $canSyncElement = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_ELEMENT_SYNCHRONISATION));
 ?>
@@ -236,7 +236,7 @@ $canSyncElement = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_ELE
                         echo $this->tag('a', $attrs)->html('<i class="fas fa-plus"></i> Nouvel enseignement');
                     }
                     if ($canExport) {
-                        $params      = [
+                        $params = [
                             'structure' => $structure ? $structure->getId() : null,
                             'niveau'    => $niveau ? $niveau->getId() : null,
                             'etape'     => $etape ? $etape->getId() : null,