diff --git a/action/editer_document.php b/action/editer_document.php
index 8d2b6acd63be8f9f9f4acfc6f0b9ec2da3f53b62..e39986c2c79f1061b262873bf916ef3cc3c911a1 100644
--- a/action/editer_document.php
+++ b/action/editer_document.php
@@ -189,55 +189,28 @@ function document_instituer($id_document, $champs = array()) {
 	$statut_ancien = $row['statut'];
 	$date_publication_ancienne = $row['date_publication'];
 
+	$champs = array();
+
 	/* Autodetermination du statut si non fourni */
 	if (is_null($statut)) {
-		$statut = 'prepa';
+		$determiner_statut_document = charger_fonction('determiner_statut_document', 'inc');
+		$champs = $determiner_statut_document($id_document, $statut_ancien, $date_publication_ancienne);
 
-		$trouver_table = charger_fonction('trouver_table', 'base');
-		$res = sql_select(
-			'id_objet,objet',
-			'spip_documents_liens',
-			"objet!='document' AND id_document=" . intval($id_document)
-		);
-		// On aura 19 jours 3h14 et 7 secondes pour corriger en 2038 (limitation de la représentation POSIX du temps sur les 32 bits)
-		$date_publication = strtotime('2038-01-01 00:00:00');
-		include_spip('base/objets');
-		while ($row = sql_fetch($res)) {
-			if (
-				// cas particulier des rubriques qui sont publiees des qu'elles contiennent un document !
-				$row['objet'] == 'rubrique'
-				// ou si objet publie selon sa declaration
-				or objet_test_si_publie($row['objet'], $row['id_objet'])
-			) {
-				$statut = 'publie';
-				$date_publication = 0;
-				continue;
-			} // si pas publie, et article, il faut checker la date de post-publi eventuelle
-			elseif ($row['objet'] == 'article'
-				and $row2 = sql_fetsel(
-					'date',
-					'spip_articles',
-					'id_article=' . intval($row['id_objet']) . " AND statut='publie'"
-				)
-			) {
-				$statut = 'publie';
-				$date_publication = min($date_publication, strtotime($row2['date']));
-			}
-		}
-		$date_publication = date('Y-m-d H:i:s', $date_publication);
-		if ($statut == 'publie' and $statut_ancien == 'publie' and $date_publication == $date_publication_ancienne) {
+		// rien a faire
+		if ($champs === false) {
 			return false;
 		}
-		if ($statut != 'publie' and $statut_ancien != 'publie' and $statut_ancien != '0') {
-			return false;
+
+	}
+	else {
+		if ($statut !== $statut_ancien) {
+			$champs['statut'] = $statut;
 		}
 	}
 
-	$champs = array();
-	if ($statut !== $statut_ancien) {
-		$champs['statut'] = $statut;
-	}
-	if ($date_publication != $date_publication_ancienne) {
+	if (!is_null($date_publication)
+		and empty($champs['date_publication'])
+		and $date_publication != $date_publication_ancienne) {
 		$champs['date_publication'] = $date_publication;
 	}
 
diff --git a/inc/determiner_statut_document.php b/inc/determiner_statut_document.php
new file mode 100644
index 0000000000000000000000000000000000000000..35aac533ff76bcbb3a4f7dddc35b9c77476c1f3e
--- /dev/null
+++ b/inc/determiner_statut_document.php
@@ -0,0 +1,83 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2020                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+/**
+ * Gestion des modes de documents
+ *
+ * @package SPIP\Medias\Modes
+ */
+if (!defined('_ECRIRE_INC_VERSION')) {
+	return;
+}
+
+/**
+ * Determiner le statut automatique d'un document
+ * @param int $id_document
+ * @param string $statut_ancien
+ * @param string $date_publication_ancienne
+ * @return array|false
+ */
+function inc_determiner_statut_document($id_document, $statut_ancien, $date_publication_ancienne) {
+
+	$statut = 'prepa';
+
+	$trouver_table = charger_fonction('trouver_table', 'base');
+	$res = sql_select(
+		'id_objet,objet',
+		'spip_documents_liens',
+		"objet!='document' AND id_document=" . intval($id_document)
+	);
+
+	// On aura 19 jours 3h14 et 7 secondes pour corriger en 2038 (limitation de la représentation POSIX du temps sur les 32 bits)
+	$date_publication = strtotime('2038-01-01 00:00:00');
+	include_spip('base/objets');
+	while ($row = sql_fetch($res)) {
+		if (
+			// cas particulier des rubriques qui sont publiees des qu'elles contiennent un document !
+			$row['objet'] == 'rubrique'
+			// ou si objet publie selon sa declaration
+			or objet_test_si_publie($row['objet'], $row['id_objet'])
+		) {
+			$statut = 'publie';
+			$date_publication = 0;
+			continue;
+		} // si pas publie, et article, il faut checker la date de post-publi eventuelle
+		elseif ($row['objet'] == 'article'
+			and $row2 = sql_fetsel(
+				'date',
+				'spip_articles',
+				'id_article=' . intval($row['id_objet']) . " AND statut='publie'"
+			)
+		) {
+			$statut = 'publie';
+			$date_publication = min($date_publication, strtotime($row2['date']));
+		}
+	}
+
+	$date_publication = date('Y-m-d H:i:s', $date_publication);
+	if ($statut == 'publie' and $statut_ancien == 'publie' and $date_publication == $date_publication_ancienne) {
+		return false;
+	}
+	if ($statut != 'publie' and $statut_ancien != 'publie' and $statut_ancien != '0') {
+		return false;
+	}
+
+	$champs = [];
+	if ($statut !== $statut_ancien) {
+		$champs['statut'] = $statut;
+	}
+	if ($date_publication !== $date_publication_ancienne) {
+		$champs['date_publication'] = $date_publication;
+	}
+
+	return $champs;
+}
diff --git a/paquet.xml b/paquet.xml
index 8116b8c1cabb57817bbb8a9c7ab15b0046f7a7e4..621cb618084fc3eb3d93beab62027378dbddec66 100644
--- a/paquet.xml
+++ b/paquet.xml
@@ -1,7 +1,7 @@
 <paquet
 	prefix="medias"
 	categorie="multimedia"
-	version="2.20.32"
+	version="2.20.33"
 	etat="stable"
 	compatibilite="[3.2.0;3.2.*]"
 	logo="prive/themes/spip/images/portfolio-32.png"