🔗 Copier automatiquement des données d'une table vers une autre

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

:receipt: 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 Email 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

:gear: Configuration

Table : Commandes

  1. Tu crées une colonne Fournisseur texte (type Texte) → c’est là que tu tapes le nom librement

  2. Tu crées une colonne Fournisseur (type Référence vers Fournisseurs) → avec cette formule :

Fournisseurs.lookupOrAddDerived(Nom=$Fournisseur_texte) if $Fournisseur_texte else None

:white_check_mark: 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éé

:memo: 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 lookupOrAddDerived qui 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 :

  1. Ta table Commandes contient :

    • Fournisseur texte (type Texte) → visible dans le formulaire, l’utilisateur tape le nom
    • Fournisseur (type RĂ©fĂ©rence) → cachĂ© du formulaire, alimentĂ© par la formule
  2. Dans le formulaire, tu affiches uniquement Fournisseur texte

  3. 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. :tada:


:bar_chart: 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)
4 « J'aime »

Bonsoir,
Merci pour ces infos. Sauf erreur, avec ce fonctionnement, le champ fournisseur est complètement libre. Est-ce qu’il est possible de proposer la sélection des fournisseurs déjà définis dans l’autre texte ? Sinon on risque de se retrouver avec plusieurs fiches pour le même fournisseur avec juste des typos qui différent.