Je vous propose un widget qui permet de créer des formulaires personnalisables à volonté.
Grist ne propose pas de créer des sélecteurs en cascade.
J’ai donc rajouté cela dans Form Builder Pro.
Vous pouvez tester librement ici : Form Builder Pro - Grist
Le dépôt Github : GitHub - isaytoo/grist-form-builder-widget · GitHub
Guide d’utilisation
Apprenez à créer et partager des formulaires professionnels avec Form Builder Pro.
Présentation
Form Builder Pro permet de créer des formulaires professionnels sur page A4 avec drag & drop, puis de les partager avec vos utilisateurs. Les données sont enregistrées directement dans vos tables Grist.
Créer un formulaire
- Sélectionnez la table source dans le menu déroulant
- Glissez les champs de la table ou les éléments sur la page A4
- Positionnez et redimensionnez les champs avec la souris
- Cliquez sur un champ pour configurer ses propriétés
- Cliquez sur
Sauvegarder pour enregistrer
Partager le formulaire
- Sauvegardez votre formulaire
- Cliquez sur
Partager - Copiez l’URL affichée dans la modale
- Dans Grist, ajoutez un nouveau widget personnalisé
- Collez l’URL et accordez l’accès complet
Astuce : Les utilisateurs ne verront que le mode saisie, sans accès à l’édition.
Plusieurs formulaires
Chaque formulaire est lié à une table. L’URL de partage contient le paramètre table=NomTable.
Exemple : ...?mode=form&table=Clients
Sélecteurs en cascade (options dynamiques)
Les champs Liste déroulante, Choix unique et Cases à cocher peuvent charger leurs options depuis une table Grist, et les filtrer en cascade selon la valeur d’un autre champ du formulaire (ex. choisir un département → ne voir que les villes de ce département).
Étape 1 — Préparer la table source dans Grist
Crée une table contenant tes options. Exemple Villes :
nom · code_dept
Lyon · 69
Bron · 69
Grenoble · 38
Paris 1er · 75
Étape 2 — Configurer le champ « parent »
- Glisse une Liste déroulante sur le canvas
- Clique dessus pour ouvrir les propriétés à droite
- Donne-lui un libellé clair : ex. « Département »
- Section Source des options → clique
Depuis Grist - Choisis la table source (ex.
Departements), la colonne libellé (nom) et la colonne valeur (code) - Pas de filtre nécessaire pour ce champ — il propose toutes les valeurs
Étape 3 — Configurer le champ « enfant » (cascade)
- Glisse une autre Liste déroulante
- Libellé : « Ville », source
Depuis Grist - Table source :
Villes, colonne libellé :nom - Section Filtres en cascade → clique + Ajouter un filtre
- Champ parent : Département · Opérateur : = · Colonne source :
code_dept
Quand l’utilisateur choisira un département, le select Ville rechargera automatiquement ses options en ne gardant que celles dont code_dept correspond.
Les 4 opérateurs disponibles
= (égal à) — la colonne source vaut exactement la valeur du parent.
Ex. ville.code_dept = 69 si Département = 69
≥ (supérieur ou égal) — la colonne source est ≥ valeur du parent.
Ex. produit.prix_min ≥ budget saisi
≤ (inférieur ou égal) — la colonne source est ≤ valeur du parent.
Ex. tarif.plafond ≤ revenu déclaré
entre deux colonnes — la valeur du parent est entre deux colonnes (min/max) de la table source.
Ex. produit.age_min ≤ âge_saisi ≤ produit.age_max
Plusieurs filtres combinés (ET)
Tu peux ajouter plusieurs filtres sur un même champ. Toutes les conditions doivent être vraies pour qu’une option soit affichée.
Exemple : select « Produits » filtré par Catégorie = catégorie ET Âge entre age_min et age_max → ne propose que les produits de la bonne catégorie ET adaptés à l’âge.
Comportement à la saisie
- Si le parent n’a pas encore de valeur, son filtre est ignoré (pas de blocage)
- Quand le parent change, l’enfant recharge ses options automatiquement
- Cascade transitive (A → B → C) gérée : changer A reconfigure B, qui reconfigure C
- Si la valeur sélectionnée d’un enfant n’est plus valide, elle est réinitialisée
Exemple complet — Recommander des produits selon l’âge
Démontre l’opérateur entre deux colonnes avec un cas pratique : l’utilisateur saisit son âge et le formulaire propose uniquement les produits adaptés à sa tranche.
Table Produits dans Grist
nom · categorie · age_min · age_max · prix
Hochet musical · Bébé · 0 · 2 · 15
Tricycle · Enfant · 3 · 7 · 80
Trottinette · Enfant · 6 · 12 · 90
Skateboard · Ado · 10 · 16 · 120
Tablette · Tous · 10 · 99 · 300
Vélo VTT adulte · Adulte · 16 · 75 · 600
Carte senior SNCF · Senior · 60 · 120 · 75
Champ 1 — Âge (saisie utilisateur)
- Glisse un élément Nombre sur le canvas
- Libellé : « Quel est votre âge ? »
- Pas de source Grist nécessaire (l’utilisateur tape)
Champ 2 — Produits recommandés (cascade)
- Glisse une Liste déroulante, libellé : « Produits recommandés »
- Source des options →
Depuis Grist - Table source :
Produits - Colonne libellé :
nom - Colonne valeur :
nom(ou laisse vide) - Section Filtres en cascade → + Ajouter un filtre
- Champ parent : Quel est votre âge ?
- Opérateur : entre deux colonnes
- Colonne minimum :
age_min - Colonne maximum :
age_max
Résultat à la saisie
• Saisir 5 → propose : Tricycle, Trottinette
• Saisir 12 → propose : Trottinette, Skateboard, Tablette
• Saisir 30 → propose : Tablette, Vélo VTT adulte
• Saisir 65 → propose : Tablette, Vélo VTT adulte, Carte senior SNCF
Pour aller plus loin : ajoute un second filtre sur ce même champ avec un autre champ parent Catégorie (sélecteur statique avec Bébé/Enfant/Ado/Adulte/Senior) et opérateur = sur la colonne categorie. Tu obtiens un filtrage croisé âge ET catégorie.
Permission requise : le widget doit avoir « Accès complet au document » pour lister les tables et lire les données. Configure-le dans le panneau du widget Grist (à droite de l’écran).
Données prêtes à l’emploi : les CSV d’exemple (Departements, Villes, Produits) sont disponibles dans le dossier /exemples/ du dépôt GitHub du widget.
Fonctionnalités
Multi-pages A4
Champs conditionnels
Sélecteurs en cascade
Champs calculés
Lookup / Autocomplétion
Signature
Validation avancée
Templates
Historique des versions
Export PDF
QR Code
Exemple de sélections en cascade :
Bon test !














