diff --git a/VERSIONS_HOTLINE/211010 b/VERSIONS_HOTLINE/211010
new file mode 100644
index 0000000000000000000000000000000000000000..280eace798bb7cbc6c8d54bc22b969dafcf9ed80
--- /dev/null
+++ b/VERSIONS_HOTLINE/211010
@@ -0,0 +1 @@
+- correctif #211010 : Agenda : tri des articles par ordre du prochain évènement.
\ No newline at end of file
diff --git a/library/Class/Article/Select.php b/library/Class/Article/Select.php
index 22feea5d0988afb0826b846e8efe7655536e7f8d..3b0a903d4ff50fffb8a21425eec42d8fe6fafea2 100644
--- a/library/Class/Article/Select.php
+++ b/library/Class/Article/Select.php
@@ -288,7 +288,7 @@ class Class_Article_Select {
   }
 
 
-  protected function _orderAndLimit() {
+  protected function _orderAndLimit(): self {
     if(!$this->_select)
       return $this;
 
diff --git a/library/Class/Article/SelectWithTimings.php b/library/Class/Article/SelectWithTimings.php
index 3e4d0b603a02288e32b353918c3af9182e01fb42..02230ff6b8a16b58c331c3e2fb0fd911acd4a0ae 100644
--- a/library/Class/Article/SelectWithTimings.php
+++ b/library/Class/Article/SelectWithTimings.php
@@ -30,7 +30,8 @@ class Class_Article_SelectWithTimings extends Class_Article_Select {
 
     $this->_select
       ->joinLeft('cms_article_timings',
-                 'cms_article.id_article=cms_article_timings.article_id',
+                 'cms_article.id_article=cms_article_timings.article_id'
+                 . ' AND cms_article_timings.start >= NOW()',
                  ['min(cms_article_timings.start) as start', 'min(cms_article_timings.end) as end'])
       ->group('id_article');
 
@@ -83,4 +84,19 @@ class Class_Article_SelectWithTimings extends Class_Article_Select {
     $this->_select->where('EVENTS_FIN IS NOT NULL OR END IS NOT NULL');
     return $this;
   }
+
+
+  protected function _orderAndLimit(): self
+  {
+    if ($this->getSortOrder() == 'EventDebut')
+      $this->_select->order(['start', 'events_debut']);
+
+    if ($this->getSortOrder() == 'DebutPublicationDesc')
+      $this->_select->order(['debut desc', 'events_debut desc']);
+
+    if (!$this->_select->getPart('order'))
+      return parent::_orderAndLimit();
+
+    return $this;
+  }
 }
diff --git a/tests/scenarios/ArticlesMultipleTimings/ArticlesMultipleTimingsLoaderTest.php b/tests/scenarios/ArticlesMultipleTimings/ArticlesMultipleTimingsLoaderTest.php
index 9cb13bc3955834ddf3238ef6a275887b637d6429..87cefd0cac73d1ddf7343c9c93629e397e820854 100644
--- a/tests/scenarios/ArticlesMultipleTimings/ArticlesMultipleTimingsLoaderTest.php
+++ b/tests/scenarios/ArticlesMultipleTimings/ArticlesMultipleTimingsLoaderTest.php
@@ -50,7 +50,7 @@ class ArticlesMultipleTimingsLoaderSqlTest
   /** @test */
   public function withEventsOnlyShouldFilterOnEventsDates() {
     $this->getArticles(['events_only' => true]);
-    $this->assertSelect(sprintf('LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id WHERE %s AND (EVENTS_DEBUT IS NOT NULL OR START IS NOT NULL) AND (EVENTS_FIN IS NOT NULL OR (END IS NOT NULL AND END >= CURDATE())) AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `DATE_CREATION` DESC', self::WHERE_VISIBLE_CLAUSE));
+    $this->assertSelect(sprintf('LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id AND cms_article_timings.start >= NOW() WHERE %s AND (EVENTS_DEBUT IS NOT NULL OR START IS NOT NULL) AND (EVENTS_FIN IS NOT NULL OR (END IS NOT NULL AND END >= CURDATE())) AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `DATE_CREATION` DESC', self::WHERE_VISIBLE_CLAUSE));
   }
 
 
@@ -61,7 +61,7 @@ class ArticlesMultipleTimingsLoaderSqlTest
                         'id_categorie' => '',
                         'event_date' => '2011-03-15',
                         'id_bib' => 0]);
-    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id WHERE %s AND (EVENTS_DEBUT IS NOT NULL OR START IS NOT NULL) AND (EVENTS_FIN IS NOT NULL OR END IS NOT NULL) AND (left(EVENTS_DEBUT,10) <= '2011-03-15' OR left(START,10) <= '2011-03-15') AND (left(EVENTS_FIN,10) >= '2011-03-15' OR left(END,10) >= '2011-03-15') AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `DATE_CREATION` DESC",
+    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id AND cms_article_timings.start >= NOW() WHERE %s AND (EVENTS_DEBUT IS NOT NULL OR START IS NOT NULL) AND (EVENTS_FIN IS NOT NULL OR END IS NOT NULL) AND (left(EVENTS_DEBUT,10) <= '2011-03-15' OR left(START,10) <= '2011-03-15') AND (left(EVENTS_FIN,10) >= '2011-03-15' OR left(END,10) >= '2011-03-15') AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `start` ASC, `events_debut` ASC",
                                 self::WHERE_VISIBLE_CLAUSE));
   }
 
