diff --git a/app/__init__.py b/app/__init__.py
index 5217736fc02a8de7daaf6c539fbd7667f8624e4d..51e122cd55216216239ea4764de96fe17d2b8882 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -561,11 +561,11 @@ def critical_error(msg):
     clear_scodoc_cache()
     raise ScoValueError(
         f"""
-    Une erreur est survenue. 
-    
-    Si le problème persiste, merci de contacter le support ScoDoc via 
+    Une erreur est survenue.
+
+    Si le problème persiste, merci de contacter le support ScoDoc via
     {scu.SCO_DISCORD_ASSISTANCE}
-    
+
     {msg}
     """
     )
diff --git a/app/scodoc/sco_formsemestre_edit.py b/app/scodoc/sco_formsemestre_edit.py
index 399cf05db3234eab71e2b67206b0e3b8e5397e04..a584aa08eb3d5d727cda4baf7ff8052748b91e37 100644
--- a/app/scodoc/sco_formsemestre_edit.py
+++ b/app/scodoc/sco_formsemestre_edit.py
@@ -1185,7 +1185,10 @@ def do_formsemestre_clone(
     """Clone a semestre: make copy, same modules, same options, same resps, same partitions.
     New dates, responsable_id
     """
-    log("cloning %s" % orig_formsemestre_id)
+    log(f"cloning orig_formsemestre_id")
+    formsemestre_orig: FormSemestre = FormSemestre.query.get_or_404(
+        orig_formsemestre_id
+    )
     orig_sem = sco_formsemestre.get_formsemestre(orig_formsemestre_id)
     cnx = ndb.GetDBConnexion()
     # 1- create sem
@@ -1196,7 +1199,8 @@ def do_formsemestre_clone(
     args["date_fin"] = date_fin
     args["etat"] = 1  # non verrouillé
     formsemestre_id = sco_formsemestre.do_formsemestre_create(args)
-    log("created formsemestre %s" % formsemestre_id)
+    log(f"created formsemestre {formsemestre_id}")
+    formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id)
     # 2- create moduleimpls
     mods_orig = sco_moduleimpl.moduleimpl_list(formsemestre_id=orig_formsemestre_id)
     for mod_orig in mods_orig:
@@ -1258,7 +1262,12 @@ def do_formsemestre_clone(
         args["formsemestre_id"] = formsemestre_id
         _ = sco_compute_moy.formsemestre_ue_computation_expr_create(cnx, args)
 
-    # 5- Copy partitions and groups
+    # 6- Copie les parcours
+    formsemestre.parcours = formsemestre_orig.parcours
+    db.session.add(formsemestre)
+    db.session.commit()
+
+    # 7- Copy partitions and groups
     if clone_partitions:
         sco_groups_copy.clone_partitions_and_groups(
             orig_formsemestre_id, formsemestre_id
diff --git a/app/scodoc/sco_groups.py b/app/scodoc/sco_groups.py
index 3c350b50d9547b6ca314ce3fdc08eee314e630ef..6073692172ea192fc82ed7c5955dcebfbf4d1c51 100644
--- a/app/scodoc/sco_groups.py
+++ b/app/scodoc/sco_groups.py
@@ -664,8 +664,10 @@ def set_group(etudid: int, group_id: int) -> bool:
     return True
 
 
-def change_etud_group_in_partition(etudid, group_id, partition=None):
-    """Inscrit etud au groupe de cette partition, et le desinscrit d'autres groupes de cette partition."""
+def change_etud_group_in_partition(etudid: int, group_id: int, partition: dict = None):
+    """Inscrit etud au groupe de cette partition,
+    et le desinscrit d'autres groupes de cette partition.
+    """
     log("change_etud_group_in_partition: etudid=%s group_id=%s" % (etudid, group_id))
 
     # 0- La partition
@@ -706,7 +708,7 @@ def change_etud_group_in_partition(etudid, group_id, partition=None):
     cnx.commit()
 
     # 5- Update parcours
-    formsemestre = FormSemestre.query.get(formsemestre_id)
+    formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id)
     formsemestre.update_inscriptions_parcours_from_groups()
 
     # 6- invalidate cache
diff --git a/app/scodoc/sco_inscr_passage.py b/app/scodoc/sco_inscr_passage.py
index 22c36b3c86f92d03948c8ab96ba3c95012926b27..d9a562f46d18093a29ba5bf27a8b56230a05ad5d 100644
--- a/app/scodoc/sco_inscr_passage.py
+++ b/app/scodoc/sco_inscr_passage.py
@@ -36,6 +36,7 @@ from flask import url_for, g, request
 import app.scodoc.notesdb as ndb
 import app.scodoc.sco_utils as scu
 from app import log
+from app.models import FormSemestre
 from app.scodoc.gen_tables import GenTable
 from app.scodoc import html_sco_header
 from app.scodoc import sco_codes_parcours
@@ -175,6 +176,8 @@ def do_inscrit(sem, etudids, inscrit_groupes=False):
     (la liste doit avoir été vérifiée au préalable)
     En option: inscrit aux mêmes groupes que dans le semestre origine
     """
+    formsemestre: FormSemestre = FormSemestre.query.get(sem["formsemestre_id"])
+    formsemestre.setup_parcours_groups()
     log(f"do_inscrit (inscrit_groupes={inscrit_groupes}): {etudids}")
     for etudid in etudids:
         sco_formsemestre_inscriptions.do_formsemestre_inscription_with_modules(
@@ -190,7 +193,6 @@ def do_inscrit(sem, etudids, inscrit_groupes=False):
             #  du nom de la partition: évidemment, cela ne marche pas si on a les
             #   même noms de groupes dans des partitions différentes)
             etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
-            log("cherche groupes de %(nom)s" % etud)
 
             # recherche le semestre origine (il serait plus propre de l'avoir conservé!)
             if len(etud["sems"]) < 2:
@@ -201,13 +203,11 @@ def do_inscrit(sem, etudids, inscrit_groupes=False):
                 prev_formsemestre["formsemestre_id"] if prev_formsemestre else None,
             )
 
-            cursem_groups_by_name = dict(
-                [
-                    (g["group_name"], g)
-                    for g in sco_groups.get_sem_groups(sem["formsemestre_id"])
-                    if g["group_name"]
-                ]
-            )
+            cursem_groups_by_name = {
+                g["group_name"]: g
+                for g in sco_groups.get_sem_groups(sem["formsemestre_id"])
+                if g["group_name"]
+            }
 
             # forme la liste des groupes présents dans les deux semestres:
             partition_groups = []  # [ partition+group ] (ds nouveau sem.)
@@ -217,14 +217,13 @@ def do_inscrit(sem, etudids, inscrit_groupes=False):
                     new_group = cursem_groups_by_name[prev_group_name]
                     partition_groups.append(new_group)
 
-            # inscrit aux groupes
+            # Inscrit aux groupes
             for partition_group in partition_groups:
-                if partition_group["groups_editable"]:
-                    sco_groups.change_etud_group_in_partition(
-                        etudid,
-                        partition_group["group_id"],
-                        partition_group,
-                    )
+                sco_groups.change_etud_group_in_partition(
+                    etudid,
+                    partition_group["group_id"],
+                    partition_group,
+                )
 
 
 def do_desinscrit(sem, etudids):
@@ -481,11 +480,12 @@ def build_page(
 
 
 def formsemestre_inscr_passage_help(sem):
-    return (
-        """<div class="pas_help"><h3><a name="help">Explications</a></h3>
+    return f"""<div class="pas_help"><h3><a name="help">Explications</a></h3>
     <p>Cette page permet d'inscrire des étudiants dans le semestre destination
     <a class="stdlink"
-    href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%(titreannee)s</a>, 
+    href="{
+        url_for("notes.formsemestre_status", scodoc_dept=g.scodoc_dept, formsemestre_id=sem["formsemestre_id"] )
+    }">{sem['titreannee']}</a>,
     et d'en désincrire si besoin.
     </p>
     <p>Les étudiants sont groupés par semestres d'origines. Ceux qui sont en caractères
@@ -495,10 +495,13 @@ def formsemestre_inscr_passage_help(sem):
     <p>Au départ, les étudiants déjà inscrits sont sélectionnés; vous pouvez ajouter d'autres
     étudiants à inscrire dans le semestre destination.</p>
     <p>Si vous dé-selectionnez un étudiant déjà inscrit (en gras), il sera désinscrit.</p>
+    <p>Le bouton <em>inscrire aux mêmes groupes</em> ne prend en compte que les groupes qui existent 
+    dans les deux semestres: pensez à créer les partitions et groupes que vous souhaitez conserver
+    <b>avant</b> d'inscrire les étudiants.
+    </p>
     <p class="help">Aucune action ne sera effectuée si vous n'appuyez pas sur le bouton "Appliquer les modifications" !</p>
-    </div>"""
-        % sem
-    )
+    </div>
+    """
 
 
 def etuds_select_boxes(
@@ -574,13 +577,13 @@ def etuds_select_boxes(
             if with_checkbox:
                 H.append(
                     """ (Select.
-                <a href="#" onclick="sem_select('%(id)s', true);">tous</a>
-                <a href="#" onclick="sem_select('%(id)s', false );">aucun</a>"""  # "
+                <a href="#" class="stdlink" onclick="sem_select('%(id)s', true);">tous</a>
+                <a href="#" class="stdlink" onclick="sem_select('%(id)s', false );">aucun</a>"""  # "
                     % infos
                 )
             if sel_inscrits:
                 H.append(
-                    """<a href="#" onclick="sem_select_inscrits('%(id)s');">inscrits</a>"""
+                    """<a href="#" class="stdlink" onclick="sem_select_inscrits('%(id)s');">inscrits</a>"""
                     % infos
                 )
             if with_checkbox or sel_inscrits:
diff --git a/app/views/scolar.py b/app/views/scolar.py
index 8a25b34bf2ccaeccd0313fcb298fb2796c6791b3..54e5371697a782c0bd965c1607ed0134f830201d 100644
--- a/app/views/scolar.py
+++ b/app/views/scolar.py
@@ -935,7 +935,7 @@ def partition_editor(formsemestre_id: int):
 def create_partition_parcours(formsemestre_id):
     """Création d'une partitions nommée "Parcours" (PARTITION_PARCOURS)
     avec un groupe par parcours."""
-    formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
+    formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id)
     formsemestre.setup_parcours_groups()
     return flask.redirect(
         url_for(