Le besoin
« Je voudrais copier automatiquement des données d’une table dans une autre. Comment pourrais-je procéder ? »
Cette question revient souvent ! Un cas fréquent : tu saisis des données dans une table (ex : des commandes) et tu veux que ça alimente automatiquement une autre table (ex : un référentiel de fournisseurs).
Plutôt que de « copier », Grist propose la fonction lookupOrAddDerived : créer automatiquement une fiche liée si elle n’existe pas encore.
Comment ça marche ?
TableCible.lookupOrAddDerived(Champ=$Champ_texte) if $Champ_texte else None
- TableCible : la table où tu veux chercher/créer l’enregistrement
- Champ : le champ sur lequel faire la correspondance
- $Champ_texte : la valeur saisie librement par l’utilisateur
- if $Champ_texte else None : évite de créer une ligne vide si le champ n’est pas encore rempli
Exemple : suivi des commandes et fournisseurs
Contexte : Tu passes des commandes pour ton service. Tu veux garder une trace des fournisseurs sans te prendre la tête à créer chaque fiche avant de saisir une commande.
Table Commandes
| Date | Objet | Fournisseur texte | Fournisseur | Montant TTC | Statut |
|---|---|---|---|---|---|
| 2025-04-10 | Ramettes papier A4 | Fourni’Tout | Fourni’Tout | 89 € | Livrée |
| 2025-04-11 | Réparation imprimante | Techni’Bureau | Techni’Bureau | 150 € | En attente |
Table Fournisseurs
| Nom | SIRET | Contact | Marché cadre | |
|---|---|---|---|---|
| Fourni’Tout | 123 456 789 00012 | M. Martin | contact@fournitout.fr | Oui |
| Techni’Bureau | 987 654 321 00034 | Mme Lefebvre | service@technibureau.fr | Non |
Configuration
Table : Commandes
-
Tu crées une colonne
Fournisseur texte(type Texte) → c’est là que tu tapes le nom librement -
Tu crées une colonne
Fournisseur(type Référence versFournisseurs) → avec cette formule :
Fournisseurs.lookupOrAddDerived(Nom=$Fournisseur_texte) if $Fournisseur_texte else None
Ce que ça permet
- Saisie rapide : tu tapes « Fourni’Tout » → la fiche existe déjà → liaison automatique
- Nouveau fournisseur : tu tapes « Imprim’Express » → Grist crée la fiche → tu complètes SIRET, contact, etc. plus tard
- Pas de ligne fantôme : si le champ texte est vide, rien n’est créé
Et pour les formulaires ?
Autre question fréquente : « Je voudrais qu’un seul formulaire alimente plusieurs tables. »
Les formulaires Grist sont liés à une seule table, c’est une limitation. Mais avec lookupOrAddDerived, tu contournes le problème.
Le principe
Sur la table de ton formulaire, tu crées :
- Des colonnes texte libre pour chaque donnée que tu veux envoyer vers une autre table (ex :
Fournisseur texte,Catégorie texte…) - Des colonnes référence avec la formule
lookupOrAddDerivedqui vont créer automatiquement les fiches dans les tables liées
Exemple concret
Tu veux un formulaire de saisie de commandes qui alimente aussi la table Fournisseurs :
-
Ta table
Commandescontient :Fournisseur texte(type Texte) → visible dans le formulaire, l’utilisateur tape le nomFournisseur(type Référence) → caché du formulaire, alimenté par la formule
-
Dans le formulaire, tu affiches uniquement
Fournisseur texte -
Quand l’utilisateur soumet le formulaire, la formule s’exécute et crée la fiche fournisseur si besoin
Résultat : un seul formulaire, plusieurs tables alimentées. ![]()
Bonus : colonnes calculées dans Fournisseurs
Tu peux ajouter des colonnes pour voir les stats par fournisseur :
| Nom | Nb commandes | Total commandé |
|---|---|---|
| Fourni’Tout | 1 | 89 € |
| Techni’Bureau | 1 | 150 € |
Formules :
len(Commandes.lookupRecords(Fournisseur=$id))
SUM(Commandes.lookupRecords(Fournisseur=$id).Montant_TTC)