# Logique conditionnelle

Afficher, masquer, rendre obligatoire et brancher en fonction des réponses.

## Logique conditionnelle

Les blocs de logique réagissent à ce qu’un répondant saisit — afficher ou masquer n’importe quel bloc, sauter des pages, bloquer la soumission ou calculer des valeurs. Combinez des règles simples pour créer des branchements sophistiqués, sans code.

<h2 id="what-logic-can-do">Ce que la logique peut faire</h2>

<p>
  Chaque bloc de logique contient une ou plusieurs <strong>règles</strong>. Chaque règle associe un <em>groupe de conditions</em> (quand
  doit-elle se déclencher ?) à une ou plusieurs <em>actions</em> (que doit-il se passer ?). Neuf types d’actions sont disponibles :
</p>

<h2 id="adding-a-logic-block">Ajouter un bloc de logique</h2>

<p>
  Un bloc de logique est un élément du document — il se place sur le canevas entre les questions, comme un titre ou une image. Vous pouvez
  le positionner n’importe où : entre deux champs sur la même page, en haut d’une page, ou juste avant un saut de page.
</p>

<h2 id="conditions">Conditions</h2>

<p>
  Les conditions sont le côté <strong>Quand</strong> d’une règle. Chaque condition choisit un <strong>champ</strong>, applique un{' '}
  <strong>opérateur</strong>, et compare souvent avec une <strong>valeur</strong>. Le sélecteur de champ regroupe ce que vous pouvez
  surveiller : <strong>Questions</strong>, <strong>Champs masqués</strong>, <strong>Champs calculés</strong>, et{' '}
  <strong>Métadonnées</strong> (aujourd’hui, la langue du répondant).
</p>

<h3 id="all-or-any">All ou Any</h3>

<p>Dès qu’une règle comporte deux conditions ou plus, un bouton bascule apparaît en haut de la section Quand :</p>

<ul>
  <li>
    <strong>All</strong> — toutes les conditions doivent être vraies pour que la règle se déclenche. Les lignes se lisent avec « et ».
  </li>
  <li>
    <strong>Any</strong> — une seule condition vraie suffit. Les lignes se lisent avec « ou ».
  </li>
</ul>

<h3 id="sets-of-conditions">Ensembles de conditions</h3>

<p>
  <strong>Ajouter un ensemble de conditions</strong> imbrique un second groupe dans le premier, sur un seul niveau, avec son propre bouton
  bascule All/Any. Cela couvre une logique composée comme « plan <strong>est</strong> Pro <em>et</em> (pays <strong>est</strong> Norvège{' '}
  <em>ou</em> pays <strong>est</strong> Suède) ». Un ensemble ne contient que des conditions — il ne peut pas contenir un autre ensemble.
</p>

> ⚠️ **Une question masquée n’a aucune valeur**
> <p>
>     Si la logique masque une question, la réponse qu’elle contient éventuellement ne compte plus pour rien — ni dans les conditions, ni dans
>     les calculs, ni dans le montant du paiement, ni dans la soumission enregistrée. La réponse ne revient que si la question redevient
>     visible. Il en va de même pour toute question placée dans une ligne, une colonne ou un groupe répétable masqués, et pour une option
>     choisie que la logique masque. Une page que les règles Set next page font sauter compte aussi comme masquée : ses questions ne sont pas
>     obligatoires, et ce qui y a été répondu est écarté. Les <em>champs</em> masqués sont l’inverse : ils conservent toujours leur valeur.
>   </p>

> 💡 **Gardez-le lisible**
> <p>
>     Si un seul bloc de logique vous semble trop complexe, envisagez de répartir la logique sur plusieurs blocs ou de restructurer les pages
>     de votre formulaire.
>   </p>

<h2 id="operators-reference">Référence des opérateurs</h2>

<p>
  La liste des opérateurs dépend du champ que vous avez choisi — vous ne voyez jamais que ceux que ce champ prend en charge. Ci-dessous,
  chaque titre nomme l’ensemble exact.
