diff --git a/ecrire/action/editer_objet.php b/ecrire/action/editer_objet.php
index 20c8a69a8464535a2a324b8d4f819c55844fb746..5a328d1e5ad50438be7bde31777f5b7b4bd4d011 100644
--- a/ecrire/action/editer_objet.php
+++ b/ecrire/action/editer_objet.php
@@ -501,7 +501,13 @@ function objet_editer_heritage($objet, $id, $id_rubrique, $statut, $champs, $con
 		include_spip('inc/rubriques');
 		//$postdate = ($GLOBALS['meta']["post_dates"] == "non" AND isset($champs['date']) AND (strtotime($champs['date']) < time()))?$champs['date']:false;
 		$postdate = false;
-		calculer_rubriques_if($id_rubrique, $champs, $statut, $postdate);
+		// On rajoute les infos de l'objet
+		$infos = array(
+			'objet' => $objet,
+			'id_objet' => $id,
+			'statut_ancien' => $statut,
+		);
+		calculer_rubriques_if($id_rubrique, $champs, $infos, $postdate);
 	}
 }
 
diff --git a/ecrire/inc/rubriques.php b/ecrire/inc/rubriques.php
index 5b53432d169080024c8d2263831283b1a3db72de..57c1cd7569dbda716870fe3830add3f45c5f9fb9 100644
--- a/ecrire/inc/rubriques.php
+++ b/ecrire/inc/rubriques.php
@@ -46,16 +46,43 @@ if (!defined('_ECRIRE_INC_VERSION')) {
  *     Peut avoir 2 index, 'statut' étant obligatoire :
  *     - statut : indique le nouveau statut de la rubrique
  *     - id_rubrique : indiquer la rubrique dans laquelle on déplace la rubrique (son nouveau parent donc)
- * @param string $statut_ancien
- *     Ancien statut de la rubrique
+ * @param array $infos
+ *     Infos sur l'objet modifié : statut_ancien, objet, id_objet…
  * @param bool $postdate
  *     true pour recalculer aussi la date du prochain article post-daté
  * @return bool
  *     true si le statut change effectivement
  **/
-function calculer_rubriques_if($id_rubrique, $modifs, $statut_ancien = '', $postdate = false) {
+function calculer_rubriques_if($id_rubrique, $modifs, $infos = array(), $postdate = false) {
 	$neuf = false;
-	if ($statut_ancien == 'publie') {
+	
+	// Compat avec l'ancienne signature
+	if (is_string($infos)) {
+		$infos = array('statut_ancien' => $infos);
+	}
+	if (!isset($infos['statut_ancien'])) {
+		$infos['statut_ancien'] = '';
+	}
+	
+	// On recherche quels statuts tester
+	if (
+		isset($infos['objet'])
+		and include_spip('inc/filtres')
+		and $declaration_statut = objet_info($infos['objet'], 'statut')
+		and is_array($declaration_statut)
+	) {
+		foreach ($declaration_statut as $champ_statut) {
+			if ($champ_statut['champ'] == 'statut') {
+				$statuts_publies = array_map('trim', explode(',', $champ_statut['publie']));
+				break; // stop on a trouvé le bon champ
+			}
+		}
+	}
+	else {
+		$statuts_publies = array('publie');
+	}
+	
+	if (in_array($infos['statut_ancien'], $statuts_publies)) {
 		if (isset($modifs['statut'])
 			or isset($modifs['id_rubrique'])
 			or ($postdate and strtotime($postdate) > time())
@@ -69,7 +96,7 @@ function calculer_rubriques_if($id_rubrique, $modifs, $statut_ancien = '', $post
 		} elseif (isset($modifs['id_rubrique'])) {
 			$neuf |= publier_branche_rubrique($modifs['id_rubrique']);
 		}
-	} elseif (isset($modifs['statut']) and $modifs['statut'] == 'publie') {
+	} elseif (isset($modifs['statut']) and in_array($modifs['statut'], $statuts_publies)) {
 		if ($postdate) {
 			calculer_prochain_postdate(true);
 			$neuf |= (strtotime($postdate) <= time()); // par securite