diff --git a/app/but/cursus_but.py b/app/but/cursus_but.py
index 7b5b430bac346bbb58037bc3f5713b69813999b6..f3c19925e847685168c292670947435545dbc596 100644
--- a/app/but/cursus_but.py
+++ b/app/but/cursus_but.py
@@ -408,7 +408,7 @@ def but_validations_ues(
     etud: Identite,
     referentiel_competence_id: int,
     annees_but: None | Iterable[str] = None,
-) -> Query:
+) -> list[ScolarFormSemestreValidation]:
     """Query les validations d'UEs pour cet étudiant
     dans des UEs appartenant à ce référentiel de compétence
     et en option pour les années BUT indiquées.
@@ -417,18 +417,25 @@ def but_validations_ues(
     validations = (
         ScolarFormSemestreValidation.query.filter_by(etudid=etud.id)
         .filter(ScolarFormSemestreValidation.ue_id != None)
-        .join(FormSemestre, ScolarFormSemestreValidation.formsemestre)
         .join(UniteEns)
         .join(ApcNiveau)
     )
     # restreint à certaines années (utile pour les ECTS du DUT120)
     if annees_but:
         validations = validations.filter(ApcNiveau.annee.in_(annees_but))
-    # restreint au référentiel de compétence et trie
-    return (
-        validations.join(ApcCompetence)
-        .filter_by(referentiel_id=referentiel_competence_id)
-        .order_by(FormSemestre.semestre_id, UniteEns.numero, UniteEns.acronyme)
+    # restreint au référentiel de compétence
+    validations = validations.join(ApcCompetence).filter_by(
+        referentiel_id=referentiel_competence_id
+    )
+
+    # Tri (nb: fait en python pour gérer les validations externes qui n'ont pas de formsemestre)
+    return sorted(
+        validations,
+        key=lambda v: (
+            (v.formsemestre.semestre_id, v.ue.numero, v.ue.acronyme)
+            if v.formsemestre
+            else (v.ue.semestre_idx or -2, v.ue.numero, v.ue.acronyme)
+        ),
     )
 
 
diff --git a/sco_version.py b/sco_version.py
index 60714411bca6cc4ac974241da572e91286b40bb2..1f3a332118a905236c18c9f33a34371d6320982a 100644
--- a/sco_version.py
+++ b/sco_version.py
@@ -1,7 +1,7 @@
 # -*- mode: python -*-
 # -*- coding: utf-8 -*-
 
-SCOVERSION = "9.7.0"
+SCOVERSION = "9.7.1"
 
 SCONAME = "ScoDoc"