diff --git a/CHANGELOG.md b/CHANGELOG.md
index c49d74418a1d224901505f786da8c7330b885b67..970c14e26229e49ccbd8f055c28177cd53dc10ac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,14 @@
 # Changelog
 
 ## Unreleased
+### Added
+
+- Options globales `ajax` (defaut `false`) ; `conteneur_class` (defaut `''`) ; `conteneur_id` (defaut `''`) ; `squelettes_bouton` (défaut `formulaires/inc-saisies-cvt-boutons`).
+- Indiquer si un formulaire ne contient aucun champ (fonctionnalité rapatriée depuis formidable)
+
+### Changed
+
+- Les messages de retour globaux des formulaires "full PHP" sont désormais entourés d'une balise `<div>` et non plus `<p>`
 
 ### Fixed
 
@@ -31,7 +39,6 @@
 ### Removed
 
 - Compatibilité SPIP < 4.1
-## 5.8.0 - 2024-10-04
 ### Added
 
 - #439 function `saisies_supprimer_depublie_sans_reponse()`
diff --git a/formulaires/inc-saisies-cvt.html b/formulaires/inc-saisies-cvt.html
index 0f7cb94d1fd5452df5e6400009c1a3f2c5aee20d..84a078a05802770acdf8b8f5297c650c1d19a223 100644
--- a/formulaires/inc-saisies-cvt.html
+++ b/formulaires/inc-saisies-cvt.html
@@ -1,36 +1,55 @@
-<div class="formulaire_spip formulaire_#ENV{form}[ (#ENV{_etape}|oui)formulaire_multietapes]"[(#ENV{_saisies}|saisies_dont_avec_option{afficher_si}|oui) data-avec-afficher_si="true"]>
+[(#ENV**{_saisies/options/ajax}|oui)
+	<div class="ajax">
+]
+<div class="
+	formulaire_spip
+	formulaire_#ENV{form}
+	[(#ENV{_etape}|oui)formulaire_multietapes]
+	[(#ENV**{_saisies/options/conteneur_class})]"
+	[(#ENV{_saisies}|saisies_dont_avec_option{afficher_si}|oui) data-avec-afficher_si="true"]
+	[id="(#ENV{_saisies/options/conteneur_id})"]
+	>
 	#ENV**{_saisies/options/inserer_debut}
-	[<p class="reponse_formulaire reponse_formulaire_ok"[(#HTML5|oui) role="status"]>(#ENV**{message_ok})</p>]
-	[<p class="reponse_formulaire reponse_formulaire_erreur"[(#HTML5|oui) role="alert"]>(#ENV**{message_erreur})</p>]
+	[<div class="reponse_formulaire reponse_formulaire_ok"[(#HTML5|oui) role="status"]>(#ENV**{message_ok})</div>]
+	[<div class="reponse_formulaire reponse_formulaire_erreur"[(#HTML5|oui) role="alert"]>(#ENV**{message_erreur})</div>]
 	[(#ENV{editable}|oui)
-	<form method="post" action="#ENV{action}" enctype="multipart/form-data"[ data-resume_etapes_futures="(#ENV{_resume_etapes_futures}|json_encode|attribut_html)"]><div>
-			[(#REM) declarer les hidden qui declencheront le service du formulaire
-			parametre : url d'action ]
-			#ACTION_FORMULAIRE{#ENV{action}}
-			[(#ENV{_etape}|oui)
-			<INCLURE{fond=formulaires/inc-saisies-cvt-etapes-#ENV{_saisies/options/etapes_presentation,defaut}, etapes=#ENV{_saisies_par_etapes}, env} />
-			]
-
-			<div class="editer-groupe">
-				#SET{saisies, #ENV{_saisies}}
+	[(#ENV{_saisies}|et{#ENV{_saisies}|count}|oui)
+	<form method="post" action="[(#ENV{action}|ancre_url{#ENV{_saisies/options/id}})]" enctype="multipart/form-data"[ data-resume_etapes_futures="(#ENV{_resume_etapes_futures}|json_encode|attribut_html)"]><div>
+				[(#REM) declarer les hidden qui declencheront le service du formulaire
+				parametre : url d'action ]
+				#ACTION_FORMULAIRE{#ENV{action}}
 				[(#ENV{_etape}|oui)
-				[(#ENV{_saisies/options/etapes_ignorer_recapitulatif}|non|et{#ENV{_etape}|=={#ENV{_etapes}}}|oui)
-				<INCLURE{fond=formulaires/inc-saisies-cvt-etapes-recapitulatif,env} />
-				]
-				[(#ENV{_saisies/options/etapes_ignorer_recapitulatif}|non|et{#ENV{_etape}|=={#ENV{_etapes}}}|non)
-				#SET{saisies, #GET{etapes}|table_valeur{etape_#ENV{_etape}/saisies}}
-				#GENERER_SAISIES{#GET{saisies},saisies_par_etapes=#ENV{_saisies_par_etapes}}
-				]
-				]
-				[(#ENV{_etape}|non)
-				#GENERER_SAISIES{#GET{saisies}}
+				<INCLURE{fond=formulaires/inc-saisies-cvt-etapes-#ENV{_saisies/options/etapes_presentation,defaut}, etapes=#ENV{_saisies_par_etapes}, env} />
 				]
-			</div>
 
-			[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
-			<!--extra-->
-			<INCLURE{fond=formulaires/inc-saisies-cvt-boutons,env} />
-		</div></form>
+				<div class="editer-groupe">
+					#SET{saisies, #ENV{_saisies}}
+					[(#ENV{_etape}|oui)
+					[(#ENV{_saisies/options/etapes_ignorer_recapitulatif}|non|et{#ENV{_etape}|=={#ENV{_etapes}}}|oui)
+					<INCLURE{fond=formulaires/inc-saisies-cvt-etapes-recapitulatif,env} />
+					]
+					[(#ENV{_saisies/options/etapes_ignorer_recapitulatif}|non|et{#ENV{_etape}|=={#ENV{_etapes}}}|non)
+					#SET{saisies, #GET{etapes}|table_valeur{etape_#ENV{_etape}/saisies}}
+					#GENERER_SAISIES{#GET{saisies},saisies_par_etapes=#ENV{_saisies_par_etapes}}
+					]
+					]
+					[(#ENV{_etape}|non)
+					#GENERER_SAISIES{#GET{saisies}}
+					]
+				</div>
+
+				[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+				<!--extra-->
+				<INCLURE{fond=#ENV**{_saisies/options/squelette_boutons,formulaires/inc-saisies-cvt-boutons},env} />
+			</div></form>
+		]
+
+			[(#ENV{_saisies}|et{#ENV{_saisies}|count}|non)
+				<p class="notice"><:saisies:formulaires_aucun_champ:></p>
+			]
 		]
 		#ENV**{_saisies/options/inserer_fin}
 </div>
+[(#ENV**{_saisies/options/ajax}|oui)
+	</div>
+]
diff --git a/lang/saisies_ar.php b/lang/saisies_ar.php
index d5d0d06c117d38b28cfe5ffad65a89ce73ebfc84..2bf8ec7de655820b295d6a922a33e826bd662561 100644
--- a/lang/saisies_ar.php
+++ b/lang/saisies_ar.php
@@ -17,6 +17,7 @@ return [
 	'construire_position_label' => 'موقع الحقل',
 	'construire_reinitialiser' => 'إعادة تأصيل الاستمارة',
 
+	'formulaires_aucun_champ' => 'حالياً لا يوجد اي حقل إدخال في هذه الاستمارة.',
 	// L
 	'label_annee' => 'السنة',
 	'label_jour' => 'اليوم',
diff --git a/lang/saisies_de.php b/lang/saisies_de.php
index 4b8720f1d790a8f8bb01fac4b2c52c3a4f21666d..2caa02c99a59e07f3ba505acacd50f578e416214 100644
--- a/lang/saisies_de.php
+++ b/lang/saisies_de.php
@@ -55,6 +55,8 @@ return [
 	'erreur_generique' => 'Fehler im folgenden Feld. Bitte überprüfen Sie Ihre Eingabe.',
 	'erreur_option_nom_unique' => 'Dieser Name wird bereits für ein anderes Feld verwendet; er kann in diesem Formular nur einmal verwendet werden.',
 
+	// F
+	'formulaires_aucun_champ' => 'Für dieses Formular gibt es derzeit noch keine Eingabefelder.',
 	// I
 	'info_configurer_saisies' => 'Testseite der Eingabefelder.',
 
diff --git a/lang/saisies_en.php b/lang/saisies_en.php
index f88999ce2b7a49ba78c6f9e136875d55801cc4cb..37832c7cc9150865b9fa7c684668502f685c0837 100644
--- a/lang/saisies_en.php
+++ b/lang/saisies_en.php
@@ -66,7 +66,7 @@ Load javascript and CSS on all pages, in the &lt;head&gt; tag',
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'You can send another file.',
 	'format_date_attendu' => 'Enter a date in dd/mm/yyyy format.',
 	'format_email_attendu' => 'Enter an email address in the format you@provider.tld',
-
+	'formulaires_aucun_champ' => 'There is currently no entry field for this form.',
 	// I
 	'info_configurer_saisies' => 'Test page for Entries',
 
diff --git a/lang/saisies_es.php b/lang/saisies_es.php
index 3ce50156f24f19995f005f015618828b79b4fc3e..ce848c4dd857269e90b489395e90b6881eb765f4 100644
--- a/lang/saisies_es.php
+++ b/lang/saisies_es.php
@@ -69,6 +69,7 @@ return [
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'Necesitas enviar otro archivo.',
 	'format_date_attendu' => 'Ingrese una fecha en el formato dd/mm/aaaa.',
 	'format_email_attendu' => 'Ingrese una dirección de correo electrónico en el formato vous@fournisseur.fr',
+	'formulaires_aucun_champ' => 'Todavía este formulario no contiene ningún campo.',
 
 	// I
 	'info_configurer_saisies' => 'Página de prueba de las entradas',
diff --git a/lang/saisies_fr.php b/lang/saisies_fr.php
index 51c98ee462787e4ae0d4fd665365f0d381a44782..0b71863fb9a45ebbb6a4e3dfce08402675316e2c 100644
--- a/lang/saisies_fr.php
+++ b/lang/saisies_fr.php
@@ -70,7 +70,8 @@ return [
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'Vous devez envoyer un autre fichier.',
 	'format_date_attendu' => 'Saisir une date au format jj/mm/aaaa.',
 	'format_email_attendu' => 'Saisir une adresse email au format vous@fournisseur.fr',
-
+	'formulaires_aucun_champ' => 'Il n’y a pour l’instant aucun champ de saisie pour ce formulaire.',
+	'formulaires_aucun_champ' => 'У формы нет полей для ввода информации.',
 	// I
 	'info_configurer_saisies' => 'Page de test des Saisies',
 
diff --git a/lang/saisies_it.php b/lang/saisies_it.php
index ca4668f931676e75315430f299f7a3e06f8eaf96..54d1183ae9b4650dfe1c0fdaffbb6d1247eccc0b 100644
--- a/lang/saisies_it.php
+++ b/lang/saisies_it.php
@@ -66,7 +66,7 @@ return [
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'Devi inviare un altro file.',
 	'format_date_attendu' => 'Immettere una data nel formato gg/mm/aaaa.',
 	'format_email_attendu' => 'Inserisci un indirizzo email nel formato nome@indirizzo.it',
-
+	'formulaires_aucun_champ' => 'Non ci sono attualmente campi richiesti per questo modulo.',
 	// I
 	'info_configurer_saisies' => 'Pagina di test di Saisies',
 
diff --git a/lang/saisies_nl.php b/lang/saisies_nl.php
index 7c751b3be0bf3590d767bae24ed6664b2cc4ccd0..54b60056cb1bb115648f0f2e48d28c684b8deb6a 100644
--- a/lang/saisies_nl.php
+++ b/lang/saisies_nl.php
@@ -51,6 +51,7 @@ return [
 	// F
 	'fichier_erreur_explication_renvoi_alternative' => 'Je kunt een nieuw bestand versturen, of het formulier als zodanig. Het oude bestand wordt niet bewaard.',
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'Je moet een ander bestand sturen.',
+	'formulaires_aucun_champ' => 'Er is momenteel geen iinvoerveld in dit formulier.',
 
 	// I
 	'info_configurer_saisies' => 'Testbladzijde voor invoer',
diff --git a/lang/saisies_pt_br.php b/lang/saisies_pt_br.php
index ab16910a5073bef10b679ee388e1210ea048a888..ab9e44b31faa7e4042be6be547d5f5c48662bc11 100644
--- a/lang/saisies_pt_br.php
+++ b/lang/saisies_pt_br.php
@@ -69,7 +69,7 @@ return [
 	'fichier_erreur_explication_renvoi_pas_alternative' => 'Você deve enviar um outro arquivo.',
 	'format_date_attendu' => 'Informar uma data no formato dd/mm/aaaa.',
 	'format_email_attendu' => 'Informar um endereço de e-mail no formato nome@dominio.com.br',
-
+	'formulaires_aucun_champ' => 'Ainda não há nenhum campo de entrada para esse formulário.',
 	// I
 	'info_configurer_saisies' => 'Página de teste das entradas de dados',