diff --git a/app/scodoc/sco_groups_view.py b/app/scodoc/sco_groups_view.py
index 0e46b1b451ce1d519920c07ab6cab57c811c3bef..c44e3c0cd141004c32f596ab02779a81c158b3a3 100644
--- a/app/scodoc/sco_groups_view.py
+++ b/app/scodoc/sco_groups_view.py
@@ -172,7 +172,7 @@ def form_groups_choice(groups_infos, with_selectall_butt=False, submit_on_change
         """<form id="group_selector" method="get">
     <input type="hidden" name="formsemestre_id" id="formsemestre_id" value="%s"/>
     <input type="hidden" name="default_group_id" id="default_group_id" value="%s"/>
-    Groupes: 
+    Groupes:
     """
         % (groups_infos.formsemestre_id, default_group_id)
     ]
@@ -693,7 +693,7 @@ def groups_table(
                     % (tab.base_url,),
                     """<li>
                     <a class="stdlink" href="export_groups_as_moodle_csv?formsemestre_id=%s">Fichier CSV pour Moodle (tous les groupes)</a>
-                    <em>(voir le paramétrage pour modifier le format des fichiers Moodle exportés)</em> 
+                    <em>(voir le paramétrage pour modifier le format des fichiers Moodle exportés)</em>
                     </li>"""
                     % groups_infos.formsemestre_id,
                 ]
@@ -840,7 +840,7 @@ def tab_absences_html(groups_infos, etat=None):
                             group_ids=group_ids,
                             date_debut=formsemestre.date_debut.isoformat(),
                             date_fin=formsemestre.date_fin.isoformat()
-                    ) 
+                    )
                 }">État de l'assiduité du groupe</a></li>""",
             "</ul>",
             "<h3>Feuilles</h3>",
@@ -867,14 +867,21 @@ def tab_absences_html(groups_infos, etat=None):
     group_id = sco_groups.get_default_group(groups_infos.formsemestre_id)
     if authuser.has_permission(Permission.EtudInscrit):
         H.append(
-            '<li><a class="stdlink" href="check_group_apogee?group_id=%s&etat=%s">Vérifier codes Apogée</a> (de tous les groupes)</li>'
-            % (group_id, etat or "")
+            f"""<li><a class="stdlink" href="{
+                url_for('scolar.check_group_apogee',
+                        scodoc_dept=g.scodoc_dept,
+                        group_id=group_id, etat=etat or "")
+                }">Vérifier codes Apogée</a> (de tous les groupes)</li>
+        """
         )
     # Lien pour ajout fichiers étudiants
     if authuser.has_permission(Permission.EtudAddAnnotations):
         H.append(
-            """<li><a class="stdlink" href="etudarchive_import_files_form?group_id=%s">Télécharger des fichiers associés aux étudiants (e.g. dossiers d'admission)</a></li>"""
-            % (group_id)
+            f"""<li><a class="stdlink" href="{
+                url_for('scolar.etudarchive_import_files_form',
+                        scodoc_dept=g.scodoc_dept,
+                        group_id=group_id
+        )}">Télécharger des fichiers associés aux étudiants (e.g. dossiers d'admission)</a></li>"""
         )
 
     H.append("</ul></div>")
diff --git a/app/scodoc/sco_synchro_etuds.py b/app/scodoc/sco_synchro_etuds.py
index 10c9662a7e00c48f026ee9eeb48ae9c12e483c1c..3f3a691e9b9ce7cfd851e85d6eb0ce4d1699c317 100644
--- a/app/scodoc/sco_synchro_etuds.py
+++ b/app/scodoc/sco_synchro_etuds.py
@@ -150,7 +150,7 @@ def formsemestre_synchro_etuds(
     ) = list_synch(sem, annee_apogee=annee_apogee)
     if export_cat_xls:
         filename = export_cat_xls