@@ -69,7 +69,7 @@ class ArticlesMultipleTimingsLoaderSqlTest
   /** @test */
   public function withEventEndAfterSqlShouldFilterOnEventsFin() {
     $this->getArticles(['event_end_after' => '2011-03-15']);
-    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id WHERE %s AND (EVENTS_FIN IS NOT NULL OR END IS NOT NULL) AND (left(EVENTS_FIN,10) >= '2011-03-15' OR left(END,10) >= '2011-03-15') AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `DATE_CREATION` DESC",  self::WHERE_VISIBLE_CLAUSE));
+    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id AND cms_article_timings.start >= NOW() WHERE %s AND (EVENTS_FIN IS NOT NULL OR END IS NOT NULL) AND (left(EVENTS_FIN,10) >= '2011-03-15' OR left(END,10) >= '2011-03-15') AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `DATE_CREATION` DESC",  self::WHERE_VISIBLE_CLAUSE));
   }
 
 
@@ -80,7 +80,7 @@ class ArticlesMultipleTimingsLoaderSqlTest
                         'id_categorie' => '',
                         'event_date' => '2011-03',
                         'id_bib' => 0]);
-    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id WHERE %s AND (EVENTS_DEBUT IS NOT NULL OR START IS NOT NULL) AND (EVENTS_FIN IS NOT NULL OR END IS NOT NULL) AND (left(EVENTS_DEBUT,7) <= '2011-03' OR left(START,7) <= '2011-03') AND (left(EVENTS_FIN,7) >= '2011-03' OR left(END,7) >= '2011-03') AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `DATE_CREATION` DESC",
+    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id AND cms_article_timings.start >= NOW() WHERE %s AND (EVENTS_DEBUT IS NOT NULL OR START IS NOT NULL) AND (EVENTS_FIN IS NOT NULL OR END IS NOT NULL) AND (left(EVENTS_DEBUT,7) <= '2011-03' OR left(START,7) <= '2011-03') AND (left(EVENTS_FIN,7) >= '2011-03' OR left(END,7) >= '2011-03') AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `start` ASC, `events_debut` ASC",
                                 self::WHERE_VISIBLE_CLAUSE));
   }
 
@@ -93,7 +93,7 @@ class ArticlesMultipleTimingsLoaderSqlTest
                         'events_only' => true,
                         'event_date' => '2011-03',
                         'id_bib' => 0]);
-    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id WHERE %s AND (EVENTS_DEBUT IS NOT NULL OR START IS NOT NULL) AND (EVENTS_FIN IS NOT NULL OR END IS NOT NULL) AND (left(EVENTS_DEBUT,7) <= '2011-03' OR left(START,7) <= '2011-03') AND (left(EVENTS_FIN,7) >= '2011-03' OR left(END,7) >= '2011-03') AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `DATE_CREATION` DESC",
+    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id AND cms_article_timings.start >= NOW() WHERE %s AND (EVENTS_DEBUT IS NOT NULL OR START IS NOT NULL) AND (EVENTS_FIN IS NOT NULL OR END IS NOT NULL) AND (left(EVENTS_DEBUT,7) <= '2011-03' OR left(START,7) <= '2011-03') AND (left(EVENTS_FIN,7) >= '2011-03' OR left(END,7) >= '2011-03') AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `start` ASC, `events_debut` ASC",
                                 self::WHERE_VISIBLE_CLAUSE));
   }
 
@@ -107,7 +107,7 @@ class ArticlesMultipleTimingsLoaderSqlTest
                         'events_only' => true,
                         'event_date' => '2011-03',
                         'id_bib' => 0]);
-    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id WHERE %s AND (EVENTS_DEBUT IS NOT NULL OR START IS NOT NULL) AND (EVENTS_FIN IS NOT NULL OR END IS NOT NULL) AND (left(EVENTS_DEBUT,7) <= '2011-03' OR left(START,7) <= '2011-03') AND (left(EVENTS_FIN,7) >= '2011-03' OR (left(END,7) >= '2011-03' AND END >= CURDATE())) AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `DATE_CREATION` DESC",
+    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id AND cms_article_timings.start >= NOW() WHERE %s AND (EVENTS_DEBUT IS NOT NULL OR START IS NOT NULL) AND (EVENTS_FIN IS NOT NULL OR END IS NOT NULL) AND (left(EVENTS_DEBUT,7) <= '2011-03' OR left(START,7) <= '2011-03') AND (left(EVENTS_FIN,7) >= '2011-03' OR (left(END,7) >= '2011-03' AND END >= CURDATE())) AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `start` ASC, `events_debut` ASC",
                                 self::WHERE_VISIBLE_CLAUSE));
   }
 
@@ -117,7 +117,7 @@ class ArticlesMultipleTimingsLoaderSqlTest
     $this->getArticles(['event_date' => 'trololo',
                         'event_start_after' => 'test',
                         'event_end_after' => 'raté']);
-    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id WHERE %s AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `DATE_CREATION` DESC",
+    $this->assertSelect(sprintf("LEFT JOIN `cms_article_timings` ON cms_article.id_article=cms_article_timings.article_id AND cms_article_timings.start >= NOW() WHERE %s AND (PARENT_ID=0) GROUP BY `id_article` ORDER BY `DATE_CREATION` DESC",
                                 self::WHERE_VISIBLE_CLAUSE));
   }
 }