Aller au contenu principal
Version: 1.0.0

Atelier 2 : Devis et lignes

Niveau structurer · Durée ~50 min · Prérequis Atelier 1

Un devis n'est pas une fiche : c'est un en-tête et des lignes. C'est le motif le plus courant de toute application de gestion — devis, facture, commande, feuille de temps, inventaire. Vous allez le construire en entier, puis le remplir depuis un fichier Excel.

À la fin, vous saurez : créer un sous-objet, calculer une ligne, cumuler les lignes dans l'en-tête, écrire une formule conditionnelle, produire un PDF, et importer des données existantes.

Étape 1 : L'objet « Devis »

Studio → onglet ObjetsNouvel objet : nom Devis, icône 📄.

Puis onglet Champs, + Ajouter un champ pour chacun :

LibelléTypeRéglage
RéférenceTexte courtChamp obligatoire
ClientTexte court
DateDate
StatutListe de choixoptions Brouillon, Envoyé, Accepté, Refusé
Remise (%)Nombre décimal
✅ Point de contrôle

L'objet « Devis » figure dans le menu de gauche et sa liste s'ouvre, vide.

Étape 2 : Le sous-objet « Ligne »

Une ligne de devis n'existe pas toute seule : elle appartient à son devis, ne s'affiche pas dans le menu, et se saisit sous la fiche du devis. C'est exactement la définition d'un sous-objet.

  1. Nouvel objet : nom Ligne, et surtout Sous-objet deDevis.
  2. Ajouter ses champs :
LibelléType
DésignationTexte court
QuantitéNombre entier
Prix unitaireNombre décimal

Le champ relation vers le devis a été créé automatiquement : vous n'avez pas à le poser.

Vous vous êtes trompé ?

Si vous avez créé « Ligne » comme objet ordinaire, rien n'est perdu : ouvrez-le et cliquez sur Transformer en sous-objet. Champs et données sont conservés. Voir Créer un objet.

Étape 3 : Le montant d'une ligne

