diff --git a/.gitattributes b/.gitattributes
index 01b1070a5f085c64850a1181612974af73e08ac0..7033e4ce1fbb488c17b2aa9204d0ba5716084686 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -283,6 +283,9 @@ dist/prive/infos/breve_fonctions.php -text
 dist/prive/infos/rubrique.html -text
 dist/prive/infos/site.html -text
 dist/prive/infos/site_fonctions.php -text
+dist/prive/transmettre/signatures_article.html -text
+dist/prive/transmettre/statistiques.html -text
+dist/prive/transmettre/statistiques_article.html -text
 dist/puce.gif -text
 dist/puce_prive.gif -text
 dist/puce_prive_rtl.gif -text
diff --git a/dist/prive/transmettre/signatures_article.html b/dist/prive/transmettre/signatures_article.html
new file mode 100644
index 0000000000000000000000000000000000000000..dcb68b32cffa61e06f32cdbd16b7e26d10149ca7
--- /dev/null
+++ b/dist/prive/transmettre/signatures_article.html
@@ -0,0 +1,9 @@
+#HTTP_HEADER{Content-Type: text/csv; charset=#CHARSET}
+#HTTP_HEADER{Content-Disposition: attachment; filename=signature#ID_ARTICLE.csv}
+<BOUCLE0(ARTICLES){id_article}><B1>#TOTAL_BOUCLE <:info_signatures:> <:info_pour:>  #TITRE;
+<:nom:>;<:email:>
+<BOUCLE1(SIGNATURES){id_article}{par nom_email}>#NOM_EMAIL;#AD_EMAIL
+</BOUCLE1></BOUCLE0>
+
+
+
diff --git a/dist/prive/transmettre/statistiques.html b/dist/prive/transmettre/statistiques.html
new file mode 100644
index 0000000000000000000000000000000000000000..e6b84fe5400a65a6317ee9bdc90f6765e0aea38f
--- /dev/null
+++ b/dist/prive/transmettre/statistiques.html
@@ -0,0 +1,7 @@
+#HTTP_HEADER{Content-Type: text/csv; charset=#CHARSET}
+#HTTP_HEADER{Content-Disposition: attachment; filename=stats-#NOM_SITE_SPIP.csv}
+<BOUCLE1(VISITES){par date}>#DATE;#VISITES
+</BOUCLE1>
+
+
+
diff --git a/dist/prive/transmettre/statistiques_article.html b/dist/prive/transmettre/statistiques_article.html
new file mode 100644
index 0000000000000000000000000000000000000000..e5d4a286f2b0e7287b62dfa09dcf6819d17c2998
--- /dev/null
+++ b/dist/prive/transmettre/statistiques_article.html
@@ -0,0 +1,7 @@
+#HTTP_HEADER{Content-Type: text/csv; charset=#CHARSET}
+#HTTP_HEADER{Content-Disposition: attachment; filename=stats-#NOM_SITE_SPIP-#ID_ARTICLE.csv}
+<BOUCLE1(VISITES_ARTICLES){id_article}{par date}>#DATE;#VISITES
+</BOUCLE1>
+
+
+
diff --git a/ecrire/exec/statistiques_visites.php b/ecrire/exec/statistiques_visites.php
index a0675e9707c37373e87dc9b5f1b2a9d393ddbfd0..609add02fdb453a1266c96d033880c082950f03a 100644
--- a/ecrire/exec/statistiques_visites.php
+++ b/ecrire/exec/statistiques_visites.php
@@ -45,23 +45,6 @@ function http_img_rien($width, $height, $class='', $title='') {
 		. (!$title ? '' : (" title=\"$title\"")));
 }
 