</p>

<h3 id="text-text-input-text-area-and-text-calculated-fields">Texte (Text Input, Text Area, et champs calculés de type texte)</h3>

<p>
  Toute comparaison de texte ignore la casse et les espaces au début et à la fin : <code>x@Competitor.com</code> se termine donc par{' '}
  <code>@competitor.com</code>.
</p>

<p>
  Les autres champs de type texte proposent un ensemble plus restreint ; choisissez le type qui correspond à la comparaison dont vous avez
  besoin :
</p>

<h3 id="numeric-number-star-rating-linear-scale-numeric-hidden-and-calculated-fields">
  Numérique (Number, Star Rating, linear scale, champs masqués et calculés numériques)
</h3>

<h3 id="checkboxes-and-picture-choice">Checkboxes et picture choice</h3>

<h3 id="dropdown-and-radio-buttons-single-select">Dropdown et Radio Buttons (sélection unique)</h3>

<h3 id="toggle-switch-and-boolean-calculated-fields">Toggle Switch (et champs calculés booléens)</h3>

<h3 id="signature">Signature</h3>

<h3 id="file-upload">File Upload</h3>

<h3 id="date-picker-and-time-picker">Date Picker et Time Picker</h3>

<h3 id="ranking">Ranking</h3>

<h3 id="matrix--grid">Matrix / Grid</h3>

<h3 id="payment">Payment</h3>

<h3 id="fields-you-cannot-watch">Champs que vous ne pouvez pas surveiller</h3>

<p>
  <strong>Planifier un rendez-vous</strong> et <strong>Documents</strong> peuvent être des cibles de visibilité, mais jamais des sources de
  condition. Une réservation est rattachée à la soumission plutôt que stockée comme une réponse ordinaire, et un bloc Documents ne collecte
  aucune réponse du tout. Utilisez des réponses de qualification antérieures pour afficher ou masquer l’un ou l’autre. Toute question
  Planifier un rendez-vous visible doit être réservée avant la soumission ; une question masquée ne bloque pas la soumission. Voir{' '}
  <a href="/fr/integrations/cal-com#logic">Planification Cal.com avec la logique</a>.
</p>

<h2 id="targeting">Ciblage</h2>

<p>
  Chaque action nécessite une <strong>cible</strong> — l’élément sur lequel elle agit. La cible dépend du type d’action :
</p>

<p>
  Show et Hide vont au-delà des questions. Ciblez n’importe quel bloc du canevas — un paragraphe, un titre, une image ou un conteneur de
  mise en page — pour révéler une note masquée par défaut, ou masquer du contenu lorsqu’il n’est plus pertinent. Ils peuvent aussi cibler
  des options individuelles dans un champ à choix multiple, pas seulement la question entière. Masquez d’abord un bloc depuis le menu du
  bloc, puis écrivez une règle pour le révéler.
</p>
<h2 id="how-rules-combine">Combinaison de plusieurs règles</h2>

<p>
  Chaque règle est indépendante, et elles s’évaluent toutes ensemble. Les règles sont lues de haut en bas, à travers les blocs de logique,
  dans l’ordre du document. La façon dont plusieurs règles portant sur une même cible se combinent dépend de l’action.
</p>

<p>
  Vous pouvez ainsi pointer plusieurs règles vers un même bloc sans qu’elles entrent en conflit. Un formulaire de retour a une question
  Radio Buttons — « Quel sujet pouvons-nous vous aider à traiter ? » — avec quatre options, et un champ e-mail « Pouvons-nous vous contacter
  ? » masqué par défaut. Quatre règles affichent chacune ce même champ e-mail (ainsi que leur propre question de suivi) pour leur option. Le
  champ e-mail apparaît quelle que soit l’option choisie, et reste masqué uniquement si aucune ne l’est.
</p>

