diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp
index 973d8713eac29d1489d97e8cf5625456f584bf68..3b60486721abec0fb9490c6f975b5b8007b9ae59 100644
--- a/Marlin/src/gcode/gcode.cpp
+++ b/Marlin/src/gcode/gcode.cpp
@@ -336,7 +336,7 @@ void GcodeSuite::process_parsed_command(
         case 49: M49(); break;                                    // M49: Turn on or off G26 debug flag for verbose output
       #endif
 
-      #if ENABLED(ULTRA_LCD) && ENABLED(LCD_SET_PROGRESS_MANUALLY)
+      #if ENABLED(LCD_SET_PROGRESS_MANUALLY) && (ENABLED(ULTRA_LCD) || ENABLED(EXTENSIBLE_UI))
         case 73: M73(); break;                                    // M73: Set progress percentage (for display on LCD)
       #endif
 
diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h
index 07582bc351b034653608cf49d2ef43f69406352e..540e0208a636b48422c4a762c01cca40df73b010 100644
--- a/Marlin/src/gcode/gcode.h
+++ b/Marlin/src/gcode/gcode.h
@@ -488,7 +488,7 @@ private:
     static void M49();
   #endif
 
-  #if ENABLED(ULTRA_LCD) && ENABLED(LCD_SET_PROGRESS_MANUALLY)
+  #if ENABLED(LCD_SET_PROGRESS_MANUALLY) && (ENABLED(ULTRA_LCD) || ENABLED(EXTENSIBLE_UI))
     static void M73();
   #endif
 
diff --git a/Marlin/src/gcode/lcd/M73.cpp b/Marlin/src/gcode/lcd/M73.cpp
index 78697aecf3806cc2bdd9c67ad9c76db581f272a2..7f1ebf3ea1b817aafab7b9b1655f9fb08b8a20e1 100644
--- a/Marlin/src/gcode/lcd/M73.cpp
+++ b/Marlin/src/gcode/lcd/M73.cpp
@@ -22,7 +22,7 @@
 
 #include "../../inc/MarlinConfig.h"
 
-#if ENABLED(ULTRA_LCD) && ENABLED(LCD_SET_PROGRESS_MANUALLY)
+#if ENABLED(LCD_SET_PROGRESS_MANUALLY) && (ENABLED(EXTENSIBLE_UI) || ENABLED(ULTRA_LCD))
 
 #include "../gcode.h"
 #include "../../lcd/ultralcd.h"
@@ -42,4 +42,4 @@ void GcodeSuite::M73() {
     ui.set_progress(parser.value_byte());
 }
 
-#endif // ULTRA_LCD && LCD_SET_PROGRESS_MANUALLY
+#endif // LCD_SET_PROGRESS_MANUALLY && (ENABLED(EXTENSIBLE_UI) || ENABLED(ULTRA_LCD))
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index 85aa502ad18e5eb8492ebf4de453ccf12f746f8e..8869d99c800ad581723507cdebe94ff01a137c6d 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -500,8 +500,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
   #elif PROGRESS_MSG_EXPIRE < 0
     #error "PROGRESS_MSG_EXPIRE must be greater than or equal to 0."
   #endif
-#elif ENABLED(LCD_SET_PROGRESS_MANUALLY) && !HAS_GRAPHICAL_LCD
-  #error "LCD_SET_PROGRESS_MANUALLY requires LCD_PROGRESS_BAR or Graphical LCD."
+#elif ENABLED(LCD_SET_PROGRESS_MANUALLY) && !HAS_GRAPHICAL_LCD && DISABLED(EXTENSIBLE_UI)
+  #error "LCD_SET_PROGRESS_MANUALLY requires LCD_PROGRESS_BAR, Graphical LCD, or EXTENSIBLE_UI."
 #endif
 
 /**
diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp
index f5ba174df01eb2211ebd9a141fcd0c600a7ec954..20eae21ea3bee702ce6599d056f30b375e56978a 100644
--- a/Marlin/src/lcd/ultralcd.cpp
+++ b/Marlin/src/lcd/ultralcd.cpp
@@ -52,6 +52,10 @@
   char MarlinUI::status_message[MAX_MESSAGE_LENGTH + 1];
 #endif
 
+#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
+  uint8_t MarlinUI::progress_bar_percent; // = 0
+#endif
+
 #if HAS_SPI_LCD
 
 #if HAS_GRAPHICAL_LCD
@@ -102,10 +106,6 @@ uint8_t MarlinUI::lcd_status_update_delay = 1; // First update one loop delayed
   millis_t MarlinUI::next_filament_display; // = 0
 #endif
 
-#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
-  uint8_t MarlinUI::progress_bar_percent; // = 0
-#endif
-
 millis_t next_button_update_ms;
 
 #if HAS_GRAPHICAL_LCD
diff --git a/Marlin/src/lcd/ultralcd.h b/Marlin/src/lcd/ultralcd.h
index 54eb239b9df9ea277d908851ba04960ec6dafe72..77e001362cf7728e2c668818c94c1ebb7a37f155 100644
--- a/Marlin/src/lcd/ultralcd.h
+++ b/Marlin/src/lcd/ultralcd.h
@@ -271,6 +271,16 @@ public:
     static uint8_t status_message_level;      // Higher levels block lower levels
     static inline void reset_alert_level() { status_message_level = 0; }
 
+    #if HAS_PRINT_PROGRESS
+      #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
+        static uint8_t progress_bar_percent;
+        static void set_progress(const uint8_t progress) { progress_bar_percent = MIN(progress, 100); }
+      #endif
+      static uint8_t get_progress();
+    #else
+      static constexpr uint8_t get_progress() { return 0; }
+    #endif
+
     #if HAS_SPI_LCD
 
       static bool detected();
@@ -312,16 +322,6 @@ public:
       #endif
       static uint8_t lcd_status_update_delay;
 
-      #if HAS_PRINT_PROGRESS
-        #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
-          static uint8_t progress_bar_percent;
-          static void set_progress(const uint8_t progress) { progress_bar_percent = MIN(progress, 100); }
-        #endif
-        static uint8_t get_progress();
-      #else
-        static constexpr uint8_t get_progress() { return 0; }
-      #endif
-
       #if HAS_LCD_CONTRAST
         static int16_t contrast;
         static void set_contrast(const int16_t value);