-// pondre les stats sous forme d'un fichier csv tres basique
-// http://doc.spip.org/@statistiques_csv
-function statistiques_csv($id) {
-
-	$filename = 'stats_'.($id ? 'article'.$id : 'total').'.csv';
-	header('Content-Type: text/csv');
-	header('Content-Disposition: attachment; filename='.$filename);
-	
-	if ($id)
-		$s = sql_select("date, visites", "spip_visites_articles", "id_article=$id", "", "date");
-	else
-		$s = sql_select("date, visites", "spip_visites", "", "", "date");
-	while ($t = sql_fetch($s)) {
-		echo $t['date'].";".$t['visites']."\n";
-	}
-}
-
 // http://doc.spip.org/@exec_statistiques_visites_dist
 function exec_statistiques_visites_dist()
 {
@@ -74,12 +57,20 @@ function exec_statistiques_visites_dist()
 	if ($limit == 0) $limit = 100;
 
 	if (!autoriser('voirstats', $id_article ? 'article':'', $id_article)) {
-	  include_spip('inc/minipres');
-	  echo minipres();
+		include_spip('inc/minipres');
+		echo minipres();
 	} else {
-		if (_request('format') == 'csv')
-			statistiques_csv($id_article);
-		else exec_statistiques_visites_args($id_article, $aff_jours, $limit);
+		if (_request('format') != 'csv')
+			exec_statistiques_visites_args($id_article, $aff_jours, $limit);
+		else {
+			include_spip('public/assembler');
+			$fond = 'prive/transmettre/'
+			 .  (_request('table')=='visites' ? 'statistiques' : 'signatures');
+			if (!$id_article)
+				$page = envoyer_page($fond, array());
+			else envoyer_page($fond . "_article", 
+				array('id_article' => $id_article));
+		} 
 	}
 }
 
@@ -226,7 +217,6 @@ function exec_statistiques_visites_args($id_article, $aff_jours, $limit)
 
 	echo debut_droite('', true);
 
-	$mode = statistiques_mode(self());
 	if ($id_article) {
 			$table = "spip_visites_articles";
 			$table_ref = "spip_referers_articles";
@@ -256,11 +246,11 @@ function exec_statistiques_visites_args($id_article, $aff_jours, $limit)
 
 			echo statistiques_par_mois(sql_select("FROM_UNIXTIME(UNIX_TIMESTAMP(date),'%Y-%m') AS date_unix, SUM(visites) AS total_visites", $table,  "$where AND date > DATE_SUB(NOW(),INTERVAL 2700 DAY)", 'date_unix', "date"), $last);
 		}
-		echo fin_cadre_relief(true), $mode;
+		echo fin_cadre_relief(true), statistiques_mode('visites');
 	}
 
 	if ($id_article AND  $n = sql_countsel('spip_signatures', "id_article=$id_article")) {
-		echo statistiques_signatures($aff_jours, $id_article, $mode, $n);
+		echo statistiques_signatures($aff_jours, $id_article, statistiques_mode('signatures'), $n);
 	}
 
 	$r = sql_select("referer, referer_md5, visites AS vis", $table_ref, $where, "", "vis DESC", $limit);
@@ -439,7 +429,7 @@ function statistiques_tous($log, $date_premier, $last, $total_absolu, $val_popul
 // Le bouton pour CSV et pour passer de svg a htm
 
 // http://doc.spip.org/@statistiques_mode
-function statistiques_mode($lui)
+function statistiques_mode($table)
 {
 	if (flag_svg()) {
 		$lien = 'non'; $alter = 'HTML';
@@ -447,10 +437,15 @@ function statistiques_mode($lui)
 		$lien = 'oui'; $alter = 'SVG';
 	}
 
+	$lui = self();
+	$csv = parametre_url(parametre_url($lui, 'table', $table), 'format', 'csv');
+
 	return "\n<div style='text-align:".$GLOBALS['spip_lang_right'] . ";' class='verdana1 spip_x-small'>"
-		. "<a href='". parametre_url($lui, 'var_svg', $lien)."'>$alter</a>" 
-		. " | <a href='"
-	  	. parametre_url($lui, 'format', 'csv')."'>CSV</a>"
+		. "<a href='". parametre_url($lui, 'var_svg', $lien)."'>"
+		. $alter
+		. "</a> | <a href='"
+		. $csv
+	  	. "'>CSV</a>"
 		. "</div>\n";
 }
 
diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php
index 1447327e1146e0e6014726a25191be94bb81e231..9e38c591caec0109f6e7fb2c26984021971eae55 100644
--- a/ecrire/public/assembler.php
+++ b/ecrire/public/assembler.php
@@ -110,6 +110,18 @@ function public_assembler_dist($fond, $connect='') {
 	return assembler_page ($fond, $connect);
 }
 
+// fonction pour l'envoi de fichier
+function envoyer_page($fond, $contexte)
+{
+	$page = inclure_page($fond, $contexte);
+	if (!is_array($page['entetes'])) {
+		include_spip('inc/headers');
+		redirige_par_entete(generer_url_public('404'));
+	}
+	envoyer_entetes($page['entetes']);
+	echo $page['texte'];
+}
+
 // Envoyer les entetes, en retenant ceux qui sont a usage interne
 // et demarrent par X-Spip-...
 function envoyer_entetes($entetes) {