diff --git a/app/comp/res_common.py b/app/comp/res_common.py
index 112cc6493c1ed7ff49550bc9d7f8d1525213b1c6..5214a2e66345ef3d3536c9406f0d2b6c4d8ab091 100644
--- a/app/comp/res_common.py
+++ b/app/comp/res_common.py
@@ -554,6 +554,8 @@ class ResultatsSemestre(ResultatsCache):
                             idx,
                         )
                     # Les moyennes des modules (ou ressources et SAÉs) dans cette UE
+                    idx_malus = idx  # place pour colonne malus à gauche des modules
+                    idx += 1
                     for modimpl in self.modimpls_in_ue(ue.id, etudid, with_bonus=False):
                         if ue_status["is_capitalized"]:
                             val = "-c-"
@@ -593,6 +595,8 @@ class ResultatsSemestre(ResultatsCache):
                             f"col_{modimpl.module.type_abbrv()} mod_ue_{ue.id}",
                             idx,
                         )
+                        if modimpl.module.module_type == scu.ModuleType.MALUS:
+                            titles[f"_{col_id}_col_order"] = idx_malus
                         titles_bot[f"_{col_id}_target"] = url_for(
                             "notes.moduleimpl_status",
                             scodoc_dept=g.scodoc_dept,
diff --git a/app/static/js/table_recap.js b/app/static/js/table_recap.js
index 897704c7e1580144d81b44c70bb170bc38c85efe..174fb186b8c2cbbc1b69fe63ef3b7618754bea5b 100644
--- a/app/static/js/table_recap.js
+++ b/app/static/js/table_recap.js
@@ -30,6 +30,7 @@ $(function () {
                         let visible = dt.columns(".col_res").visible()[0];
                         dt.columns(".col_res").visible(!visible);
                         dt.columns(".col_ue_bonus").visible(!visible);
+                        dt.columns(".col_malus").visible(!visible);
                         dt.buttons('toggle_res:name').text(visible ? "Montrer les ressources" : "Cacher les ressources");
                     }
                 } : {
@@ -39,6 +40,7 @@ $(function () {
                         let visible = dt.columns(".col_mod:not(.col_empty)").visible()[0];
                         dt.columns(".col_mod:not(.col_empty)").visible(!visible);
                         dt.columns(".col_ue_bonus").visible(!visible);
+                        dt.columns(".col_malus").visible(!visible);
                         dt.buttons('toggle_mod:name').text(visible ? "Montrer les modules" : "Cacher les modules");
                         visible = dt.columns(".col_empty").visible()[0];
                         dt.buttons('toggle_col_empty:name').text(visible ? "Cacher mod. vides" : "Montrer mod. vides");