Office Script pour automatiser un fichier FAB-DIS : guide pratique et exemples
Vous gerez des fichiers FAB-DIS dans Excel et vous cherchez une alternative moderne a VBA ? Office Script est la reponse de Microsoft pour automatiser Excel sur le web. Base sur TypeScript, il permet d’executer des scripts dans Excel Online et, surtout, de les connecter a Power Automate pour creer des flux entierement automatises.
Dans cet article, nous allons vous montrer concretement comment utiliser Office Script pour vos fichiers FAB-DIS : validation des codes GTIN, nettoyage des donnees commerciales, calculs tarifaires automatiques. Avec des exemples de code prets a copier-coller, adaptes aux blocs B01, B02, B03 et B04 du standard FAB-DIS.
💼 Besoin d’un accompagnement personnalise ? AutoExcel peut realiser pour vous les automatisations completes de vos fichiers FAB-DIS, que ce soit en VBA, Office Script ou Power Automate.
Contactez-nous pour un devis gratuit.
Articles connexes de ce guide
1. Office Script : qu’est-ce que c’est et pourquoi l’utiliser pour le FAB-DIS ?
Office Script est le langage de scripting moderne de Microsoft pour Excel. Contrairement a VBA qui existe depuis les annees 90, Office Script a ete lance en 2020 et repose sur TypeScript (une version typee de JavaScript). Il fonctionne exclusivement dans Excel pour le web et Excel pour Microsoft 365.
Comparaison VBA vs Office Script
| Critere | VBA | Office Script |
| Langage | Visual Basic | TypeScript |
| Environnement | Excel Desktop uniquement | Excel Online + Desktop (M365) |
| Cloud / Collaboration | ✗ Non | ✓ Oui, natif |
| Power Automate | ✗ Non compatible | ✓ Integration native |
| Securite (macros) | ⚠ Bloque par defaut | ✓ Moins de restrictions |
| Maturite / Ecosysteme | ✓ 30 ans d’exemples | ⚠ Plus recent |
Pourquoi Office Script est ideal pour le FAB-DIS
Le cas d’usage parfait :
Vous recevez chaque mois un fichier FAB-DIS de votre fournisseur par email. Avec Office Script + Power Automate, vous pouvez automatiser : reception, validation, transformation, integration dans votre systeme. Sans intervention humaine.
Les fichiers FAB-DIS sont particulierement adaptes a Office Script pour plusieurs raisons :
- Structure tabulaire fixe : Les colonnes (MARQUE, REFCIALE, GTIN, TARIF…) sont standardisees, ce qui facilite l’ecriture de scripts generiques.
- Flux recurrents : La mise a jour des tarifs, l’ajout de nouvelles references, la validation des donnees sont des taches repetitives.
- Collaboration multi-acteurs : Fournisseurs, ADV, chefs de produits peuvent travailler sur le meme fichier cloud.
- Integration ERP : Power Automate peut envoyer les donnees validees directement vers Sage, EBP, Cegid, etc.
2. Trois scripts Office Script prets a l’emploi pour le FAB-DIS
Voici trois scripts concrets que vous pouvez copier-coller directement dans l’editeur Office Script (onglet Automatiser puis Nouveau script dans Excel Online).
📦 Script 1 : Valider les codes GTIN (EAN-13)
Cas d’usage : Avant d’envoyer votre FAB-DIS a un distributeur, verifiez que tous les codes GTIN du bloc B01_COMMERCE sont valides (checksum correct).
Office Script function main(workbook: ExcelScript.Workbook) { // Recuperer la feuille B01_COMMERCE let sheet = workbook.getWorksheet(« B01_COMMERCE »); if (!sheet) { console.log(« Feuille B01_COMMERCE introuvable »); return; } // Verifier que la feuille n’est pas vide let usedRange = sheet.getUsedRange(); if (!usedRange) { console.log(« La feuille est vide »); return; } let values = usedRange.getValues(); // Verifier qu’il y a au moins une ligne de donnees if (values.length < 2) { console.log("Pas de donnees a traiter"); return; } // Chercher l'index de la colonne GTIN dans l'en-tete let headers: string[] = []; for (let h = 0; h < values[0].length; h++) { headers.push(String(values[0][h]).trim().toUpperCase()); } let gtinIndex = headers.indexOf("GTIN"); if (gtinIndex === -1) { console.log("Colonne GTIN non trouvee"); return; } let erreursCount = 0; // Parcourir chaque ligne (a partir de la ligne 2) for (let i = 1; i < values.length; i++) { let gtinValue = values[i][gtinIndex]; let gtin = String(gtinValue).trim(); // Verifier seulement les GTIN de 13 caracteres if (gtin && gtin.length === 13 && /^\d{13}$/.test(gtin)) { if (!isValidEAN13(gtin)) { erreursCount++; console.log("Ligne " + (i + 1) + ": GTIN invalide -> » + gtin); // Colorer la cellule en rouge let cell = sheet.getCell(i, gtinIndex); cell.getFormat().getFill().setColor(« #FFCCCC »); } } else if (gtin && gtin.length > 0 && gtin.length !== 13) { // GTIN avec mauvaise longueur erreursCount++; console.log(« Ligne » + (i + 1) + « : GTIN longueur incorrecte ( » + gtin.length + » car.) -> » + gtin); let cell = sheet.getCell(i, gtinIndex); cell.getFormat().getFill().setColor(« #FFE0B2 »); } } // Resume if (erreursCount > 0) { console.log(« —« ); console.log(« Total: » + erreursCount + » GTIN invalides detectes »); } else { console.log(« Tous les GTIN sont valides ! »); } } // Fonction de validation EAN-13 (algorithme checksum) function isValidEAN13(code: string): boolean { // Verifier que c’est bien 13 chiffres if (code.length !== 13) { return false; } for (let c = 0; c < 13; c++) { if (code[c] < "0" || code[c] > « 9 ») { return false; } } // Calcul du checksum let sum = 0; for (let i = 0; i < 12; i++) { let digit = parseInt(code.charAt(i), 10); if (i % 2 === 0) { sum += digit; } else { sum += digit * 3; } } let checkDigit = (10 - (sum % 10)) % 10; let lastDigit = parseInt(code.charAt(12), 10); return checkDigit === lastDigit; }
🗃 Script 2 : Nettoyer et normaliser les libelles (LIBELLE40)
Cas d’usage : Les libelles produits contiennent souvent des espaces en trop, des caracteres speciaux ou des incoherences de casse. Ce script uniformise tout.
Office Script function main(workbook: ExcelScript.Workbook) { // Recuperer la feuille B01_COMMERCE let sheet = workbook.getWorksheet(« B01_COMMERCE »); if (!sheet) { console.log(« Feuille B01_COMMERCE introuvable »); return; } let usedRange = sheet.getUsedRange(); if (!usedRange) { console.log(« La feuille est vide »); return; } let values = usedRange.getValues(); if (values.length < 2) { console.log("Pas de donnees a traiter"); return; } // Construire le tableau des en-tetes let headers: string[] = []; for (let h = 0; h < values[0].length; h++) { headers.push(String(values[0][h]).trim().toUpperCase()); } // Colonnes a nettoyer let libColumns: string[] = ["LIBELLE40", "LIBELLE80", "LIBELLE240"]; let modifCount = 0; // Parcourir chaque colonne cible for (let c = 0; c < libColumns.length; c++) { let colName = libColumns[c]; let colIndex = headers.indexOf(colName); if (colIndex === -1) { console.log("Colonne " + colName + " non trouvee, ignoree"); continue; } console.log("Traitement de la colonne: " + colName); // Parcourir chaque ligne de donnees for (let i = 1; i < values.length; i++) { let original = String(values[i][colIndex]); let cleaned = cleanLabel(original); if (cleaned !== original) { sheet.getCell(i, colIndex).setValue(cleaned); modifCount++; } } } console.log("---"); console.log("Termine: " + modifCount + " libelles nettoyes."); } function cleanLabel(text: string): string { if (!text) { return ""; } let result = text; // Supprimer espaces en debut et fin result = result.trim(); // Remplacer espaces multiples par un seul espace result = result.replace(/\s+/g, " "); // Supprimer caracteres speciaux non autorises // Garde: lettres, chiffres, espaces, accents courants, tirets, points, virgules, apostrophes result = result.replace(/[^\w\s\u00C0-\u00FF\-\.,']/g, ""); // Convertir en majuscules result = result.toUpperCase(); return result; }
💰 Script 3 : Calculer automatiquement les prix de vente
Cas d’usage : Appliquer un coefficient multiplicateur au tarif d’achat (colonne TARIF) pour obtenir un prix de vente, en fonction de la gamme produit.
Office Script function main(workbook: ExcelScript.Workbook) { // ============================================ // PARAMETRES A MODIFIER SELON VOS BESOINS // ============================================ let coefPremium = 1.45; let coefStandard = 1.35; let coefEco = 1.25; let coefDefaut = 1.30; // ============================================ // Recuperer la feuille B01_COMMERCE let sheet = workbook.getWorksheet(« B01_COMMERCE »); if (!sheet) { console.log(« Feuille B01_COMMERCE introuvable »); return; } let usedRange = sheet.getUsedRange(); if (!usedRange) { console.log(« La feuille est vide »); return; } let values = usedRange.getValues(); if (values.length < 2) { console.log("Pas de donnees a traiter"); return; } // Construire le tableau des en-tetes let headers: string[] = []; for (let h = 0; h < values[0].length; h++) { headers.push(String(values[0][h]).trim().toUpperCase()); } // Trouver les indices des colonnes let gammeIdx = headers.indexOf("GAMME"); let tarifIdx = headers.indexOf("TARIF"); if (tarifIdx === -1) { console.log("Colonne TARIF non trouvee"); return; } console.log("Colonne TARIF trouvee en position: " + tarifIdx); if (gammeIdx === -1) { console.log("Colonne GAMME non trouvee - coefficient par defaut applique"); } else { console.log("Colonne GAMME trouvee en position: " + gammeIdx); } // Trouver ou creer la colonne PRIX_VENTE let pvIdx = headers.indexOf("PRIX_VENTE"); if (pvIdx === -1) { pvIdx = headers.length; sheet.getCell(0, pvIdx).setValue("PRIX_VENTE"); console.log("Colonne PRIX_VENTE creee en position: " + pvIdx); } else { console.log("Colonne PRIX_VENTE existante en position: " + pvIdx); } let compteur = 0; // Calculer pour chaque ligne for (let i = 1; i < values.length; i++) { // Recuperer la gamme let gamme = ""; if (gammeIdx !== -1) { gamme = String(values[i][gammeIdx]).toUpperCase().trim(); } // Recuperer le tarif let tarifStr = String(values[i][tarifIdx]).replace(",", "."); let tarif = parseFloat(tarifStr); if (isNaN(tarif)) { tarif = 0; } // Determiner le coefficient selon la gamme let coef = coefDefaut; if (gamme === "PREMIUM") { coef = coefPremium; } else if (gamme === "STANDARD") { coef = coefStandard; } else if (gamme === "ECO") { coef = coefEco; } // Calculer le prix de vente arrondi a 2 decimales let prixVente = Math.round(tarif * coef * 100) / 100; // Ecrire dans la cellule sheet.getCell(i, pvIdx).setValue(prixVente); compteur++; } console.log("---"); console.log("Termine: " + compteur + " prix calcules"); console.log("Coefficients utilises:"); console.log(" PREMIUM: " + coefPremium); console.log(" STANDARD: " + coefStandard); console.log(" ECO: " + coefEco); console.log(" DEFAUT: " + coefDefaut); }
Astuce : Pour acceder a l’editeur Office Script, ouvrez votre fichier Excel dans le navigateur (Excel Online), puis cliquez sur Automatiser puis Nouveau script. Collez le code et cliquez sur Executer.
3. Aller plus loin : Office Script + Power Automate
La vraie puissance d’Office Script reside dans son integration avec Power Automate. Vous pouvez creer des flux automatiques qui declenchent vos scripts sans aucune action manuelle.
Exemple de flux automatise pour le FAB-DIS
Scenario : Traitement automatique d’un FAB-DIS recu par email
- Declencheur : Un email arrive avec un fichier .xlsx en piece jointe (expediteur = fournisseur)
- Action 1 : Enregistrer le fichier dans OneDrive/SharePoint
- Action 2 : Executer le script « Valider GTIN »
- Action 3 : Executer le script « Nettoyer libelles »
- Action 4 : Si aucune erreur : envoyer une notification Teams « FAB-DIS OK »
- Action 5 : Si erreurs : envoyer un email recapitulatif a l’ADV
Ce type de flux transforme un processus de 30 minutes (ouvrir le fichier, verifier, nettoyer, sauvegarder, notifier) en un processus de 0 minute pour l’utilisateur.
Limites a connaitre
Office Script n’est pas parfait. Voici les principales limitations a prendre en compte :
- Pas d’acces aux fichiers locaux : Le fichier doit etre sur OneDrive ou SharePoint.
- Pas de UserForms : Contrairement a VBA, vous ne pouvez pas creer de fenetres interactives.
- Performance sur gros volumes : Au-dela de 50 000 lignes, les temps d’execution augmentent significativement.
- Licence requise : Il faut une licence Microsoft 365 Business (pas la version gratuite).
Notre recommandation : Pour des fichiers FAB-DIS de moins de 20 000 lignes avec des traitements recurrents dans un environnement cloud, Office Script est ideal. Pour des fichiers volumineux ou des traitements complexes en local, VBA reste pertinent.
Consultez notre guide de decision.
FAQ : Office Script et FAB-DIS
Office Script peut-il remplacer completement VBA ?
Non, pas encore. VBA reste necessaire pour : les UserForms, l’acces aux fichiers locaux, les tres gros volumes de donnees, et les macros Excel Desktop. Office Script est complementaire et ideal pour les workflows cloud et Power Automate.
Faut-il savoir coder en TypeScript pour utiliser Office Script ?
Des bases en JavaScript/TypeScript aident, mais l’editeur Office Script propose une fonction « Enregistrer les actions » qui genere le code automatiquement a partir de vos manipulations manuelles. Ideal pour debuter.
Combien de temps prend l’execution d’un script sur un FAB-DIS de 10 000 lignes ?
En moyenne, entre 5 et 30 secondes selon la complexite du script. La validation GTIN sur 10 000 lignes prend environ 10 secondes. C’est plus lent que VBA local, mais suffisant pour des traitements automatises en arriere-plan.
Peut-on partager un script Office Script avec des collegues ?
Oui ! Les scripts sont stockes dans OneDrive et peuvent etre partages. Mieux encore : si le script est associe a un fichier Excel partage, tous les utilisateurs ayant acces au fichier peuvent l’executer.
Office Script fonctionne-t-il avec les fichiers .xls (ancien format) ?
Non. Office Script necessite le format .xlsx (Open XML). Si vos fournisseurs envoient des .xls, vous devrez d’abord les convertir (manuellement ou via Power Automate).
Vous souhaitez automatiser vos fichiers FAB-DIS ?
Que vous choisissiez VBA, Office Script ou Power Automate, nous pouvons vous accompagner dans la mise en place de vos automatisations sur mesure.
Validation GTIN, calculs tarifaires, enrichissement ETIM, integration ERP…
Demander un devis gratuit Conclusion : Office Script, un allie puissant pour le FAB-DIS cloud
Office Script represente l’avenir de l’automatisation Excel dans un monde de plus en plus oriente cloud. Pour les TPE/PME du batiment qui travaillent deja avec Microsoft 365 et OneDrive, c’est une opportunite de moderniser leurs processus FAB-DIS sans investir dans des outils couteux.
Ce qu’il faut retenir :
- Office Script est ideal pour les traitements recurrents et les flux automatises (Power Automate).
- Les scripts sont ecrits en TypeScript, plus moderne que VBA, mais avec une courbe d’apprentissage.
- Pour les fichiers FAB-DIS, les cas d’usage prioritaires sont : validation GTIN, nettoyage de donnees, calculs tarifaires.
- VBA reste pertinent pour les gros volumes et les traitements locaux.
Pour aller plus loin, consultez notre guide ultime FAB-DIS et automatisation, ou decouvrez quand automatiser et quand laisser manuel pour prendre les bonnes decisions.