Sur l'objet Ligne, ajouter un champ Champ calculé (formule) :

  • Libellé : Montant
  • Formule : tapez { et choisissez Quantité, puis *, puis { et Prix unitaire →
{quantite} * {prix_unitaire}
  • Type du résultat : Nombre décimal.
  • Format d'affichage : Montant (€).

L'aperçu à droite calcule le résultat en direct. Voir Écrire une formule.

Le montant se voit pendant la saisie

Dans la grille des lignes, la colonne Montant se remplit à mesure que vous tapez la quantité et le prix — pas à l'enregistrement. Tant qu'une valeur nécessaire manque, elle indique « en attente » plutôt qu'un zéro qu'on croirait sur parole.

Étape 4 : Le total du devis

Retour sur l'objet Devis, + Ajouter un champ :

  • Libellé : Total HT, type Cumul d'objets liés.
  • Objets liés à cumuler : Ligne · Devis.
  • Opération : Somme. Champ à cumuler : Montant.
  • Format d'affichage : Montant (€).
✅ Point de contrôle

Créez un devis, ajoutez-lui deux lignes (2 × 120 € et 1 × 300 €) : le Total HT affiche 540,00 €. Modifiez une quantité, le total suit.

Étape 5 : Le net à payer, avec condition

Un total ne suffit pas : la remise ne s'applique qu'au-delà d'un certain montant. Sur Devis, ajouter un Champ calculé :

  • Libellé : Net à payer
  • Formule :
SI({total_ht} > 1000 ; {total_ht} * (1 - {remise} / 100) ; {total_ht})
  • Type du résultat : Nombre décimal, format Montant (€).

Lisez-la à voix haute : si le total dépasse 1000, applique la remise, sinon garde le total. C'est tout l'intérêt de SI.

La branche non retenue n'est pas calculée

SI({quantite} == 0 ; 0 ; {total} / {quantite}) ne divise jamais par zéro : seule la branche choisie est évaluée.

Étape 6 : Le PDF du devis

Objet Devis → onglet Documents+ Nouveau document, nommé Devis client.

Composez le document avec + Ajouter un bloc : un titre, un bloc de texte reprenant la référence et le client, puis un tableau des lignes. Contrôlez avec Aperçu du document, puis Enregistrer.

Sur une fiche de devis, le document se génère alors en un clic. Détail des blocs et des variables : Documents PDF.

Étape 7 : Reprendre un fichier existant

Vos devis existent déjà dans un tableur. Plutôt que de les ressaisir :

  1. Ouvrir la liste Devis, bouton Importer.
  2. Déposer un fichier .xlsx, .csv ou .txt dont la première ligne porte les noms de colonnes.
  3. Vérifier la correspondance des colonnes, corriger si besoin, lire le décompte.
  4. Importer.

Fabriquez un petit fichier pour essayer :

Référence;Client;Date;Statut;Remise (%)
DEV-001;Boulangerie Martin;17/08/2026;Envoyé;5
DEV-002;Atelier Dupont;18/08/2026;Accepté;10

Notez ce que le moteur accepte : point-virgule, date jj/mm/aaaa, et le libellé du statut plutôt que son code. Détail : Créer et modifier une fiche.

C'est tout ou rien

Une seule ligne en erreur annule l'import complet. C'est voulu : un fichier à moitié importé est plus difficile à rattraper qu'un import refusé.

À vous de jouer

Exercice 1 — La marge

Sur l'objet Ligne (et non sur Devis), ajoutez un champ Coût unitaire, puis un champ calculé Marge qui donne la marge de la ligne en euros.

Corrigé

Sur Ligne, champ calculé Marge, type de résultat Nombre décimal :

({prix_unitaire} - {cout_unitaire}) * {quantite}

Pour la marge du devis entier, ajoutez un champ sur Devis :

  • Libellé : Marge totale, type Cumul d'objets liés.
  • Objets liés à cumuler : Ligne · Devis.
  • Opération : Somme. Champ à cumuler : Marge.
  • Format d'affichage : Montant (€).

Exercice 2 — L'état lisible

Le statut affiche Envoyé, Accepté… Ajoutez sur le devis un champ calculé Suivi qui affiche « À relancer » pour un devis envoyé, « Signé » pour un devis accepté, et rien sinon.

Corrigé

Champ calculé, type du résultat : Texte (c'est le piège : en Nombre décimal le résultat resterait vide) :

SI({statut} == "Envoyé" ; "À relancer" ; SI({statut} == "Accepté" ; "Signé" ; ""))

Les SI s'imbriquent. La comparaison de texte ignore la casse et les accents de bord, mais pas l'orthographe : vous pouvez aussi comparer au code de l'option (envoye).

Exercice 3 — Le nombre de lignes

Affichez sur le devis le nombre de lignes qu'il contient.

Corrigé

Cumul d'objets liés, opération Nombre. Aucun champ à cumuler : c'est le seul cas où le sélecteur « Champ à cumuler » disparaît.

Exercice 4 — Un import qui échoue

Ajoutez volontairement une ligne fautive à votre fichier (Remise (%) = beaucoup) et relancez l'import. Lisez le message.

Ce qu'il faut observer

L'analyse annonce la ligne et la colonne fautives, avec le nom de colonne tel qu'il figure dans votre fichier — pas le code technique du champ. Rien n'est créé tant que le fichier n'est pas propre.

Ce que vous avez appris

  • Un sous-objet modélise « des lignes sous un en-tête », et se transforme après coup si vous vous êtes trompé.
  • Une formule calcule sur la fiche courante ; un cumul agrège les fiches liées. Les deux se combinent : formule sur la ligne, cumul sur l'en-tête.
  • SI rend une formule conditionnelle, et le type du résultat doit suivre ce qu'elle renvoie.
  • Un import reprend l'existant sans ressaisie, en annonçant tout avant d'écrire.

Atelier suivant : L'interface sur mesure.