diff --git a/ecrire/action/iconifier.php b/ecrire/action/iconifier.php
index 69eb4f88bbfe000a78c03c31efce9a10f8de6daf..15f3ebc51e4c8f9f7d35e073b4d93ecbc99bb7e0 100644
--- a/ecrire/action/iconifier.php
+++ b/ecrire/action/iconifier.php
@@ -79,7 +79,7 @@ function action_spip_image_effacer_dist($arg) {
  * @param string $source
  *     Chemin du logo uploadé sur le serveur en attente d'utilisation
 **/
-function action_spip_image_ajouter_dist($arg,$sousaction2,$source) {
+function action_spip_image_ajouter_dist($arg,$sousaction2,$source,$return=false) {
 	global $formats_logos;
 
 	include_spip('inc/documents');
@@ -87,6 +87,7 @@ function action_spip_image_ajouter_dist($arg,$sousaction2,$source) {
 		if (!$_FILES) $_FILES = $GLOBALS['HTTP_POST_FILES'];
 		$source = (is_array($_FILES) ? array_pop($_FILES) : "");
 	}
+	$erreur = "";
 	if (!$source)
 		spip_log("spip_image_ajouter : source inconnue");
 	else {
@@ -97,7 +98,7 @@ function action_spip_image_ajouter_dist($arg,$sousaction2,$source) {
 	  		$source = @copy(determine_upload() . $source, $f);
 		else {
 		// Intercepter une erreur a l'envoi
-			if (check_upload_error($source['error']))
+			if ($erreur = check_upload_error($source['error'],"",$return))
 				$source ="";
 			else
 		// analyse le type de l'image (on ne fait pas confiance au nom de
@@ -117,37 +118,42 @@ function action_spip_image_ajouter_dist($arg,$sousaction2,$source) {
 			if (_LOGO_MAX_SIZE > 0
 			AND $poids > _LOGO_MAX_SIZE*1024) {
 				spip_unlink ($f);
-				check_upload_error(6,
-				_T('info_logo_max_poids',
-					array('maxi' => taille_en_octets(_LOGO_MAX_SIZE*1024),
-					'actuel' => taille_en_octets($poids))));
+				$erreur = _T('info_logo_max_poids',
+									array('maxi' => taille_en_octets(_LOGO_MAX_SIZE*1024),
+									'actuel' => taille_en_octets($poids)));
 			}
 
-			if (_LOGO_MAX_WIDTH * _LOGO_MAX_HEIGHT
+			elseif (_LOGO_MAX_WIDTH * _LOGO_MAX_HEIGHT
 			AND ($size[0] > _LOGO_MAX_WIDTH
 			OR $size[1] > _LOGO_MAX_HEIGHT)) {
 				spip_unlink ($f);
-				check_upload_error(6, 
-				_T('info_logo_max_poids',
-					array(
-					'maxi' =>
-						_T('info_largeur_vignette',
-							array('largeur_vignette' => _LOGO_MAX_WIDTH,
-							'hauteur_vignette' => _LOGO_MAX_HEIGHT)),
-					'actuel' =>
-						_T('info_largeur_vignette',
-							array('largeur_vignette' => $size[0],
-							'hauteur_vignette' => $size[1]))
-				)));
+				$erreur = _T('info_logo_max_poids',
+									array(
+									'maxi' =>
+										_T('info_largeur_vignette',
+											array('largeur_vignette' => _LOGO_MAX_WIDTH,
+											'hauteur_vignette' => _LOGO_MAX_HEIGHT)),
+									'actuel' =>
+										_T('info_largeur_vignette',
+											array('largeur_vignette' => $size[0],
+											'hauteur_vignette' => $size[1]))
+									));
 			}
-			@rename ($f, _DIR_LOGOS . $arg . ".$type");
+			else
+				@rename ($f, _DIR_LOGOS . $arg . ".$type");
 		}
 		else {
 			spip_unlink ($f);
-			check_upload_error(6,_T('info_logo_format_interdit',
-						array('formats' => join(', ', $formats_logos))));
+			$erreur = _T('info_logo_format_interdit',
+									array('formats' => join(', ', $formats_logos)));
 		}
 	
 	}
+	if ($erreur){
+		if ($return)
+			return $erreur;
+		else
+			check_upload_error(6,$erreur);
+	}
 }
 ?>
diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php
index ed3c03a45f508185be166259f4fd26750a0109d6..634a55a270fe11bb8d652b768ee0ae7bfa511bf3 100644
--- a/ecrire/inc/documents.php
+++ b/ecrire/inc/documents.php
@@ -205,7 +205,7 @@ function deplacer_fichier_upload($source, $dest, $move=false) {
 // et true si erreur = pas de fichier
 // pour les autres erreurs affiche le message d'erreur et meurt
 // http://doc.spip.org/@check_upload_error
-function check_upload_error($error, $msg='') {
+function check_upload_error($error, $msg='', $return=false) {
 	global $spip_lang_right;
 
 	if (!$error) return false;
@@ -239,8 +239,10 @@ function check_upload_error($error, $msg='') {
 	}
 
 	spip_log ("erreur upload $error");
+	if ($return)
+		return $msg;
 
-  	if(_request("iframe")=="iframe") {
+  if(_request("iframe")=="iframe") {
 	  echo "<div class='upload_answer upload_error'>$msg</div>";
 	  exit;
 	}
diff --git a/prive/formulaires/editer_logo.php b/prive/formulaires/editer_logo.php
index a20ac0fae0366b4a6f7f0255b729ee78c6dccefa..607556ea0f1e675eaac25d9d49b146f71ff1eb3f 100644
--- a/prive/formulaires/editer_logo.php
+++ b/prive/formulaires/editer_logo.php
@@ -214,8 +214,10 @@ function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour='', $op
 				$logo = $chercher_logo($id_objet, $_id_objet, $etat);
 				if ($logo)
 					spip_unlink($logo[0]);
-				$ajouter_image($type.$etat.$id_objet," ",$file);
-				$res['message_ok'] = ''; // pas besoin de message : la validation est visuelle
+				if ($err = $ajouter_image($type.$etat.$id_objet," ",$file,true))
+					$res['message_erreur'] = $err;
+				else
+					$res['message_ok'] = ''; // pas besoin de message : la validation est visuelle
 				set_request('logo_up',' ');
 			}
 		}