-        xls = build_page(
+        xls = _build_page(
             sem,
             etuds_by_cat,
             annee_apogee,
@@ -167,7 +167,7 @@ def formsemestre_synchro_etuds(
 
     H = [header]
     if not submitted:
-        H += build_page(
+        H += _build_page(
             sem,
             etuds_by_cat,
             annee_apogee,
@@ -288,7 +288,7 @@ def formsemestre_synchro_etuds(
     return "\n".join(H)
 
 
-def build_page(
+def _build_page(
     sem,
     etuds_by_cat,
     annee_apogee,
@@ -332,26 +332,23 @@ def build_page(
             + len(etuds_by_cat["etuds_nonapogee"]["etuds"])
             + len(etuds_by_cat["inscrits_without_key"]["etuds"])
         ),
-        """<p>Code étape Apogée: %(etape_apo_str)s</p>
+        f"""<p>Code étape Apogée: {sem['etape_apo_str']}</p>
         <form method="post" action="formsemestre_synchro_etuds">
-        """
-        % sem,
-        """
-        Année Apogée: <select id="anne_eapogee" name="annee_apogee" 
-        onchange="document.location='formsemestre_synchro_etuds?formsemestre_id=%s&annee_apogee='+document.getElementById('annee_apogee').value">"""
-        % (sem["formsemestre_id"]),
+        Année Apogée: <select id="annee_apogee" name="annee_apogee"
+        onchange="document.location='formsemestre_synchro_etuds?formsemestre_id={
+            sem['formsemestre_id']
+            }&annee_apogee='+document.getElementById('annee_apogee').value">
+        """,
         "\n".join(options),
-        """
-        </select>
+        """</select>
         """,
         ""
         if read_only
-        else """
-        <input type="hidden" name="formsemestre_id" value="%(formsemestre_id)s"/>
+        else f"""
+        <input type="hidden" name="formsemestre_id" value="{sem['formsemestre_id']}"/>
         <input type="submit" name="submitted" value="Appliquer les modifications"/>
         &nbsp;<a href="#help">aide</a>
-        """
-        % sem,  # "
+        """,
         sco_inscr_passage.etuds_select_boxes(
             etuds_by_cat,
             sel_inscrits=False,
@@ -454,7 +451,7 @@ def list_synch(sem, annee_apogee=None):
             "infos": {
                 "id": "etuds_a_importer",
                 "title": "Étudiants dans Apogée à importer",
-                "help": """Ces étudiants sont inscrits dans cette étape Apogée mais ne sont pas connus par ScoDoc: 
+                "help": """Ces étudiants sont inscrits dans cette étape Apogée mais ne sont pas connus par ScoDoc:
                 cocher les noms à importer et inscrire puis appuyer sur le bouton "Appliquer".""",
                 "title_target": "",
                 "with_checkbox": True,
@@ -508,7 +505,7 @@ def list_synch(sem, annee_apogee=None):
             "infos": {
                 "id": "etuds_ok",
                 "title": "Étudiants dans Apogée et déjà inscrits",
-                "help": """Ces etudiants sont inscrits dans le semestre ScoDoc et sont présents dans Apogée: 
+                "help": """Ces etudiants sont inscrits dans le semestre ScoDoc et sont présents dans Apogée:
                 tout est donc correct. Décocher les étudiants que vous souhaitez désinscrire.""",
                 "title_target": "",
                 "with_checkbox": True,
@@ -556,13 +553,16 @@ def list_all(etudsapo_set):
 
 
 def formsemestre_synchro_etuds_help(sem):
-    sem["default_group_id"] = sco_groups.get_default_group(sem["formsemestre_id"])
-    return (
-        """<div class="pas_help pas_help_left"><h3><a name="help">Explications</a></h3>
+    formsemestre_id = sem["formsemestre_id"]
+    default_group_id = sco_groups.get_default_group(sem["formsemestre_id"])
+    return f"""<div class="pas_help pas_help_left"><h3><a name="help">Explications</a></h3>
     <p>Cette page permet d'importer dans le semestre destination
     <a class="stdlink"
-    href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%(titreannee)s</a>
-    les étudiants inscrits dans l'étape Apogée correspondante (<b><tt>%(etape_apo_str)s</tt></b>) 
+    href="{url_for('notes.formsemestre_status', scodoc_dept=g.scodoc_dept,
+                   formsemestre_id=formsemestre_id)
+           }">{sem['titreannee']}</a>
+    les étudiants inscrits dans l'étape Apogée correspondante
+    (<b><tt>{sem['etape_apo_str']}</tt></b>)
     </p>
     <p>Au départ, tous les étudiants d'Apogée sont sélectionnés; vous pouvez
     en déselectionner certains. Tous les étudiants cochés seront inscrits au semestre ScoDoc,
@@ -571,15 +571,19 @@ def formsemestre_synchro_etuds_help(sem):
 
     <h4>Autres fonctions utiles</h4>
     <ul>
-    <li><a href="check_group_apogee?group_id=%(default_group_id)s">vérification
-    des codes Apogée</a> (des étudiants déjà inscrits)</li>
-    <li>le <a href="formsemestre_inscr_passage?formsemestre_id=%(formsemestre_id)s">
+    <li><a class="stdlink" href="{
+        url_for("scolar.check_group_apogee", scodoc_dept=g.scodoc_dept,
+                group_id=default_group_id)
+    }">vérification des codes Apogée</a> (des étudiants déjà inscrits)
+    </li>
+    <li>le <a class="stdlink" href="{url_for('notes.formsemestre_inscr_passage',
+                             scodoc_dept=g.scodoc_dept,
+                             formsemestre_id=formsemestre_id)}">
     formulaire de passage</a> qui permet aussi de désinscrire des étudiants
     en cas d'erreur, etc.</li>
     </ul>
-    </div>"""
-        % sem
-    )
+    </div>
+    """
 
 
 def gender2civilite(gender):
diff --git a/sco_version.py b/sco_version.py
index df7c410ab8094815b3aa56e41fe6f4217a409f61..b523ac6b59216d396a3c810e7cc7ba5ba7c07fe0 100644
--- a/sco_version.py
+++ b/sco_version.py
@@ -1,7 +1,7 @@
 # -*- mode: python -*-
 # -*- coding: utf-8 -*-
 
-SCOVERSION = "9.6.45"
+SCOVERSION = "9.6.46"
 
 SCONAME = "ScoDoc"
 
@@ -46,7 +46,7 @@ SCONEWS = """
 
 <h4>Année 2021</h4>
 <ul>
-<li>ScoDoc 9.2: 
+<li>ScoDoc 9.2:
  <ul>
  <li>Tableau récap. complet pour BUT et autres formations.</li>
  <li>Tableau état évaluations</li>