diff --git a/controleurs/formulaires_reponses_champ.html b/controleurs/formulaires_reponses_champ.html
new file mode 100644
index 0000000000000000000000000000000000000000..994f4d7b9554287a5eaf234a7d2f061bbfb203e0
--- /dev/null
+++ b/controleurs/formulaires_reponses_champ.html
@@ -0,0 +1,5 @@
+<div style="width:#ENV{largeur}px;#ENV{style};background-color:inherit;">
+	<[(#DIV|sinon{ul})] class="editer-groupe">
+		#GENERER_SAISIES{#ENV{_saisies}}
+	</[(#DIV|sinon{ul})]>
+</div>
diff --git a/controleurs/formulaires_reponses_champ.php b/controleurs/formulaires_reponses_champ.php
new file mode 100644
index 0000000000000000000000000000000000000000..d8210882665adfec1df9f58196f3eae7f45120f9
--- /dev/null
+++ b/controleurs/formulaires_reponses_champ.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * Controleur de Crayons pour les champs d'une réponse
+ *
+ * @param array $regs
+ * @param array|null $c
+ * @return array Liste html, erreur
+ */
+function controleurs_formulaires_reponses_champ_dist($regs, $c = null) {
+	include_spip('inc/saisies');
+	list(,$crayon, $type, $champ, $id) = $regs;
+	$id_formulaires_reponses_champ = $regs[4];
+
+	// Recuperer id_formulaires_reponse et id_formulaire
+	// Note, sans doute pourrait-on passer directement cela en classe
+	// Mais
+	// 1. Cela ferait une exception
+	// 2. Des gens utilisent peut être pas #VOIR_REPONSE{xxx,edit}
+	$data = sql_fetsel('*', 'spip_formulaires_reponses_champs JOIN spip_formulaires_reponses JOIN spip_formulaires', "id_formulaires_reponses_champ=$id_formulaires_reponses_champ AND spip_formulaires_reponses.id_formulaires_reponse = spip_formulaires_reponses_champs.id_formulaires_reponse AND spip_formulaires.id_formulaire = spip_formulaires_reponses.id_formulaire");
+	$id_formulaires_reponse = $data['id_formulaires_reponse'];
+
+
+	$nom = $data['nom'];
+	$valeur = $data['valeur'];
+	$saisie = saisies_chercher(unserialize($data['saisies']), $nom);
+	$valeur = $data['valeur'];
+
+	$n = new Crayon(
+		$type . '-valeur-' . $id_formulaires_reponses_champ,
+		$valeur,
+		array('controleur' => 'controleurs/formulaires_reponses_champ')
+	);
+	$key = $n->key;
+
+	unset($saisie['options']['label']);
+	unset($saisie['options']['explication']);
+	unset($saisie['options']['class']);
+	unset($saisie['options']['li_class']);
+	// Crayons utilise son propre formalisme pour le 'name' des saisies.
+	$nom_crayons = 'content_' . $key . '_valeur';
+	$saisie['options']['nom'] = $nom_crayons;
+
+	$contexte = array('_saisies' => array($saisie), $nom_crayons =>  $valeur);
+	$html = $n->formulaire($contexte);
+
+	$status = $scripts = null;
+
+	// probablement pas la meilleure idée du siècle…
+	// mais tenter d'afficher correctement le picker de date du plugin saisies dans l'espace public
+	if (!test_espace_prive() and $saisie['saisie'] == 'date') {
+		$scripts = '<link rel="stylesheet" type="text/css" href="' . find_in_path('css/ui/jquery-ui.css') . '" />';
+	}
+
+	return array($html . $scripts, $status);
+}
diff --git a/formidable_fonctions.php b/formidable_fonctions.php
index 61ef535bd4e2fe5cd4e775b97b14beb251f342af..c0c317a521e0854844b434bcbf1ece1eded334ae 100644
--- a/formidable_fonctions.php
+++ b/formidable_fonctions.php
@@ -99,7 +99,12 @@ function calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $s
 
 	// Si on demande edit > mode crayon > on génère le crayon correspond
 	if ($type_retour == 'edit') {
-		return 'crayon '.'formulaires_reponses_champ-valeur-'. $reponses_valeurs[$id_formulaires_reponse][$nom]['id'];
+		if (isset($reponses_valeurs[$id_formulaires_reponse][$nom]['id'])) {
+			$valeur = $reponses_valeurs[$id_formulaires_reponse][$nom]['id'];
+		} else {
+			$valeur = sql_insertq('spip_formulaires_reponses_champs', array('id_formulaires_reponse' => $id_formulaires_reponse, 'nom' => $nom));
+		}
+		return 'crayon '.'formulaires_reponses_champ-valeur-'. $valeur;
 	}
 	// Si on trouve bien la saisie demandée
 	if ($saisie = saisies_chercher($formulaires_saisies[$id_formulaire], $nom)) {
diff --git a/formidable_pipelines.php b/formidable_pipelines.php
index b7e98c96851930281e35869f532b955c0a215e28..b2dd20ef2bcdcab9e9b1f0435655c40ee8c16e59 100644
--- a/formidable_pipelines.php
+++ b/formidable_pipelines.php
@@ -297,3 +297,31 @@ function formidable_corbeille_table_infos($flux) {
 	);
 	return $flux;
 }
+
+
+/**
+ * Définir une fonction de contrôleur pour Crayons si on tente d'éditer un champ d'une réponse de formulaire.
+ *
+ * Si on édite un champ d'une réponse de formulaires avec Crayons, sans avoir créé manuellement de contrôleur spécifique
+ * pour le champ en question, Crayons propose soit un textarea, soit un input.
+ *
+ * Vu que l'on connaît les déclarations de nos champ , on va les utiliser pour créer
+ * un formulaire d'édition plus adapté à notre champ.
+ *
+ * @pipeline crayons_controleur
+ * @param array $flux
+ * @return array
+ */
+function formidable_crayons_controleur($flux) {
+	// si Crayons a déjà trouvé de contrôleur PHP, on ne fait rien
+	if ($flux['data'] != 'controleur_dist') {
+		return $flux;
+	}
+	$type = $flux['args']['type'];
+
+	if ($type === 'formulaires_reponses_champ') {
+			$flux['data'] = charger_fonction('formulaires_reponses_champ', 'controleurs');
+	}
+
+	return $flux;
+}
diff --git a/formulaires/editer_formulaires_reponse.html b/formulaires/editer_formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..fcce58f2198079aea600130e26d6e96930e0cffb
--- /dev/null
+++ b/formulaires/editer_formulaires_reponse.html
@@ -0,0 +1,12 @@
+    <div class='formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_formulaires_reponse}'>
+    	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
+    	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+    	[(#ENV{editable})
+    	<form method="post" action="#ENV{action}">
+    		#ACTION_FORMULAIRE
+    		<input type="hidden" name="formulaires_reponses" value="#ENV{id_formulaires_reponse}" />
+    		<!--extra-->
+    		<p class="boutons"><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
+    	</form>
+    	]
+    </div>
diff --git a/formulaires/editer_formulaires_reponse.php b/formulaires/editer_formulaires_reponse.php
new file mode 100644
index 0000000000000000000000000000000000000000..8543cd3e0a483b6838c4b6414b5d6b4db5b22f72
--- /dev/null
+++ b/formulaires/editer_formulaires_reponse.php
@@ -0,0 +1,30 @@
+<?php
+
+// Sécurité
+if (!defined('_ECRIRE_INC_VERSION')) {
+	return;
+}
+
+
+function formulaires_editer_formulaires_reponse_charger($id_formulaires_reponse, $retour) {
+	include_spip('inc/editer');
+	// Est-ce qu'on a le droit ?
+	if (!autoriser('modifier', 'formulaires_reponse', $id_formulaires_reponse)) {
+		$contexte = array();
+		$contexte['editable'] = false;
+		$contexte['message_erreur'] = _T('formidable:erreur_autorisation');
+	} else {
+		$contexte = formulaires_editer_objet_charger('formulaires_reponse', $id_formulaires_reponse, 0, 0, $retour, '');
+	}
+	return $contexte;
+}
+
+function formulaires_editer_formulaires_reponse_verifier($id_formulaires_reponse, $retour) {
+	include_spip('inc/editer');
+	return formulaires_editer_objet_verifier('formulaires_reponse', $id_formulaires_reponse, 0, 0, $retour, '');
+}
+
+function formulaires_editer_formulaires_reponse_traiter($id_formulaires_reponse, $retour) {
+	include_spip('inc/editer');
+	return formulaires_editer_objet_traiter('formulaires_reponse', $id_formulaires_reponse, 0, 0, $retour, '');
+}
diff --git a/lang/formidable_fr.php b/lang/formidable_fr.php
index 8177870dc953cf22a6396a9b957863b1c116816b..2ee7c687f010d7085d225ffd54204d2d5da35b73 100644
--- a/lang/formidable_fr.php
+++ b/lang/formidable_fr.php
@@ -120,12 +120,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
 	'formulaires_supprimer' => 'Supprimer le formulaire',
 	'formulaires_supprimer_confirmation' => 'Attention, cela supprimera aussi tous les résultats. Êtes-vous sûr de vouloir supprimer ce formulaire ?',
 	'formulaires_tous' => 'Tous les formulaires',
+	'formulaires_reponse_cextras' => 'Champs extras associés à la réponse',
 
 	// H
 	'heures_minutes_secondes' => '@h@h @m@min @s@s',
 
 	// I
 	'icone_modifier_formulaires_reponse' => 'Modifier la réponse',
+	'icone_modifier_formulaires_reponse_cextras' => 'Modifier les champs extra associés à la réponse',
 	'icone_retour_formulaires_reponse' => 'Retour à la réponse',
 	'id_formulaires_reponse' => 'Identifiant de la réponse',
 	'identification_par_cookie' => 'Par cookie (identifiant aléatoire, ne stocke aucune information personnelle)',
diff --git a/paquet.xml b/paquet.xml
index b28175e9774f49031842746082d99da8e7ede20d..c5ac5b7730ed12ddad980b9d5463b88e10f3be98 100644
--- a/paquet.xml
+++ b/paquet.xml
@@ -36,6 +36,7 @@
 	<pipeline nom="post_edition" inclure="formidable_pipelines.php" />
 	<pipeline nom="optimiser_base_disparus" inclure="formidable_pipelines.php" />
 	<pipeline nom="taches_generales_cron" inclure="formidable_pipelines.php" />
+	<pipeline nom="crayons_controleur" inclure="formidable_pipelines.php" />
 
 	<pipeline nom="corbeille_table_infos" inclure="formidable_pipelines.php" />
 	<necessite nom="spip_bonux" compatibilite="[3.3.8;[" />
diff --git a/prive/squelettes/contenu/formulaires_reponse.html b/prive/squelettes/contenu/formulaires_reponse.html
index 4c1a8c60370bd3d32a751cd1de25d36d9eacc1da..4be2b049f7db695d5251a17d9eb7fe5db34a87ab 100644
--- a/prive/squelettes/contenu/formulaires_reponse.html
+++ b/prive/squelettes/contenu/formulaires_reponse.html
@@ -3,7 +3,10 @@
 [(#BOITE_OUVRIR{
 	[(#AUTORISER{modifier,formulairesreponse,#ID_FORMULAIRES_REPONSE})
 			[(#URL_ECRIRE{formulaires_reponse_edit,id_formulaires_reponse=#ID_FORMULAIRES_REPONSE}|icone_verticale{<:formidable:icone_modifier_formulaires_reponse:>,formulaires_reponse,edit,right})]
-		]
+			[(#VAL{spip_formulaires_reponses}|appliquer_filtre{champs_extras_objet}|oui)
+					[(#URL_ECRIRE{formulaires_reponse_edit_cextras,id_formulaires_reponse=#ID_FORMULAIRES_REPONSE}|icone_verticale{<:formidable:icone_modifier_formulaires_reponse_cextras:>,formulaires_reponse,edit,right})]
+			]
+	]
 	<h1><:formulaires_reponse:formulaires_reponse_numero{nb=#ID_FORMULAIRES_REPONSE}:></h1>
 ,simple fiche_objet})]
 <!--affiche_milieu-->
diff --git a/prive/squelettes/contenu/formulaires_reponse_edit_cextras.html b/prive/squelettes/contenu/formulaires_reponse_edit_cextras.html
new file mode 100644
index 0000000000000000000000000000000000000000..545b068b7fee5d40de02ef28f65bc8f210e284bf
--- /dev/null
+++ b/prive/squelettes/contenu/formulaires_reponse_edit_cextras.html
@@ -0,0 +1,10 @@
+<BOUCLE_formulaires_reponses(FORMULAIRES_REPONSES){id_formulaires_reponse} {si #AUTORISER{modifier,formulairesreponse,#ID_FORMULAIRES_REPONSE}}>
+	#SET{redirect,#URL_ECRIRE{formulaires_reponse,id_formulaires_reponse=#ID_FORMULAIRES_REPONSE,true}}
+	<div class='cadre-formulaire-editer'>
+		<div class='entete-formulaire'>
+			[(#URL_ECRIRE{formulaires_reponse,id_formulaires_reponse=#ID_FORMULAIRES_REPONSE}|icone_verticale{<:formidable:icone_retour_formulaires_reponse:>,formulaires_reponse,edit,left})]
+			<h1><:formulaires_reponse:formulaires_reponse_numero{nb=#ID_FORMULAIRES_REPONSE}:> — <:formidable:formulaires_reponse_cextras:></h1>
+		</div>
+		#FORMULAIRE_EDITER_FORMULAIRES_REPONSE{#ID_FORMULAIRES_REPONSE,#URL_ECRIRE{formulaires_reponse}|parametre_url{id_formulaires_reponse,#ENV{id_formulaires_reponse}}}
+	</div>
+</BOUCLE_formulaires_reponses>
diff --git a/vues/formulaires_reponses_champ.php b/vues/formulaires_reponses_champ.php
new file mode 100644
index 0000000000000000000000000000000000000000..aea002d812bbe564a761d92c7a5f4ed324264c57
--- /dev/null
+++ b/vues/formulaires_reponses_champ.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * Retourner le code HTML de la vue d'un champ d'une réponse formidable pour Crayons
+ *
+ * @param string $type
+ *     Type d'objet
+ * @param string $modele
+ *     Nom du modèle donné par le contrôleur
+ * @param int $id
+ *     Identifiant de l'objet
+ * @param array $content
+ *     Couples champs / valeurs postés.
+ * @param $wid
+ *     Identifiant du formulaire
+ */
+function vues_formulaires_reponses_champ_dist($type, $modele, $id, $content, $wid) {
+	$data = sql_fetsel('spip_formulaires.id_formulaire, spip_formulaires_reponses.id_formulaires_reponse, nom', 'spip_formulaires_reponses_champs JOIN spip_formulaires_reponses JOIN spip_formulaires', "id_formulaires_reponses_champ=$id AND spip_formulaires_reponses.id_formulaires_reponse = spip_formulaires_reponses_champs.id_formulaires_reponse AND spip_formulaires.id_formulaire = spip_formulaires_reponses.id_formulaire");
+	return calculer_voir_reponse($data['id_formulaires_reponse'],  $data['id_formulaire'],  $data['nom']);
+}