diff --git a/ecrire/base/dump.php b/ecrire/base/dump.php
index b2b8d38d844c478d60ebd1d1ace2c1a531a009cc..5c42e3f88bf915c3bf4843530af9c3ae990e9d51 100644
--- a/ecrire/base/dump.php
+++ b/ecrire/base/dump.php
@@ -42,6 +42,63 @@ function base_dump_dir($meta){
 	return $dir;
 }
 
+/**
+ * Lister toutes les tables d'un serveur
+ * en excluant eventuellement une liste fournie
+ *
+ * @param string $serveur
+ * @param array $tables
+ * @param array $exclude
+ * @return array
+ */
+function base_lister_toutes_tables($serveur='', $tables=array(), $exclude = array()) {
+	spip_connect($serveur);
+	$connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0];
+	$prefixe = $connexion['prefixe'];
+
+	$p = '/^' . $prefixe . '/';
+	$res = $tables;
+	foreach(sql_alltable(null,$serveur) as $t) {
+		if (preg_match($p, $t)) {
+			$t = preg_replace($p, 'spip', $t);
+			if (!in_array($t, $tables) AND !in_array($t, $exclude)) $res[]= $t;
+		}
+	}
+	sort($res);
+	return $res;
+}
+
+
+/**
+ * Fabrique la liste a cocher des tables a traiter (copie, delete, sauvegarde)
+ *
+ * @param string $name
+ * @param bool $check
+ * @return string
+ */
+function base_saisie_tables($name, $tables, $exclude = array(), $post=null, $serveur='') {
+	include_spip('inc/filtres');
+	foreach ($tables as $k => $t) {
+		// par defaut tout est coche sauf les tables dans $exclude
+		if (is_null($post))
+			$check = (in_array($t,$exclude)?false:true);
+		// mais si on a poste une selection, la reprendre
+		else
+			$check = in_array($t,$post);
+
+		$res[$k] = "<input type='checkbox' value='$t' name='$name"
+			. "[]' id='$name$k'"
+			. ($check ? " checked='checked'" : '')
+			. "/>\n"
+			. "<label for='$name$k'>".$t."</label>"
+			. " ("
+			. sinon(singulier_ou_pluriel(sql_countsel($t,'','','',$serveur), 'dump:une_donnee', 'dump:nb_donnees'),_T('dump:aucune_donnee'))
+	  		. ")";
+	}
+	return $res;
+}
+
+
 /**
  * Lister les tables non exportables par defaut
  * (liste completable par le pipeline lister_tables_noexport
diff --git a/ecrire/exec/delete_all.php b/ecrire/exec/delete_all.php
index 342ab61212e59d413c4e360280eef3b54692c7e0..4d898faabcc7e84e9592c5c58520edd52c15a3d4 100644
--- a/ecrire/exec/delete_all.php
+++ b/ecrire/exec/delete_all.php
@@ -20,12 +20,14 @@ function exec_delete_all_dist()
 		include_spip('inc/minipres');
 		echo minipres();
 	} else {
-		$res = liste_tables_en_base('delete');
+		include_spip('base/dump');
+		$res = base_lister_toutes_tables();
 		if (!$res) {
 		  	include_spip('inc/minipres');
 			spip_log("Erreur base de donnees");
 			echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique'). "<p><tt>".sql_errno()." ".sql_error()."</tt></p>");
 		} else {
+			$res = base_saisie_tables('delete', $res);
 			include_spip('inc/headers');
 			$res = "\n<ol style='text-align:left'><li>\n" .
 			  join("</li>\n<li>", $res) .
@@ -39,18 +41,4 @@ function exec_delete_all_dist()
 	}
 }
 
-function liste_tables_en_base($name)
-{
-	$res = sql_alltable();
-	$c = "type='checkbox' checked='checked'";
-	foreach ($res as $k => $t) {
-		$res[$k] = "<input $c value='$t' id='$name_$t' name='$name"
-			. "[]' />\n"
-			. $t
-			. " ("
-			.  sql_countsel($t)
-	  		. ")";
-	}
-	return $res;
-}
-?>
+?>
\ No newline at end of file