diff --git a/aep-schedule-generator/src/algorithm/generation.rs b/aep-schedule-generator/src/algorithm/generation.rs
index 4ce040eaffff09ac370c27a3799d48b308e2dc03..88a0bf5f7ca09d5ba463bae98abab72f3fb73d60 100644
--- a/aep-schedule-generator/src/algorithm/generation.rs
+++ b/aep-schedule-generator/src/algorithm/generation.rs
@@ -1,3 +1,5 @@
+use compact_str::CompactString;
+
 use super::{
     //conflicts::Conflicts,
     schedule::ScheduleBuilder,
@@ -19,6 +21,13 @@ impl SchedulesOptions {
     // pub fn get_simple_conflict<'a>(&'a self) -> Option<Conflicts> {
 
     // }
+    pub fn get_impossible_course<'a>(&'a self) -> Vec<CompactString> {
+        self.courses_to_take
+            .iter()
+            .filter(|c| c.is_impossible())
+            .map(|c| c.sigle.clone())
+            .collect()
+    }
     pub fn get_nb_combinations<'a>(&'a self) -> usize {
         self.courses_to_take
             .iter()
diff --git a/aep-schedule-generator/src/data/course.rs b/aep-schedule-generator/src/data/course.rs
index ba9d26174b9a232d10c9cc421e77f8b59d6ff68b..c523b628933742d5891062cf60162902e88fa50d 100644
--- a/aep-schedule-generator/src/data/course.rs
+++ b/aep-schedule-generator/src/data/course.rs
@@ -155,4 +155,15 @@ impl Course {
                 .is_some_and(|g| g.open),
         }
     }
+    pub fn is_impossible(&self) -> bool {
+        match &self.course_type {
+            CourseType::TheoOnly { theo_groups } => theo_groups.is_impossible(),
+            CourseType::LabOnly { lab_groups } => lab_groups.is_impossible(),
+            CourseType::Both {
+                theo_groups,
+                lab_groups,
+            } => theo_groups.is_impossible() | lab_groups.is_impossible(),
+            CourseType::Linked { theo_groups, .. } => theo_groups.is_impossible(),
+        }
+    }
 }
diff --git a/aep-schedule-generator/src/data/groups.rs b/aep-schedule-generator/src/data/groups.rs
index a2dd60d9fa9a0c701da9995344f11cb7042729ec..ebb8b460f2ea6a2a3f8987b8e0d07670f497d05f 100644
--- a/aep-schedule-generator/src/data/groups.rs
+++ b/aep-schedule-generator/src/data/groups.rs
@@ -61,6 +61,10 @@ impl Groups {
         self[index].as_mut()
     }
 
+    pub fn is_impossible(&self) -> bool {
+        self.iter().all(|c| !c.open)
+    }
+
     pub fn get_closed(&self, group_type: GroupType, sigle: &CompactString) -> Vec<SigleGroup> {
         self.iter()
             .filter(|g| !g.open)