> 💡 **Une seule règle suffit souvent**
> <p>
>     Pour révéler un bloc pour plusieurs réponses, une règle avec <strong>Any</strong> et une condition par réponse — ou une seule condition{' '}
>     <strong>is not empty</strong> pour toutes les couvrir — est plus facile à lire que quatre règles. Utilisez plusieurs règles lorsque
>     chaque option a aussi besoin de sa propre question de suivi distincte.
>   </p>

<h3 id="conflicting-rules">Règles en conflit</h3>

<p>
  Lorsque deux règles sont en désaccord sur la même cible — l’une affiche un bloc (<strong>Show</strong>) tandis qu’une autre le masque (
  <strong>Hide</strong>), ou l’une rend un champ obligatoire tandis qu’une autre le rend facultatif — et que les deux conditions
  correspondent en même temps, <strong>la première règle l’emporte</strong>. La règle perdante, plus tardive, est signalée dans l’éditeur :
  « Cette action ne s’applique jamais — une règle précédente contrôle déjà sa cible. L’ordre des règles décide : la première règle
  l’emporte. »
</p>

<p>
  Une exception à l’ordre : une règle dont la condition lit un champ calculé s’exécute après la règle qui l’écrit, quel que soit l’ordre du
  document, afin qu’un score soit toujours calculé avant que quoi que ce soit ne s’y ramifie. Les règles qui écrivent dans les champs
  calculés les unes des autres en boucle déclenchent un avertissement de publication qui nomme la chaîne — rompez la boucle pour que les
  valeurs se résolvent de manière prévisible.
</p>

<h3 id="hidden-and-required">Masqué l’emporte sur obligatoire</h3>

<p>
  Une question qui finit masquée n’est jamais obligatoire, qu’elle ait été masquée par une règle ou masquée depuis le menu du bloc sans
  règle pour la révéler. L’astérisque disparaît et la soumission n’est pas bloquée — sinon un répondant pourrait se retrouver bloqué par un
  champ qu’il ne peut pas voir.
</p>

<h2 id="common-patterns">Cas d’usage courants</h2>

<h3 id="show-a-follow-up-question-based-on-a-previous-answer">Afficher une question de suivi en fonction d’une réponse précédente</h3>

<p>
  Une enquête de satisfaction demande "Comment évaluez-vous votre expérience ?" avec une note de 1 à 5 étoiles (Star Rating). Un bloc de
  logique en dessous utilise la condition "la note est inférieure ou égale à 3" avec l’action <strong>Show</strong> ciblant un champ Text
  Area qui demande "Que pourrions-nous améliorer ?" Les répondants qui donnent 4 ou 5 ne voient jamais la question de suivi.
</p>

<h3 id="reveal-a-message-when-an-option-is-picked">Révéler un message lorsqu’une option est choisie</h3>

<p>
  Un formulaire d’inscription comporte une question Radio Buttons : « Quelle offre vous convient le mieux ? » En dessous se trouve un
  paragraphe — « Bon choix ! Notre offre Pro inclut une assistance prioritaire. » — masqué par défaut avec l’option <strong>Hide</strong> du
  menu du bloc. Un bloc de logique le révèle : si l’offre <strong>est</strong> « Pro », <strong>Show</strong> le paragraphe. Le message
  d’encouragement n’apparaît que pour ceux qui choisissent Pro, et reste masqué pour tous les autres.
</p>

<h3 id="branch-to-different-pages-based-on-a-selection">Brancher vers différentes pages en fonction d’une sélection</h3>

<p>
  Un formulaire d’inscription à un événement comporte une question Radio Buttons : "Participez-vous en présentiel ou à distance ?" Deux
  blocs de logique suivent :
</p>

<ul>
  <li>
    <strong>Règle 1</strong> — condition : présence <strong>est</strong> "En présentiel", action : <strong>Set next page</strong> "Détails
    du lieu".
  </li>
  <li>
    <strong>Règle 2</strong> — condition : présence <strong>est</strong> "À distance", action : <strong>Set next page</strong>{' '}
    "Configuration du streaming".
  </li>
  <li>
    <strong>Règle 3</strong> — condition : heure d’arrivée <strong>n’est pas vide</strong>, action : <strong>Set next page</strong>{' '}
    "Confirmation". Heure d’arrivée est une question obligatoire sur "Détails du lieu".
  </li>
