diff --git a/formulaires/formidable.php b/formulaires/formidable.php
index d80c4e7d09e2e8aa04f778f547a1116a10a5d2e2..c0c9e1fb8fcbf3ed1767ee92030d37c8527aec48 100644
--- a/formulaires/formidable.php
+++ b/formulaires/formidable.php
@@ -248,9 +248,9 @@ function formulaires_formidable_verifier_etape_dist($etape, $id, $valeurs = arra
 	include_spip('inc/saisies');
 	$saisies = saisies_chercher_formulaire('formidable', array($id, $valeurs, $id_formulaires_reponse));
 
-	// Seulement si on est à la DERNIÈRE étape, on lance les vérifications propres aux traitements
-	if ($saisies and $etapes = saisies_lister_par_etapes($saisies) and $etape==count($etapes)) {
-		$erreurs = formulaires_formidable_verifier_traitements($id, $valeurs, $id_formulaires_reponse);
+	// On lance les vérifications propres aux traitements à chaque étape, pour avoir les messages d'erreurs à chaque étape
+	if ($saisies and $etapes = saisies_lister_par_etapes($saisies)) {
+		$erreurs = formulaires_formidable_verifier_traitements($id, $valeurs, $id_formulaires_reponse, $etapes, $etape);
 	}
 
 	return $erreurs;
@@ -266,11 +266,13 @@ function formulaires_formidable_verifier_etape_dist($etape, $id, $valeurs = arra
  *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
  * @param int|bool $id_formulaires_reponse
  *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
- *
+ * @param array $etapes
+ *		 Liste des saisies, ordonnées par étape
+ * @param int|null $etape le numéro de l'étape courante
  * @return array
  *     Tableau des erreurs
  */
-function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $id_formulaires_reponse = false) {
+function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $id_formulaires_reponse = false, $etapes = array(), $etape = null) {
 	$erreurs = array();
 
 	if (
@@ -289,6 +291,8 @@ function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $i
 						'id_formulaire' => $formulaire['id_formulaire'],
 						'valeurs' => $valeurs,
 						'id_formulaires_reponse' => $id_formulaires_reponse,
+						'etapes' => $etapes,
+						'etape' => $etape
 					),
 					$erreurs
 				);
diff --git a/traiter/enregistrement.php b/traiter/enregistrement.php
index 6ed6be6e01e2b63e7a836a22e8fdf3986e8f7769..44e7fa6b779dc905fa1bb66f3628190b8159b3a2 100644
--- a/traiter/enregistrement.php
+++ b/traiter/enregistrement.php
@@ -194,8 +194,16 @@ function traiter_enregistrement_verifier_dist($args, $erreurs) {
 	$id_formulaire = $args['id_formulaire'];
 	$options = $args['options'];
 	$id_formulaires_reponse = $args['id_formulaires_reponse'];
-
-	if (($unicite = $options['unicite']) != '' and !$erreurs[$unicite]) {
+	$etape = $args['etape'];
+	if (($unicite = $options['unicite']) != '' and !$erreurs[$unicite]
+		and
+		(
+			$etape === null
+			or (
+			 array_key_exists($unicite, saisies_lister_par_nom(array($args['etapes'][$etape])))
+			)
+		)
+	) {
 		if (!$id_formulaires_reponse) { // si pas de réponse explictement passée au formulaire, on cherche la réponse qui serait édité
 			$id_formulaires_reponse = formidable_trouver_reponse_a_editer($id_formulaire, $id_formulaires_reponse, $options);
 		}