diff --git a/ZAbsences.py b/ZAbsences.py
index 94b3b2c85..6ebf844e0 100644
--- a/ZAbsences.py
+++ b/ZAbsences.py
@@ -936,7 +936,7 @@ class ZAbsences(
             moduleimpl_id = None
 
         groups_infos = sco_groups_view.DisplayedGroupsInfos(
-            self, group_ids, REQUEST=REQUEST
+            self, group_ids, moduleimpl_id=moduleimpl_id, REQUEST=REQUEST
         )
         if not groups_infos.members:
             return (
diff --git a/ZScolar.py b/ZScolar.py
index 133a827c9..7a6355700 100644
--- a/ZScolar.py
+++ b/ZScolar.py
@@ -764,14 +764,11 @@ UE11 Découverte métiers <span class="ue_code">(code UCOD46, 16 ECTS, Apo <span
             # Semestres dans lesquel il est inscrit
             ins = self.Notes.do_formsemestre_inscription_list({"etudid": etudid})
             etud["ins"] = ins
-            now = time.strftime("%Y-%m-%d")
             sems = []
             cursem = None  # semestre "courant" ou il est inscrit
             for i in ins:
                 sem = sco_formsemestre.get_formsemestre(self, i["formsemestre_id"])
-                debut = DateDMYtoISO(sem["date_debut"])
-                fin = DateDMYtoISO(sem["date_fin"])
-                if debut <= now and now <= fin:
+                if sco_formsemestre.sem_est_courant(self, sem):
                     cursem = sem
                     curi = i
                 sem["ins"] = i
diff --git a/sco_formsemestre.py b/sco_formsemestre.py
index 217c2a465..e4c574f87 100644
--- a/sco_formsemestre.py
+++ b/sco_formsemestre.py
@@ -374,8 +374,8 @@ def sem_in_semestre_scolaire(context, sem, year=False, saison=0, REQUEST=None):
     si saison non spécifiée: année complète
     pivot de saison au 1er décembre
     XXX TODO: la période (ici appelée "saison" devrait être éditable
-    manuellement dans le formsemestre_edit afin de couvrir els cas particulier
-    comme un semestre S2 qui commecerait en décembre... voire novembre.
+    manuellement dans le formsemestre_edit afin de couvrir les cas particulier
+    comme un semestre S2 qui commencerait en décembre... voire novembre.
     )
     """
     if not year:
@@ -429,6 +429,14 @@ def sem_une_annee(context, sem):
     return debut == fin
 
 
+def sem_est_courant(context, sem):
+    """Vrai si la date actuelle (now) est dans le semestre (les dates de début et fin sont incluses)"""
+    now = time.strftime("%Y-%m-%d")
+    debut = DateDMYtoISO(sem["date_debut"])
+    fin = DateDMYtoISO(sem["date_fin"])
+    return (debut <= now) and (now <= fin)
+
+
 def scodoc_get_all_unlocked_sems(context):
     """Liste de tous les semestres non verrouillés de tous les départements"""
     depts = context.list_depts()
diff --git a/sco_groups_view.py b/sco_groups_view.py
index bc17d8eec..1ae5387d6 100644
--- a/sco_groups_view.py
+++ b/sco_groups_view.py
@@ -298,6 +298,7 @@ class DisplayedGroupsInfos:
         formsemestre_id=None,
         etat=None,
         select_all_when_unspecified=False,
+        moduleimpl_id=None,  # used to find formsemestre when unspecified
         REQUEST=None,
     ):
         # log('DisplayedGroupsInfos %s' % group_ids)
@@ -306,10 +307,15 @@ class DisplayedGroupsInfos:
                 group_ids = [group_ids]  # cas ou un seul parametre, pas de liste
             else:
                 group_ids = []
+        if not formsemestre_id and moduleimpl_id:
+            mods = context.Notes.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)
+            if len(mods) != 1:
+                raise ValueError("invalid moduleimpl_id")
+            formsemestre_id = mods[0]["formsemestre_id"]
 
         if not group_ids:  # appel sans groupe (eg page accueil)
             if not formsemestre_id:
-                raise Exception("missing parameter")  # formsemestre_id or group_ids
+                raise Exception("missing parameter formsemestre_id or group_ids")
             if select_all_when_unspecified:
                 group_ids = [sco_groups.get_default_group(context, formsemestre_id)]
             else:
@@ -856,7 +862,9 @@ def tab_photos_html(context, groups_infos, etat=None, REQUEST=None):
     return sco_trombino.trombino_html(context, groups_infos, REQUEST=REQUEST)
 
 
-def form_choix_jour_saisie_hebdo(context, groups_infos, REQUEST=None):
+def form_choix_jour_saisie_hebdo(
+    context, groups_infos, moduleimpl_id=None, REQUEST=None
+):
     """Formulaire choix jour semaine pour saisie."""
     authuser = REQUEST.AUTHENTICATED_USER
     if not authuser.has_permission(ScoAbsChange, context):
@@ -871,7 +879,10 @@ def form_choix_jour_saisie_hebdo(context, groups_infos, REQUEST=None):
     )
     FA.append('<input type="hidden" name="datefin" value="%(date_fin)s"/>' % sem)
     FA.append(groups_infos.get_form_elem())
-
+    if moduleimpl_id:
+        FA.append(
+            '<input type="hidden" name="moduleimpl_id" value="%s"/>' % moduleimpl_id
+        )
     FA.append('<input type="hidden" name="destination" value=""/>')
 
     FA.append(
diff --git a/sco_moduleimpl_status.py b/sco_moduleimpl_status.py
index e60c642fb..99f1f8627 100644
--- a/sco_moduleimpl_status.py
+++ b/sco_moduleimpl_status.py
@@ -43,7 +43,7 @@ import sco_formsemestre
 import sco_formsemestre_status
 from sco_formsemestre_status import makeMenu
 import sco_compute_moy
-
+import ZAbsences
 
 # ported from old DTML code in oct 2009
 
@@ -224,7 +224,6 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
             )
         H.append("</td></tr>")
     else:
-        t0, t1 = "<em>règle de calcul standard</em>", ""
         H.append(
             '<tr><td colspan="4"><em title="mode de calcul de la moyenne du module">règle de calcul standard</em>'
         )
@@ -235,10 +234,21 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
             )
         H.append("</td></tr>")
     H.append(
-        '<tr><td colspan="2"><a class="stdlink" href="view_module_abs?moduleimpl_id=%s">Absences</a>&nbsp;'
+        '<tr><td colspan="4"><span class="moduleimpl_abs_link"><a class="stdlink" href="view_module_abs?moduleimpl_id=%s">Absences dans ce module</a></span>'
         % moduleimpl_id
     )
-    H.append("</table>")
+    # Adapté à partir d'une suggestion de DS (Le Havre)
+    # Liens saisies absences seulement si permission et date courante dans le semestre
+    if authuser.has_permission(
+        ScoAbsChange, context
+    ) and sco_formsemestre.sem_est_courant(context, sem):
+        datelundi = ZAbsences.ddmmyyyy(time.strftime("%d/%m/%Y")).prev_monday()
+        H.append(
+            '<span class="moduleimpl_abs_link"><a class="stdlink" href="Absences/SignaleAbsenceGrHebdo?formsemestre_id=%s&moduleimpl_id=%s&datelundi=%s">Saisie Absences hebdo.</a></span>'
+            % (formsemestre_id, moduleimpl_id, datelundi)
+        )
+
+    H.append("</td></tr></table>")
     #
     if has_expression and nt.expr_diagnostics:
         H.append(
@@ -478,7 +488,11 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
             % etat
         )
         if etat["moy"]:
-            H.append("%s / %g" % (etat["moy"], eval["note_max"]))
+            H.append("<b>%s / %g</b>" % (etat["moy"], eval["note_max"]))
+            H.append(
+                """&nbsp; (<a href="evaluation_listenotes?evaluation_id=%s">afficher</a>)"""
+                % (eval["evaluation_id"],)
+            )
         else:
             H.append(
                 """<a class="redlink" href="saisie_notes?evaluation_id=%s">saisir notes</a>"""
@@ -488,7 +502,6 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
         #
         if etat["nb_notes"] == 0:
             H.append("""<tr class="%s"><td colspan="8">&nbsp;""" % tr_class)
-            # XXX
             H.append("""</td></tr>""")
         else:  # il y a deja des notes saisies
             gr_moyennes = etat["gr_moyennes"]
@@ -505,7 +518,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
                 if gr_moyenne["gr_nb_notes"] > 0:
                     H.append("%(gr_moy)s" % gr_moyenne)
                     H.append(
-                        """&nbsp; (<a href="evaluation_listenotes?tf-submitted=1&amp;evaluation_id=%s&amp;group_ids%%3Alist=%s">%s</a> notes"""
+                        """&nbsp; (<a href="evaluation_listenotes?tf-submitted=1&amp;evaluation_id=%s&amp;group_ids%%3Alist=%s">%s notes</a>"""
                         % (
                             eval["evaluation_id"],
                             gr_moyenne["group_id"],
diff --git a/static/css/scodoc.css b/static/css/scodoc.css
index 875361b1c..7eebc65f8 100644
--- a/static/css/scodoc.css
+++ b/static/css/scodoc.css
@@ -1223,7 +1223,7 @@ ul.ue_inscr_list li.etud {
 }
 
 #grouplists table {
-   //border: 1px solid black;
+   /*border: 1px solid black;*/
    border-spacing: 1px;
 }
 
@@ -1236,7 +1236,9 @@ div.moduleimpl_tableaubord {
   padding: 7px;
   border: 2px solid gray;
 }
-
+span.moduleimpl_abs_link {
+  padding-right: 2em;
+}
 .moduleimpl_evaluations_top_links {
   font-size: 80%;
   margin-bottom: 3px;