</ul>

<p>
  Les règles 1 et 2 lisent la question présence, donc elles agissent quand le répondant quitte sa page. Ensuite, Suivant continue dans
  l’ordre des pages. La règle 3 lit une question sur "Détails du lieu", donc elle agit quand le répondant quitte cette page. Les
  participants en présentiel sautent alors "Configuration du streaming". Chaque parcours collecte uniquement les informations pertinentes,
  puis les deux convergent sur une page "Confirmation" commune.
</p>

<h3 id="calculate-a-score-and-branch-on-it">Calculer un score et brancher en fonction de celui-ci</h3>

<p>
  Un formulaire de qualification des prospects comporte trois questions Star Rating : budget, délais et autorité. Un champ calculé nommé
  "Score prospect" utilise un bloc de logique avec l’action <strong>Calculate value</strong> pour additionner la valeur de chaque note. Un
  second bloc de logique lit le champ calculé : si le Score prospect <strong>est supérieur à 12</strong>, <strong>Set next page</strong>{' '}
  "Suivi prioritaire" ; sinon, sauter à la page de confirmation standard.
</p>

<h3 id="react-to-a-hidden-field-value">Réagir à la valeur d’un champ masqué</h3>

<p>
  L’URL renseigne un champ masqué nommé <strong>plan</strong> (ex. : <code>?plan=enterprise</code>). Un bloc de logique vérifie : si plan{' '}
  <strong>est</strong> "enterprise", <strong>Show</strong> la question "Responsable de compte dédié" et <strong>Make required</strong>
  le champ "Taille de l’entreprise". Les répondants du niveau gratuit ne voient jamais ces questions.
</p>

<h3 id="gate-submission-on-a-calculated-total">Bloquer la soumission en fonction d’un total calculé</h3>

<p>
  Un formulaire de commande calcule un total en cours. Un bloc de logique utilise la condition : si le Total de commande{' '}
  <strong>est inférieur à 10</strong>, <strong>Prevent submit form</strong>. Le répondant ne peut pas soumettre tant que le seuil de
  commande minimum n’est pas atteint.
</p>

<p>
  Tant qu’une règle de blocage est active, le bouton apparaît indisponible et le répondant est informé pourquoi. Saisissez la raison dans{' '}
  <strong>Message affiché au répondant</strong> sur la ligne d’action — « Votre commande doit totaliser au moins 10 » — afin qu’il sache
  quelle réponse modifier. Laissez-le vide et le formulaire revient à « Ce formulaire ne peut pas être envoyé avec les réponses actuelles. »
  (ou « Vous ne pouvez pas continuer à la page suivante avec les réponses actuelles. » pour un bloc de navigation). Lorsque plusieurs règles
  de blocage se déclenchent en même temps, la première qui porte un message fournit le texte.
</p>

> 💡 **Testez la logique avec Preview**
> <p>
>     Après avoir configuré vos règles, passez en mode <strong>Preview</strong> dans la barre d’outils supérieure et remplissez le formulaire
>     comme le ferait un répondant. La logique se déclenche en temps réel en Preview, ce qui vous permet de vérifier chaque branchement, champ
>     masqué et validation avant de publier.
>   </p>

<h2 id="next-steps">Prochaines étapes</h2>
<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Champs masqués](/fr/building-forms/hidden-fields) — Capturer les paramètres d’URL et les utiliser dans la logique
  - [Champs calculés](/fr/building-forms/calculated-fields) — Calculer des scores et des totaux avec des opérations logiques
  - [Insertion de réponses](/fr/building-forms/answer-piping) — Référencer n’importe quelle réponse ailleurs dans le formulaire
</div>
