diff --git a/action/porte_plume_previsu.php b/action/porte_plume_previsu.php
index 6027938237207b344fa087cca2828c87167bd46d..9c3b8c450cef6bb36e1c4a0a690d40536f56f6d0 100644
--- a/action/porte_plume_previsu.php
+++ b/action/porte_plume_previsu.php
@@ -35,5 +35,9 @@ function action_porte_plume_previsu_dist() {
 		$contexte = [];
 	}
 
+	// pas d'indirection PHP dans les modeles formulaire
+	$GLOBALS['_FORCER_EXECUTER_DIRECTEMENT_BALISE_DYNAMIQUE'] = true;
 	echo recuperer_fond('prive/porte_plume_preview', $contexte);
+	// retablir le fonctionnement par défaut pour les éventuels crons qui vont tourner après
+	unset($GLOBALS['_FORCER_EXECUTER_DIRECTEMENT_BALISE_DYNAMIQUE']);
 }
diff --git a/porte_plume_fonctions.php b/porte_plume_fonctions.php
index d8b700ae3f3027ce5a2425a8739bca0dfa00accd..e2c638ce6c6d2604efa612d8c42038f6f87b676a 100644
--- a/porte_plume_fonctions.php
+++ b/porte_plume_fonctions.php
@@ -863,7 +863,8 @@ function traitements_previsu($texte, $nom_champ = '', $type_objet = '', $connect
 	}
 
 	// si il y a du PHP issu de modeles, il faut l'eval ici, car on aura pas de eval final contrairement aux pages SPIP
-	if (defined('_PROTEGE_PHP_MODELES')) {
+	if (defined('_PROTEGE_PHP_MODELES')
+	  && autoriser('previsualiser','modelesphp')) {
 		$texte = echappe_retour($texte, 'php' . _PROTEGE_PHP_MODELES, 'traitements_previsu_php_modeles_eval');
 	}