Automatiser la création de tarifs clients personnalisés depuis un fichier FAB-DIS
Vous gérez 50 clients avec des grilles tarifaires différentes (gros comptes, revendeurs, installateurs) ? Chaque mise à jour FAB-DIS vous oblige à recréer manuellement 50 fichiers Excel en appliquant des coefficients de marge spécifiques selon les familles de produits et le profil client. Résultat : 3 jours de travail répétitif, avec un risque d’erreur à chaque copier-coller.
La bonne nouvelle ? Cette tâche chronophage peut être automatisée à 100% avec un script Office Scripts qui applique des coefficients de marge personnalisés par famille de produits (FAM1L), génère automatiquement vos tarifs clients au format Excel, et vous fait gagner 95% de temps.
Ce guide vous montre comment construire une stratégie tarifaire différenciée intelligente, puis l’automatiser complètement pour créer des dizaines de tarifs personnalisés en quelques clics.
💡 50 tarifs clients à générer chaque mois ?
AutoExcel peut créer pour vous une solution complète clé en main : grille de coefficients par profil client et famille de produits, génération automatique de tarifs au format PDF ou Excel avec vos logos et conditions commerciales, envoi automatisé par email via Power Automate.
📊 Le problème récurrent : la génération manuelle de tarifs
Scénario classique d’un distributeur de matériel électrique :
- 50 clients actifs avec 3 profils différents (15 gros comptes, 25 revendeurs, 10 installateurs)
- Chaque profil a des coefficients de marge différents selon les familles de produits
- 4 mises à jour tarifaires par an (nouvelles gammes + hausses de prix)
Processus manuel actuel :
- Ouvrir le fichier FAB-DIS
- Pour chaque client, créer un nouveau fichier
- Copier les produits pertinents
- Appliquer manuellement les coefficients par famille (ex: +35% sur Automatismes, +25% sur Accessoires…)
- Vérifier les calculs (risque d’erreur élevé)
- Mise en forme (logo, en-tête client…)
- Export PDF et envoi par email
Soit 12 jours par an uniquement consacrés à cette tâche répétitive
✅ La solution automatisée
Gain de temps : 98,5%
Soit 11,5 jours récupérés par an pour des tâches à forte valeur ajoutée (prospection, relation client, négociation)
Stratégie tarifaire : pourquoi et comment différencier les coefficients
Avant de plonger dans le script, posons les fondations d’une stratégie tarifaire cohérente et rentable.
Les 3 dimensions de la différenciation tarifaire
1. Différenciation par PROFIL CLIENT
Gros comptes
Caractéristiques :
- Volumes importants
- Paiement rapide
- Commandes régulières
Stratégie : Marges réduites (15-25%)
Revendeurs
Caractéristiques :
- Volumes moyens
- Besoin d’accompagnement
- Autonomes sur technique
Stratégie : Marges intermédiaires (25-35%)
Installateurs
Caractéristiques :
- Petits volumes
- Forte demande SAV
- Besoin de conseil
Stratégie : Marges élevées (35-45%)
2. Différenciation par FAMILLE DE PRODUITS
Tous les produits ne justifient pas la même marge. Exemples de logiques courantes :
- Produits techniques complexes (automatismes, centrales) → Marge élevée (forte valeur ajoutée conseil)
- Accessoires standards (télécommandes, photocellules) → Marge moyenne (concurrence forte)
- Consommables (piles, lubrifiants) → Marge faible (produits d’appel)
- Pièces détachées → Marge élevée (exclusivité, urgence)
3. Matrice de coefficients croisée
📊 Exemple de grille tarifaire (matrice Profil × Famille)
| Famille (FAM1L) | Gros compte (coef.) | Revendeur (coef.) | Installateur (coef.) |
|---|---|---|---|
| AUTOMATISMES PORTAILS | 1.20 (+20%) | 1.35 (+35%) | 1.45 (+45%) |
| ACCESSOIRES AUTOMATISME | 1.15 (+15%) | 1.25 (+25%) | 1.35 (+35%) |
| ARMOIRES DE COMMANDE | 1.22 (+22%) | 1.30 (+30%) | 1.40 (+40%) |
| BARRIÈRES LEVANTES | 1.25 (+25%) | 1.38 (+38%) | 1.48 (+48%) |
| PIÈCES DÉTACHÉES | 1.30 (+30%) | 1.45 (+45%) | 1.55 (+55%) |
La formule de calcul du prix client
Formule de base :
Exemple concret :
Produit : Moteur battant (FAM1L = AUTOMATISMES PORTAILS)
TARIF FAB-DIS = 445€ HT
Remise fournisseur = 30% (vous achetez à 311,50€)
Client = Revendeur → Coefficient = 1.35
Note : Le TARIF FAB-DIS est le prix public conseillé. Vous devez d’abord appliquer votre remise distributeur pour obtenir votre prix d’achat, PUIS appliquer votre coefficient de marge.
⚠️ Erreur fréquente : Appliquer le coefficient directement sur le TARIF FAB-DIS sans tenir compte de la remise fournisseur. Cela fausse totalement vos marges réelles. Toujours calculer : (TARIF × Remise) × Coefficient.
Le script d’automatisation : créer des tarifs clients en masse
Passons maintenant à la création du script qui applique automatiquement vos grilles tarifaires.
Vue d’ensemble : ce que fait le script
Inputs :
- Feuille
B01_COMMERCE: Données produits FAB-DIS - Feuille
Grille_Coefficients: Votre matrice Profil × Famille (créée manuellement) - Paramètre : Nom du profil client (ex: « Revendeur »)
Process :
- Lecture de tous les produits B01_COMMERCE
- Pour chaque produit, récupération de sa FAM1L
- Recherche du coefficient correspondant dans la grille (Profil × FAM1L)
- Calcul : Prix Client = TARIF × (1 – Remise) × Coefficient
- Génération d’une nouvelle feuille avec colonnes : REFCIALE, LIBELLE80, FAM1L, Prix Client
Output :
- Nouvel onglet
Tarif_[NomClient]prêt à être exporté en PDF ou Excel - Colonnes : REFCIALE, LIBELLE80, FAM1L, Prix Unitaire HT, Prix TTC
Étape préalable : créer votre grille de coefficients
Créer la feuille Grille_Coefficients
Avant d’exécuter le script, vous devez créer manuellement une feuille contenant votre matrice de coefficients.
Structure attendue :
| FAM1L | Gros_compte | Revendeur | Installateur |
|---|---|---|---|
| AUTOMATISMES PORTAILS | 1.20 | 1.35 | 1.45 |
| ACCESSOIRES AUTOMATISME | 1.15 | 1.25 | 1.35 |
| ARMOIRES DE COMMANDE | 1.22 | 1.30 | 1.40 |
Instructions :
- Créez un nouvel onglet nommé exactement
Grille_Coefficients - En A1 : « FAM1L »
- En B1, C1, D1… : Les noms de vos profils clients (ex: « Gros_compte », « Revendeur », « Installateur »)
- Listez toutes vos familles FAM1L en colonne A (à partir de A2)
- Remplissez les coefficients correspondants
Tutoriel : création du script en 3 étapes
Ouvrir l’éditeur et créer le script
Actions :
- Ouvrez votre fichier FAB-DIS dans Excel
- Vérifiez que les onglets
B01_COMMERCEetGrille_Coefficientsexistent - Onglet Automatiser → Nouveau script
- Nommer :
Generer_Tarif_Client
Copier le code du script
Copiez le code ci-dessous dans votre éditeur :
function main(workbook: ExcelScript.Workbook) {
// ========================================
// CONFIGURATION : À ADAPTER SELON VOS BESOINS
// ========================================
// Profil client pour ce tarif (doit correspondre à une colonne dans Grille_Coefficients)
const PROFIL_CLIENT = "Revendeur"; // Modifier ici : Gros_compte, Revendeur, Installateur...
// Remise fournisseur que vous bénéficiez (en décimal)
const REMISE_FOURNISSEUR = 0.30; // 30% de remise = 0.30
// Taux de TVA à appliquer (pour calcul TTC)
const TVA = 0.20; // 20%
// Nom du client (pour le titre de la feuille)
const NOM_CLIENT = "Tarif_Revendeur_Standard";
// ========================================
// ÉTAPE 1 : Récupération des feuilles
// ========================================
let b01 = workbook.getWorksheet("B01_COMMERCE");
let grille = workbook.getWorksheet("Grille_Coefficients");
if (!b01 || !grille) {
console.log("❌ Erreur : Feuilles B01_COMMERCE ou Grille_Coefficients manquantes");
return;
}
// ========================================
// ÉTAPE 2 : Lecture de la grille de coefficients
// ========================================
let grilleData = grille.getUsedRange().getValues();
let grilleHeaders = grilleData[0].map((h: string | number | boolean) => String(h).trim());
// Trouver l'index de la colonne du profil client
let colProfilIndex = grilleHeaders.indexOf(PROFIL_CLIENT);
if (colProfilIndex === -1) {
console.log("❌ Erreur : Profil '" + PROFIL_CLIENT + "' introuvable dans Grille_Coefficients");
return;
}
// Créer un map FAM1L → Coefficient
let coeffMap: { [key: string]: number } = {};
for (let i = 1; i < grilleData.length; i++) {
let famille = String(grilleData[i][0]).trim();
let coeff = parseFloat(grilleData[i][colProfilIndex]);
if (famille && !isNaN(coeff)) {
coeffMap[famille] = coeff;
}
}
console.log("Coefficients chargés : " + Object.keys(coeffMap).length + " familles");
// ========================================
// ÉTAPE 3 : Lecture des données B01_COMMERCE
// ========================================
let b01Data = b01.getUsedRange().getValues();
let b01Headers = b01Data[0].map((h: string | number | boolean) => String(h).trim());
// Trouver les colonnes nécessaires
let colREFCIALE = b01Headers.indexOf("REFCIALE");
let colLIBELLE80 = b01Headers.indexOf("LIBELLE80");
let colFAM1L = b01Headers.indexOf("FAM1L");
let colTARIF = b01Headers.indexOf("TARIF");
if (colREFCIALE === -1 || colFAM1L === -1 || colTARIF === -1) {
console.log("❌ Erreur : Colonnes REFCIALE, FAM1L ou TARIF manquantes");
return;
}
// ========================================
// ÉTAPE 4 : Calcul des prix clients
// ========================================
let lignesTarif: (string | number)[][] = [];
for (let i = 1; i < b01Data.length; i++) {
let refciale = b01Data[i][colREFCIALE];
let libelle = b01Data[i][colLIBELLE80] || "";
let famille = String(b01Data[i][colFAM1L]).trim();
let tarifFabDis = parseFloat(b01Data[i][colTARIF]);
// Vérifier que les données sont valides
if (!refciale || isNaN(tarifFabDis) || tarifFabDis === 0) {
continue; // Ignorer les lignes invalides
}
// Récupérer le coefficient pour cette famille
let coefficient = coeffMap[famille];
if (!coefficient) {
// Si famille non trouvée, appliquer un coefficient par défaut
coefficient = 1.30; // Défaut +30%
console.log("⚠️ Famille non trouvée : " + famille + ", coefficient par défaut appliqué");
}
// CALCUL : Prix Client HT = TARIF × (1 - Remise) × Coefficient
let prixAchat = tarifFabDis * (1 - REMISE_FOURNISSEUR);
let prixClientHT = prixAchat * coefficient;
let prixClientTTC = prixClientHT * (1 + TVA);
// Arrondir à 2 décimales
prixClientHT = Math.round(prixClientHT * 100) / 100;
prixClientTTC = Math.round(prixClientTTC * 100) / 100;
lignesTarif.push([
refciale,
libelle,
famille,
prixClientHT,
prixClientTTC
]);
}
console.log("Produits traités : " + lignesTarif.length);
// ========================================
// ÉTAPE 5 : Création de la feuille de tarif
// ========================================
// Supprimer l'ancienne feuille si elle existe
let oldSheet = workbook.getWorksheet(NOM_CLIENT);
if (oldSheet) oldSheet.delete();
// Créer la nouvelle feuille
let tarifSheet = workbook.addWorksheet(NOM_CLIENT);
// En-têtes
let headers = ["Référence", "Désignation", "Famille", "Prix HT", "Prix TTC"];
tarifSheet.getRange("A1").getAbsoluteResizedRange(1, headers.length)
.setValues([headers]);
// Mise en forme de l'en-tête
let headerRange = tarifSheet.getRange("A1").getAbsoluteResizedRange(1, headers.length);
headerRange.getFormat().getFill().setColor("#629552");
headerRange.getFormat().getFont().setColor("white");
headerRange.getFormat().getFont().setBold(true);
// Écrire les données
if (lignesTarif.length > 0) {
tarifSheet.getRange("A2").getAbsoluteResizedRange(
lignesTarif.length,
headers.length
).setValues(lignesTarif);
// Format monétaire pour les colonnes Prix
tarifSheet.getRange("D2:E" + (lignesTarif.length + 1))
.setNumberFormat("#,##0.00 €");
}
// Ajuster largeur colonnes
tarifSheet.getUsedRange().getFormat().autofitColumns();
// ========================================
// RÉSULTAT FINAL
// ========================================
console.log("✅ Script terminé avec succès !");
console.log("Feuille créée : " + NOM_CLIENT);
console.log("Profil appliqué : " + PROFIL_CLIENT);
console.log("Remise fournisseur : " + (REMISE_FOURNISSEUR * 100) + "%");
}Personnaliser et exécuter
Actions :
- Modifier les paramètres dans la section CONFIGURATION (lignes 6-16) :
PROFIL_CLIENT: Le nom exact de la colonne dans votre grille (ex: "Gros_compte")REMISE_FOURNISSEUR: Votre remise distributeur en décimal (30% = 0.30)TVA: Généralement 0.20 (20%)NOM_CLIENT: Le nom qui apparaîtra sur l'onglet créé
- Cliquer sur "Exécuter" (▶️)
- Vérifier la console pour les messages de confirmation
- Ouvrir l'onglet créé (ex: "Tarif_Revendeur_Standard")
✅ Résultat attendu : Un nouvel onglet avec 5 colonnes (Référence, Désignation, Famille, Prix HT, Prix TTC), tous les produits avec leurs prix calculés selon le profil choisi.
Générer plusieurs tarifs d'un coup
Pour créer les tarifs de vos 50 clients :
- Exécutez le script une première fois avec
PROFIL_CLIENT = "Gros_compte"etNOM_CLIENT = "Tarif_GrosCompte" - Modifiez les paramètres pour
PROFIL_CLIENT = "Revendeur"etNOM_CLIENT = "Tarif_Revendeur" - Exécutez à nouveau
- Répétez pour chaque profil
Résultat : 3 onglets créés (Tarif_GrosCompte, Tarif_Revendeur, Tarif_Installateur) que vous pouvez ensuite exporter individuellement en PDF ou Excel.
⏱️ Gain de temps mesuré :
- Méthode manuelle : 30 minutes par tarif client × 50 clients = 25 heures
- Avec le script : 5 minutes de paramétrage × 3 profils + 20 sec d'exécution × 50 = 32 minutes
- Gain : 24h28min soit 97,9% de temps gagné
Cas d'usage avancés et variantes du script
Le script de base peut être adapté pour des besoins plus spécifiques. Voici 3 variantes courantes.
Variante #1 : Appliquer un coefficient fixe (tous produits)
Besoin : Créer un tarif avec une marge unique de +35% sur tous les produits, sans distinction de famille.
Solution : Simplifier le script en supprimant la lecture de la grille et en appliquant un coefficient fixe.
Variante #2 : Exclure certaines familles du tarif
Besoin : Ne pas inclure les "PIÈCES DÉTACHÉES" dans le tarif client car elles sont vendues sur devis uniquement.
Solution : Ajouter un filtre dans la boucle de traitement.
Variante #3 : Arrondir les prix à 0,90€ (psychologie des prix)
Besoin : Tous les prix doivent se terminer par ,90€ pour un effet psychologique (ex: 419,90€ au lieu de 420,53€).
Solution : Arrondir au ,90 inférieur.
⚠️ Attention légale : L'arrondi systématique des prix peut être considéré comme une pratique commerciale trompeuse dans certains pays. Vérifiez la réglementation applicable à votre secteur avant d'appliquer ce type de modification.
Questions fréquentes sur l'automatisation des tarifs clients
Coefficient de marge = 1 + (Marge souhaitée en %). Exemples : Pour une marge de 30%, coefficient = 1.30. Pour 45%, coefficient = 1.45. Important : Ce coefficient s'applique sur votre prix d'achat net (après remise fournisseur), PAS sur le tarif public FAB-DIS. Formule complète : Prix Vente = (Tarif FAB-DIS × (1 - Remise Fournisseur)) × Coefficient.
Le script Office Scripts génère des onglets Excel. Pour automatiser la création de PDF, vous devez connecter le script à Power Automate qui peut : (1) Exécuter le script, (2) Convertir l'onglet Excel en PDF, (3) Ajouter votre logo et en-tête, (4) Envoyer par email au client. Cette configuration avancée nécessite Microsoft 365 avec Power Automate et prend environ 1-2h à paramétrer initialement.
Ajoutez une colonne "Taux_Change" dans votre grille de coefficients. Modifiez le script pour multiplier le prix final par ce taux. Exemple : Pour un client UK, taux = 0.85 (conversion EUR → GBP). Formule : Prix_GBP = Prix_EUR × 0.85. Pensez à mettre à jour régulièrement les taux de change dans votre grille.
Oui, la différenciation tarifaire est légale et courante en B2B, à condition de respecter certaines règles : (1) Les différences doivent être justifiées objectivement (volumes, services, coûts différents), (2) Pas de discrimination illégale (origine, religion, etc.), (3) Transparence : le client doit pouvoir connaître les conditions d'accès aux meilleurs tarifs. En France, les tarifs B2B ne sont pas soumis à publication obligatoire contrairement au B2C.
Le script applique un coefficient par défaut de 1.30 (ligne 75 du code) pour les produits sans famille ou dont la famille n'existe pas dans votre grille. Vous pouvez modifier cette valeur selon votre politique. Alternativement, nettoyez votre fichier FAB-DIS en amont pour attribuer manuellement une famille aux produits orphelins, ou contactez votre fournisseur pour obtenir un fichier complet.
🚀 Besoin d'une solution complète de gestion tarifaire automatisée ?
AutoExcel crée pour vous un système intégré : grilles tarifaires dynamiques, génération automatique de 50+ tarifs clients en PDF avec logos, envoi programmé par email, mise à jour automatique depuis vos FAB-DIS, tableau de bord de suivi.
Audit gratuit • Solution sur-mesure • ROI garanti
Demander un audit gratuitRéponse sous 24h • Démonstration personnalisée • Sans engagement
En résumé : transformer 3 jours de travail en 20 minutes
L'automatisation de la création de tarifs clients personnalisés depuis vos fichiers FAB-DIS n'est pas un luxe réservé aux grandes structures. C'est une nécessité business pour toute TPE/PME qui gère plus de 10 clients avec des grilles tarifaires différenciées.
- ✓ Stratégie tarifaire différenciée : Gros comptes, revendeurs, installateurs méritent des conditions adaptées
- ✓ Matrice de coefficients : Profil client × Famille de produits = précision maximale
- ✓ Script automatisé : 97% de temps gagné sur la génération de tarifs
- ✓ Zéro erreur de calcul : Les coefficients sont appliqués uniformément sans risque d'oubli
- ✓ Évolutivité : Ajoutez facilement de nouveaux profils ou familles dans votre grille
Les 3 jours mensuels récupérés peuvent être réinvestis dans des tâches à haute valeur ajoutée : négociation fournisseurs, prospection, amélioration de l'offre de services.
📚 Pour aller plus loin dans l'automatisation FAB-DIS :

