<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AutoExcel - Automatiser avec Office Scripts – Des scripts concrets</title>
	<atom:link href="https://autoexcel.fr/category/fab-dis/automatiser-avec-office-scripts-des-scripts-concrets/feed/" rel="self" type="application/rss+xml" />
	<link>https://autoexcel.fr</link>
	<description>Automatisation Excel &#38; Office Script sur mesure</description>
	<lastBuildDate>Sat, 10 Oct 2026 14:36:18 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://autoexcel.fr/wp-content/uploads/2025/09/favicon-32x32-1.png</url>
	<title>AutoExcel - Automatiser avec Office Scripts – Des scripts concrets</title>
	<link>https://autoexcel.fr</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Automatiser la création d&#8217;un tarif client personnalisé depuis un FAB-DIS</title>
		<link>https://autoexcel.fr/automatiser-la-creation-dun-tarif-client-personnalise-depuis-un-fab-dis/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=automatiser-la-creation-dun-tarif-client-personnalise-depuis-un-fab-dis</link>
					<comments>https://autoexcel.fr/automatiser-la-creation-dun-tarif-client-personnalise-depuis-un-fab-dis/#respond</comments>
		
		<dc:creator><![CDATA[Joel]]></dc:creator>
		<pubDate>Thu, 30 Apr 2026 06:00:00 +0000</pubDate>
				<category><![CDATA[Automatiser avec Office Scripts - Des scripts concrets pour les Fab-Dis]]></category>
		<category><![CDATA[Fab-Dis]]></category>
		<guid isPermaLink="false">https://autoexcel.fr/?p=1707</guid>

					<description><![CDATA[3 jours pour générer vos tarifs clients… ou 20 minutes ?

Si vous gérez 30, 40 ou 50 clients avec des conditions différentes (gros comptes, revendeurs, installateurs), vous connaissez le scénario :

1 fichier FAB-DIS mis à jour

50 fichiers Excel à recréer

Des coefficients différents selon FAM1L

Des remises fournisseur à intégrer

Des risques d’erreurs à chaque copier-coller

Résultat : 3 jours de travail répétitif.

Et si tout cela devenait un simple clic ?

🎯 La vraie stratégie : Profil client × Famille produit

Un gros compte n’a pas la même marge qu’un installateur.

Exemple concret :

Famille : AUTOMATISMES PORTAILS

Gros compte → coef 1.20

Revendeur → coef 1.35

Installateur → coef 1.45

Famille : PIÈCES DÉTACHÉES

Gros compte → 1.30

Revendeur → 1.45

Installateur → 1.55

On ne parle pas d’un simple “+30% sur tout”.
On parle d’une matrice intelligente croisant :

Le profil client

La famille FAM1L

Votre remise fournisseur réelle

Formule correcte :

Prix Client = (TARIF FAB-DIS × (1 - remise fournisseur)) × coefficient

Erreur fréquente : appliquer le coefficient directement sur le tarif public.
👉 C’est comme ça qu’on détruit ses marges sans le voir.

⚙️ Ce que permet l’automatisation

Un script Office Scripts peut :

Lire automatiquement B01_COMMERCE

Chercher la FAM1L de chaque produit

Appliquer le bon coefficient selon le profil

Générer un onglet “Tarif_Revendeur” prêt à exporter

Calculer HT + TTC

Formater les colonnes en €

Temps réel mesuré :

Manuel : 30 min × 50 clients = 25h

Automatisé : 32 minutes
👉 97 à 98% de temps gagné

Et vous pouvez même :

Exclure certaines familles (ex : pièces sur devis)

Appliquer un coefficient unique temporaire

Arrondir les prix à 0,90€

Connecter à Power Automate pour envoi PDF automatique

💡 La vraie question

Combien vaut 12 jours par an récupérés ?

Prospection.
Négociation fournisseur.
Développement commercial.

Ou continuer à copier-coller des colonnes ?

Chez AutoExcel, nous créons des systèmes tarifaires automatisés sur mesure :

Grilles dynamiques

Génération multi-clients

Export PDF avec logo

Envoi automatisé

Mise à jour à chaque nouveau FAB-DIS

Audit gratuit, démonstration personnalisée.

Si vous gérez plus de 10 tarifs clients différents, il est temps d’automatiser.<p>Lisez plus sur <a href="https://autoexcel.fr/automatiser-la-creation-dun-tarif-client-personnalise-depuis-un-fab-dis/">AutoExcel</a></p>]]></description>
										<content:encoded><![CDATA[
<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Automatiser la création d&rsquo;un tarif client personnalisé depuis un FAB-DIS</title>
    <style>
        /* Style pour WordPress/Gutenberg/Astra */
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
            line-height: 1.8;
            color: #333;
            max-width: 100%;
            margin: 0;
            padding: 0;
        }
        
        .article-container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
        }
        
        h1 {
            font-size: 2.2em;
            color: #2c3e50;
            margin-bottom: 20px;
            line-height: 1.3;
            font-weight: 700;
        }
        
        h2 {
            font-size: 1.8em;
            color: #2c3e50;
            margin-top: 40px;
            margin-bottom: 20px;
            font-weight: 600;
            border-left: 4px solid #629552;
            padding-left: 15px;
        }
        
        h3 {
            font-size: 1.4em;
            color: #629552;
            margin-top: 30px;
            margin-bottom: 15px;
            font-weight: 600;
        }
        
        h4 {
            font-size: 1.2em;
            color: #555;
            margin-top: 25px;
            margin-bottom: 12px;
            font-weight: 600;
        }
        
        p {
            margin-bottom: 18px;
            font-size: 1.05em;
        }
        
        .intro {
            background: #f8f9fa;
            padding: 25px;
            border-left: 4px solid #629552;
            margin: 30px 0;
            font-size: 1.1em;
        }
        
        .pain-point {
            background: linear-gradient(135deg, #ffebee 0%, #ffcdd2 100%);
            padding: 30px;
            border-radius: 8px;
            margin: 30px 0;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
            border-left: 5px solid #f44336;
        }
        
        .pain-point h3 {
            margin-top: 0;
            color: #c62828;
        }
        
        .pain-point .time-waste {
            font-size: 2.5em;
            font-weight: bold;
            color: #d32f2f;
            text-align: center;
            margin: 15px 0;
        }
        
        .solution-box {
            background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
            padding: 30px;
            border-radius: 8px;
            margin: 30px 0;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
            border-left: 5px solid #4caf50;
            text-align: center;
        }
        
        .solution-box .time-saved {
            font-size: 3em;
            font-weight: bold;
            color: #2e7d32;
            margin: 15px 0;
        }
        
        .coefficient-grid {
            background: white;
            padding: 25px;
            border-radius: 8px;
            margin: 30px 0;
            box-shadow: 0 2px 4px rgba(0,0,0,0.05);
            border: 2px solid #629552;
        }
        
        .coefficient-grid h4 {
            color: #629552;
            margin-top: 0;
        }
        
        .scenario-cards {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
            gap: 20px;
            margin: 30px 0;
        }
        
        .scenario-card {
            background: white;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            padding: 20px;
            transition: all 0.3s ease;
        }
        
        .scenario-card:hover {
            border-color: #629552;
            box-shadow: 0 4px 12px rgba(98, 149, 82, 0.2);
            transform: translateY(-3px);
        }
        
        .scenario-card h4 {
            color: #629552;
            margin-top: 0;
        }
        
        .scenario-icon {
            font-size: 2.5em;
            text-align: center;
            margin-bottom: 15px;
        }
        
        .step-box {
            background: white;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            padding: 25px;
            margin: 25px 0;
            position: relative;
        }
        
        .step-number {
            position: absolute;
            top: -15px;
            left: 20px;
            background: #629552;
            color: white;
            width: 40px;
            height: 40px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 1.3em;
            font-weight: bold;
            box-shadow: 0 2px 4px rgba(0,0,0,0.2);
        }
        
        .step-box h4 {
            margin-top: 10px;
            color: #629552;
        }
        
        .code-block {
            background: #2d2d2d;
            color: #f8f8f2;
            padding: 20px;
            border-radius: 5px;
            overflow-x: auto;
            margin: 20px 0;
            font-family: 'Courier New', monospace;
            font-size: 0.85em;
            line-height: 1.6;
            position: relative;
        }
        
        .code-block .comment {
            color: #75715e;
            font-style: italic;
        }
        
        .code-block .keyword {
            color: #66d9ef;
            font-weight: bold;
        }
        
        .code-block .string {
            color: #a6e22e;
        }
        
        .code-block .number {
            color: #ae81ff;
        }
        
        .copy-button {
            position: absolute;
            top: 10px;
            right: 10px;
            background: #629552;
            color: white;
            border: none;
            padding: 8px 15px;
            border-radius: 5px;
            cursor: pointer;
            font-size: 0.85em;
            transition: all 0.3s;
        }
        
        .copy-button:hover {
            background: #4a7139;
        }
        
        .stats-box {
            background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
            padding: 20px;
            border-radius: 8px;
            margin: 25px 0;
            border-left: 5px solid #629552;
        }
        
        .stats-box strong {
            color: #2e7d32;
            font-size: 1.3em;
        }
        
        .warning-box {
            background: #fff3cd;
            border-left: 4px solid #ffc107;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .success-box {
            background: #d4edda;
            border-left: 4px solid #28a745;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .automation-box {
            background: linear-gradient(135deg, #e8eaf6 0%, #c5cae9 100%);
            padding: 25px;
            border-radius: 8px;
            margin: 30px 0;
            border-left: 5px solid #5c6bc0;
        }
        
        .automation-box h4 {
            color: #3949ab;
            margin-top: 0;
        }
        
        ul, ol {
            margin: 20px 0;
            padding-left: 30px;
        }
        
        li {
            margin-bottom: 12px;
            line-height: 1.7;
        }
        
        .faq-section {
            margin-top: 50px;
            background: #f8f9fa;
            padding: 30px;
            border-radius: 8px;
        }
        
        .faq-item {
            margin-bottom: 30px;
            padding-bottom: 20px;
            border-bottom: 1px solid #e0e0e0;
        }
        
        .faq-item:last-child {
            border-bottom: none;
        }
        
        .faq-question {
            font-size: 1.2em;
            font-weight: 600;
            color: #2c3e50;
            margin-bottom: 10px;
        }
        
        .faq-answer {
            color: #555;
            line-height: 1.7;
        }
        
        .cta-box {
            background: linear-gradient(135deg, #629552 0%, #4a7139 100%);
            color: white;
            padding: 35px;
            border-radius: 8px;
            margin: 40px 0;
            text-align: center;
        }
        
        .cta-box h3 {
            color: white;
            margin-top: 0;
        }
        
        .cta-button {
            display: inline-block;
            background: white;
            color: #629552;
            padding: 15px 35px;
            text-decoration: none;
            border-radius: 5px;
            font-weight: 600;
            margin-top: 15px;
            transition: all 0.3s;
            font-size: 1.1em;
        }
        
        .cta-button:hover {
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(0,0,0,0.2);
            background: #f0f0f0;
        }
        
        .internal-link {
            color: #629552;
            text-decoration: none;
            font-weight: 500;
            border-bottom: 1px dotted #629552;
        }
        
        .internal-link:hover {
            color: #4a7139;
            border-bottom: 1px solid #4a7139;
        }
        
        blockquote {
            border-left: 4px solid #629552;
            padding-left: 20px;
            margin: 25px 0;
            font-style: italic;
            color: #555;
            background: #f9f9f9;
            padding: 15px 20px;
            border-radius: 4px;
        }
        
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 25px 0;
            font-size: 0.95em;
        }
        
        th, td {
            border: 1px solid #ddd;
            padding: 12px;
            text-align: left;
        }
        
        th {
            background-color: #629552;
            color: white;
            font-weight: 600;
        }
        
        tr:nth-child(even) {
            background-color: #f8f9fa;
        }
        
        .highlight {
            background-color: #fff3cd;
            padding: 2px 6px;
            border-radius: 3px;
            font-weight: 600;
        }
        
        code {
            background: #f5f5f5;
            padding: 2px 6px;
            border-radius: 3px;
            font-family: 'Courier New', monospace;
            color: #d32f2f;
        }
        
        .formula-box {
            background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
            padding: 20px;
            border-radius: 8px;
            margin: 25px 0;
            border-left: 5px solid #2196f3;
            font-family: 'Courier New', monospace;
            font-size: 1.1em;
        }
        
        .formula-box .formula {
            font-size: 1.3em;
            font-weight: bold;
            color: #1565c0;
            margin: 15px 0;
            text-align: center;
        }
    </style>


    <div class="article-container">
        
        <h1>Automatiser la création de tarifs clients personnalisés depuis un fichier FAB-DIS</h1>
        
        <div class="intro">
            <p><strong>Vous gérez 50 clients avec des grilles tarifaires différentes (gros comptes, revendeurs, installateurs) ?</strong> 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 : <span class="highlight">3 jours de travail répétitif</span>, avec un risque d&rsquo;erreur à chaque copier-coller.</p>
            
            <p>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.</p>
            
            <p>Ce guide vous montre comment construire une stratégie tarifaire différenciée intelligente, puis l&rsquo;automatiser complètement pour créer des dizaines de tarifs personnalisés en quelques clics.</p>
        </div>

        <div class="automation-box">
            <h4>💡 50 tarifs clients à générer chaque mois ?</h4>
            <p><strong>AutoExcel peut créer pour vous une solution complète clé en main</strong> : 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.</p>
            <p><a href="https://autoexcel.fr/contact/" class="internal-link">→ Demander une démonstration personnalisée gratuite</a></p>
        </div>

        <div class="pain-point">
            <h3>📊 Le problème récurrent : la génération manuelle de tarifs</h3>
            <p><strong>Scénario classique d&rsquo;un distributeur de matériel électrique :</strong></p>
            <ul>
                <li>50 clients actifs avec 3 profils différents (15 gros comptes, 25 revendeurs, 10 installateurs)</li>
                <li>Chaque profil a des coefficients de marge différents selon les familles de produits</li>
                <li>4 mises à jour tarifaires par an (nouvelles gammes + hausses de prix)</li>
            </ul>
            
            <p><strong>Processus manuel actuel :</strong></p>
            <ol style="font-size: 0.95em;">
                <li>Ouvrir le fichier FAB-DIS</li>
                <li>Pour chaque client, créer un nouveau fichier</li>
                <li>Copier les produits pertinents</li>
                <li>Appliquer manuellement les coefficients par famille (ex: +35% sur Automatismes, +25% sur Accessoires&#8230;)</li>
                <li>Vérifier les calculs (risque d&rsquo;erreur élevé)</li>
                <li>Mise en forme (logo, en-tête client&#8230;)</li>
                <li>Export PDF et envoi par email</li>
            </ol>
            
            <div class="time-waste">⏱️ 3 jours de travail</div>
            <p style="text-align: center; color: #555;">Soit 12 jours par an uniquement consacrés à cette tâche répétitive</p>
        </div>

        <div class="solution-box">
            <h4 style="color: #2e7d32; margin-top: 0;">✅ La solution automatisée</h4>
            <div class="time-saved">3 jours → 20 minutes</div>
            <p><strong>Gain de temps : 98,5%</strong></p>
            <p style="margin-top: 20px;">Soit 11,5 jours récupérés par an pour des tâches à forte valeur ajoutée (prospection, relation client, négociation)</p>
        </div>

        <!-- Section 1 -->
        <h2>Stratégie tarifaire : pourquoi et comment différencier les coefficients</h2>
        
        <p>Avant de plonger dans le script, posons les fondations d&rsquo;une stratégie tarifaire cohérente et rentable.</p>

        <h3>Les 3 dimensions de la différenciation tarifaire</h3>

        <p><strong>1. Différenciation par PROFIL CLIENT</strong></p>

        <div class="scenario-cards">
            <div class="scenario-card">
                <div class="scenario-icon">🏢</div>
                <h4>Gros comptes</h4>
                <p><strong>Caractéristiques :</strong></p>
                <ul style="font-size: 0.9em;">
                    <li>Volumes importants</li>
                    <li>Paiement rapide</li>
                    <li>Commandes régulières</li>
                </ul>
                <p><strong>Stratégie :</strong> Marges réduites (15-25%)</p>
            </div>
            
            <div class="scenario-card">
                <div class="scenario-icon">🏪</div>
                <h4>Revendeurs</h4>
                <p><strong>Caractéristiques :</strong></p>
                <ul style="font-size: 0.9em;">
                    <li>Volumes moyens</li>
                    <li>Besoin d&rsquo;accompagnement</li>
                    <li>Autonomes sur technique</li>
                </ul>
                <p><strong>Stratégie :</strong> Marges intermédiaires (25-35%)</p>
            </div>
            
            <div class="scenario-card">
                <div class="scenario-icon">🔧</div>
                <h4>Installateurs</h4>
                <p><strong>Caractéristiques :</strong></p>
                <ul style="font-size: 0.9em;">
                    <li>Petits volumes</li>
                    <li>Forte demande SAV</li>
                    <li>Besoin de conseil</li>
                </ul>
                <p><strong>Stratégie :</strong> Marges élevées (35-45%)</p>
            </div>
        </div>

        <p><strong>2. Différenciation par FAMILLE DE PRODUITS</strong></p>

        <p>Tous les produits ne justifient pas la même marge. Exemples de logiques courantes :</p>

        <ul>
            <li><strong>Produits techniques complexes</strong> (automatismes, centrales) → Marge élevée (forte valeur ajoutée conseil)</li>
            <li><strong>Accessoires standards</strong> (télécommandes, photocellules) → Marge moyenne (concurrence forte)</li>
            <li><strong>Consommables</strong> (piles, lubrifiants) → Marge faible (produits d&rsquo;appel)</li>
            <li><strong>Pièces détachées</strong> → Marge élevée (exclusivité, urgence)</li>
        </ul>

        <p><strong>3. Matrice de coefficients croisée</strong></p>

        <div class="coefficient-grid">
            <h4>📊 Exemple de grille tarifaire (matrice Profil × Famille)</h4>
            <table>
                <thead>
                    <tr>
                        <th>Famille (FAM1L)</th>
                        <th>Gros compte<br>(coef.)</th>
                        <th>Revendeur<br>(coef.)</th>
                        <th>Installateur<br>(coef.)</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>AUTOMATISMES PORTAILS</td>
                        <td>1.20 (+20%)</td>
                        <td>1.35 (+35%)</td>
                        <td>1.45 (+45%)</td>
                    </tr>
                    <tr>
                        <td>ACCESSOIRES AUTOMATISME</td>
                        <td>1.15 (+15%)</td>
                        <td>1.25 (+25%)</td>
                        <td>1.35 (+35%)</td>
                    </tr>
                    <tr>
                        <td>ARMOIRES DE COMMANDE</td>
                        <td>1.22 (+22%)</td>
                        <td>1.30 (+30%)</td>
                        <td>1.40 (+40%)</td>
                    </tr>
                    <tr>
                        <td>BARRIÈRES LEVANTES</td>
                        <td>1.25 (+25%)</td>
                        <td>1.38 (+38%)</td>
                        <td>1.48 (+48%)</td>
                    </tr>
                    <tr>
                        <td>PIÈCES DÉTACHÉES</td>
                        <td>1.30 (+30%)</td>
                        <td>1.45 (+45%)</td>
                        <td>1.55 (+55%)</td>
                    </tr>
                </tbody>
            </table>
        </div>

        <h3>La formule de calcul du prix client</h3>

        <div class="formula-box">
            <p><strong>Formule de base :</strong></p>
            <div class="formula">
                Prix Client HT = TARIF FAB-DIS × (1 &#8211; Remise Fournisseur) × Coefficient Marge
            </div>
            
            <p><strong>Exemple concret :</strong></p>
            <p>Produit : Moteur battant (FAM1L = AUTOMATISMES PORTAILS)<br>
            TARIF FAB-DIS = 445€ HT<br>
            Remise fournisseur = 30% (vous achetez à 311,50€)<br>
            Client = Revendeur → Coefficient = 1.35</p>
            
            <div class="formula">
                Prix Client = 445€ × 0.70 × 1.35 = 420,53€ HT
            </div>
            
            <p style="font-size: 0.95em; margin-top: 15px;"><strong>Note :</strong> Le TARIF FAB-DIS est le prix public conseillé. Vous devez d&rsquo;abord appliquer votre remise distributeur pour obtenir votre prix d&rsquo;achat, PUIS appliquer votre coefficient de marge.</p>
        </div>

        <div class="warning-box">
            <p><strong>⚠️ Erreur fréquente :</strong> 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.</p>
        </div>

        <!-- Section 2 -->
        <h2>Le script d&rsquo;automatisation : créer des tarifs clients en masse</h2>

        <p>Passons maintenant à la création du script qui applique automatiquement vos grilles tarifaires.</p>

        <h3>Vue d&rsquo;ensemble : ce que fait le script</h3>

        <p><strong>Inputs :</strong></p>
        <ul>
            <li>Feuille <code>B01_COMMERCE</code> : Données produits FAB-DIS</li>
            <li>Feuille <code>Grille_Coefficients</code> : Votre matrice Profil × Famille (créée manuellement)</li>
            <li>Paramètre : Nom du profil client (ex: « Revendeur »)</li>
        </ul>

        <p><strong>Process :</strong></p>
        <ol>
            <li>Lecture de tous les produits B01_COMMERCE</li>
            <li>Pour chaque produit, récupération de sa FAM1L</li>
            <li>Recherche du coefficient correspondant dans la grille (Profil × FAM1L)</li>
            <li>Calcul : Prix Client = TARIF × (1 &#8211; Remise) × Coefficient</li>
            <li>Génération d&rsquo;une nouvelle feuille avec colonnes : REFCIALE, LIBELLE80, FAM1L, Prix Client</li>
        </ol>

        <p><strong>Output :</strong></p>
        <ul>
            <li>Nouvel onglet <code>Tarif_[NomClient]</code> prêt à être exporté en PDF ou Excel</li>
            <li>Colonnes : REFCIALE, LIBELLE80, FAM1L, Prix Unitaire HT, Prix TTC</li>
        </ul>

        <h3>Étape préalable : créer votre grille de coefficients</h3>

        <div class="step-box">
            <div class="step-number">0</div>
            <h4>Créer la feuille Grille_Coefficients</h4>
            <p>Avant d&rsquo;exécuter le script, vous devez créer manuellement une feuille contenant votre matrice de coefficients.</p>
            
            <p><strong>Structure attendue :</strong></p>
            <table style="font-size: 0.9em; margin-top: 15px;">
                <tbody><tr>
                    <th>FAM1L</th>
                    <th>Gros_compte</th>
                    <th>Revendeur</th>
                    <th>Installateur</th>
                </tr>
                <tr>
                    <td>AUTOMATISMES PORTAILS</td>
                    <td>1.20</td>
                    <td>1.35</td>
                    <td>1.45</td>
                </tr>
                <tr>
                    <td>ACCESSOIRES AUTOMATISME</td>
                    <td>1.15</td>
                    <td>1.25</td>
                    <td>1.35</td>
                </tr>
                <tr>
                    <td>ARMOIRES DE COMMANDE</td>
                    <td>1.22</td>
                    <td>1.30</td>
                    <td>1.40</td>
                </tr>
            </tbody></table>
            
            <p style="margin-top: 15px;"><strong>Instructions :</strong></p>
            <ol>
                <li>Créez un nouvel onglet nommé exactement <code>Grille_Coefficients</code></li>
                <li>En A1 : « FAM1L »</li>
                <li>En B1, C1, D1&#8230; : Les noms de vos profils clients (ex: « Gros_compte », « Revendeur », « Installateur »)</li>
                <li>Listez toutes vos familles FAM1L en colonne A (à partir de A2)</li>
                <li>Remplissez les coefficients correspondants</li>
            </ol>
        </div>

        <h3>Tutoriel : création du script en 3 étapes</h3>

        <!-- Étape 1 -->
        <div class="step-box">
            <div class="step-number">1</div>
            <h4>Ouvrir l&rsquo;éditeur et créer le script</h4>
            <p><strong>Actions :</strong></p>
            <ol>
                <li>Ouvrez votre fichier FAB-DIS dans Excel</li>
                <li>Vérifiez que les onglets <code>B01_COMMERCE</code> et <code>Grille_Coefficients</code> existent</li>
                <li>Onglet Automatiser → Nouveau script</li>
                <li>Nommer : <code>Generer_Tarif_Client</code></li>
            </ol>
        </div>

        <!-- Étape 2 -->
        <div class="step-box">
            <div class="step-number">2</div>
            <h4>Copier le code du script</h4>
            <p>Copiez le code ci-dessous dans votre éditeur :</p>

<div class="code-block">
<button class="copy-button" onclick="navigator.clipboard.writeText(this.nextElementSibling.textContent)">📋 Copier</button>
<pre><span class="keyword">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) =&gt; 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 &lt; grilleData.length; i++) {
        let famille = String(grilleData[i][0]).trim();
        let coeff = parseFloat(grilleData[i][colProfilIndex]);

        if (famille &amp;&amp; !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) =&gt; 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 &lt; 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 &gt; 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) + "%");
}</span></pre></div>

        <!-- Étape 3 -->
        <div class="step-box">
            <div class="step-number">3</div>
            <h4>Personnaliser et exécuter</h4>
            <p><strong>Actions :</strong></p>
            <ol>
                <li><strong>Modifier les paramètres</strong> dans la section CONFIGURATION (lignes 6-16) :
                    <ul>
                        <li><code>PROFIL_CLIENT</code> : Le nom exact de la colonne dans votre grille (ex: « Gros_compte »)</li>
                        <li><code>REMISE_FOURNISSEUR</code> : Votre remise distributeur en décimal (30% = 0.30)</li>
                        <li><code>TVA</code> : Généralement 0.20 (20%)</li>
                        <li><code>NOM_CLIENT</code> : Le nom qui apparaîtra sur l&rsquo;onglet créé</li>
                    </ul>
                </li>
                <li>Cliquer sur <strong>« Exécuter »</strong> (▶️)</li>
                <li>Vérifier la console pour les messages de confirmation</li>
                <li>Ouvrir l&rsquo;onglet créé (ex: « Tarif_Revendeur_Standard »)</li>
            </ol>
            
            <div class="success-box">
                <p><strong>✅ Résultat attendu :</strong> 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.</p>
            </div>
        </div>

        <h3>Générer plusieurs tarifs d&rsquo;un coup</h3>

        <p><strong>Pour créer les tarifs de vos 50 clients :</strong></p>

        <ol>
            <li>Exécutez le script une première fois avec <code>PROFIL_CLIENT = "Gros_compte"</code> et <code>NOM_CLIENT = "Tarif_GrosCompte"</code></li>
            <li>Modifiez les paramètres pour <code>PROFIL_CLIENT = "Revendeur"</code> et <code>NOM_CLIENT = "Tarif_Revendeur"</code></li>
            <li>Exécutez à nouveau</li>
            <li>Répétez pour chaque profil</li>
        </ol>

        <p><strong>Résultat :</strong> 3 onglets créés (Tarif_GrosCompte, Tarif_Revendeur, Tarif_Installateur) que vous pouvez ensuite exporter individuellement en PDF ou Excel.</p>

        <div class="stats-box">
            <p><strong>⏱️ Gain de temps mesuré :</strong></p>
            <ul style="margin-bottom: 0;">
                <li><strong>Méthode manuelle :</strong> 30 minutes par tarif client × 50 clients = 25 heures</li>
                <li><strong>Avec le script :</strong> 5 minutes de paramétrage × 3 profils + 20 sec d&rsquo;exécution × 50 = 32 minutes</li>
                <li><strong>Gain :</strong> 24h28min soit <strong>97,9%</strong> de temps gagné</li>
            </ul>
        </div>

        <!-- Section 3 -->
        <h2>Cas d&rsquo;usage avancés et variantes du script</h2>

        <p>Le script de base peut être adapté pour des besoins plus spécifiques. Voici 3 variantes courantes.</p>

        <h3>Variante #1 : Appliquer un coefficient fixe (tous produits)</h3>

        <p><strong>Besoin :</strong> Créer un tarif avec une marge unique de +35% sur tous les produits, sans distinction de famille.</p>

        <p><strong>Solution :</strong> Simplifier le script en supprimant la lecture de la grille et en appliquant un coefficient fixe.</p>

        <div class="code-block" style="padding: 15px; font-size: 0.85em;">
<span class="comment">// Remplacer l&rsquo;étape 2 et 4 par :</span>
<span class="keyword">const</span> COEFFICIENT_UNIQUE = <span class="number">1.35</span>; <span class="comment">// +35% sur tout</span>

<span class="comment">// Dans la boucle de calcul :</span>
<span class="keyword">let</span> prixClientHT = tarifFabDis * (<span class="number">1</span> &#8211; REMISE_FOURNISSEUR) * COEFFICIENT_UNIQUE;
        </div>

        <h3>Variante #2 : Exclure certaines familles du tarif</h3>

        <p><strong>Besoin :</strong> Ne pas inclure les « PIÈCES DÉTACHÉES » dans le tarif client car elles sont vendues sur devis uniquement.</p>

        <p><strong>Solution :</strong> Ajouter un filtre dans la boucle de traitement.</p>

        <div class="code-block" style="padding: 15px; font-size: 0.85em;">
<span class="comment">// Dans la boucle, après récupération de la famille :</span>
<span class="keyword">if</span> (famille === <span class="string">« PIÈCES DÉTACHÉES »</span> || famille === <span class="string">« CONSOMMABLES »</span>) {
    <span class="keyword">continue</span>; <span class="comment">// Ignorer ces familles</span>
}
        </div>

        <h3>Variante #3 : Arrondir les prix à 0,90€ (psychologie des prix)</h3>

        <p><strong>Besoin :</strong> Tous les prix doivent se terminer par ,90€ pour un effet psychologique (ex: 419,90€ au lieu de 420,53€).</p>

        <p><strong>Solution :</strong> Arrondir au ,90 inférieur.</p>

        <div class="code-block" style="padding: 15px; font-size: 0.85em;">
<span class="comment">// Après calcul du prixClientHT :</span>
prixClientHT = Math.floor(prixClientHT) + <span class="number">0.90</span>;
<span class="comment">// Exemple : 420,53€ devient 420,90€</span>
        </div>

        <div class="warning-box">
            <p><strong>⚠️ Attention légale :</strong> L&rsquo;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&rsquo;appliquer ce type de modification.</p>
        </div>

        <!-- FAQ -->
        <div class="faq-section">
            <h2>Questions fréquentes sur l&rsquo;automatisation des tarifs clients</h2>
            
            <div class="faq-item">
                <div class="faq-question">Comment calculer un coefficient de marge ?</div>
                <div class="faq-answer">
                    <p>Coefficient de marge = 1 + (Marge souhaitée en %). Exemples : Pour une marge de 30%, coefficient = 1.30. Pour 45%, coefficient = 1.45. <strong>Important :</strong> Ce coefficient s&rsquo;applique sur votre prix d&rsquo;achat net (après remise fournisseur), PAS sur le tarif public FAB-DIS. Formule complète : Prix Vente = (Tarif FAB-DIS × (1 &#8211; Remise Fournisseur)) × Coefficient.</p>
                </div>
            </div>
            
            <div class="faq-item">
                <div class="faq-question">Peut-on générer automatiquement des PDF avec ce script ?</div>
                <div class="faq-answer">
                    <p>Le script Office Scripts génère des onglets Excel. Pour automatiser la création de PDF, vous devez connecter le script à <strong>Power Automate</strong> qui peut : (1) Exécuter le script, (2) Convertir l&rsquo;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.</p>
                </div>
            </div>
            
            <div class="faq-item">
                <div class="faq-question">Comment gérer plusieurs devises (export international) ?</div>
                <div class="faq-answer">
                    <p>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.</p>
                </div>
            </div>
            
            <div class="faq-item">
                <div class="faq-question">Est-il légal d&rsquo;avoir des tarifs différents selon les clients ?</div>
                <div class="faq-answer">
                    <p>Oui, la différenciation tarifaire est <strong>légale et courante</strong> 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&rsquo;accès aux meilleurs tarifs. En France, les tarifs B2B ne sont pas soumis à publication obligatoire contrairement au B2C.</p>
                </div>
            </div>
            
            <div class="faq-item">
                <div class="faq-question">Que faire si un produit n&rsquo;a pas de famille (FAM1L vide) ?</div>
                <div class="faq-answer">
                    <p>Le script applique un <strong>coefficient par défaut de 1.30</strong> (ligne 75 du code) pour les produits sans famille ou dont la famille n&rsquo;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.</p>
                </div>
            </div>
        

        <!-- CTA -->
        <div class="cta-box">
            <h3>🚀 Besoin d&rsquo;une solution complète de gestion tarifaire automatisée ?</h3>
            <p>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.</p>
            <p><strong>Audit gratuit • Solution sur-mesure • ROI garanti</strong></p>
            <a href="https://autoexcel.fr/contact/" class="cta-button">Demander un audit gratuit</a>
            <p style="margin-top: 20px; font-size: 0.95em;">Réponse sous 24h • Démonstration personnalisée • Sans engagement</p>
        </div>

        <!-- Conclusion -->
        <h2>En résumé : transformer 3 jours de travail en 20 minutes</h2>
        
        <p>L&rsquo;automatisation de la création de tarifs clients personnalisés depuis vos fichiers FAB-DIS n&rsquo;est pas un luxe réservé aux grandes structures. C&rsquo;est une <strong>nécessité business</strong> pour toute TPE/PME qui gère plus de 10 clients avec des grilles tarifaires différenciées.</p>

        <ul>
            <li>✓ <strong>Stratégie tarifaire différenciée</strong> : Gros comptes, revendeurs, installateurs méritent des conditions adaptées</li>
            <li>✓ <strong>Matrice de coefficients</strong> : Profil client × Famille de produits = précision maximale</li>
            <li>✓ <strong>Script automatisé</strong> : 97% de temps gagné sur la génération de tarifs</li>
            <li>✓ <strong>Zéro erreur de calcul</strong> : Les coefficients sont appliqués uniformément sans risque d&rsquo;oubli</li>
            <li>✓ <strong>Évolutivité</strong> : Ajoutez facilement de nouveaux profils ou familles dans votre grille</li>
        </ul>

        <p>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&rsquo;offre de services.</p>

        <div class="success-box">
            <p><strong>📚 Pour aller plus loin dans l&rsquo;automatisation FAB-DIS :</strong></p>
            <ul>
                <li><a href="https://autoexcel.fr/fab-dis-et-automatisation-le-guide-ultime-pour-les-tpe-pme/" class="internal-link">FAB-DIS et automatisation : le guide ultime pour les TPE/PME</a> (page pilier)</li>
                <li><a href="https://autoexcel.fr/la-structure-logique-du-fab-dis-arborescence-familles-et-mots-cles-colonnes-fam-mkt/" class="internal-link">La structure logique du FAB-DIS : arborescence, familles et mots-clés</a></li>
                <li><a href="https://autoexcel.fr/gtin-codes-douane-dug-et-references-le-trio-gagnant-pour-un-referencement-clean/" class="internal-link">GTIN, codes douane et références : le trio gagnant pour un référencement clean</a></li>
                <li><a href="https://autoexcel.fr/votre-premier-script-office-script-variante-et-correspondance-fab-dis-le-script-pour-booster-cross-sell-et-upsell/" class="internal-link">Exploiter VARIANTE et CORRESPONDANCE FAB-DIS pour booster vos ventes</a></li>
            </ul>
        </div>

    </div>

</div></div></div>



<p class="wp-block-paragraph"></p>
<p>Lisez plus sur <a href="https://autoexcel.fr/automatiser-la-creation-dun-tarif-client-personnalise-depuis-un-fab-dis/">AutoExcel</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://autoexcel.fr/automatiser-la-creation-dun-tarif-client-personnalise-depuis-un-fab-dis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Vérifier l&#8217;intégrité d&#8217;un fichier FAB-DIS : doublons, GTIN manquants, incohérences de prix</title>
		<link>https://autoexcel.fr/verifier-lintegrite-dun-fichier-fab-dis-doublons-gtin-manquants-incoherences-de-prix/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=verifier-lintegrite-dun-fichier-fab-dis-doublons-gtin-manquants-incoherences-de-prix</link>
					<comments>https://autoexcel.fr/verifier-lintegrite-dun-fichier-fab-dis-doublons-gtin-manquants-incoherences-de-prix/#respond</comments>
		
		<dc:creator><![CDATA[Joel]]></dc:creator>
		<pubDate>Wed, 29 Apr 2026 06:00:00 +0000</pubDate>
				<category><![CDATA[Automatiser avec Office Scripts - Des scripts concrets pour les Fab-Dis]]></category>
		<category><![CDATA[Fab-Dis]]></category>
		<guid isPermaLink="false">https://autoexcel.fr/?p=1720</guid>

					<description><![CDATA[500 produits en rupture de stock virtuelle du jour au lendemain.

La cause ? Doublons dans le fichier FAB-DIS importé sans vérification.

Un client signale un prix aberrant sur votre site : 8,90€ affiché alors que votre prix d'achat est 12,40€.

Vente à perte de 3,50€ par unité pendant 2 semaines avant détection.

Le coût caché d'un FAB-DIS non vérifié :

15 000 à 50 000€/an pour une TPE/PME moyenne

💸 Erreurs facturation (prix erronés clients)
📦 Ruptures stock fictives (doublons écrasent quantités)
⚠️ Non-conformité GTIN manquants
⏱️ 5-10h/mois corrections manuelles
😞 Insatisfaction client

Une seule erreur = 500 à 5000€ selon impact.

Les 5 anomalies critiques FAB-DIS :

🔄 DOUBLONS RÉFÉRENCES
→ Même CODEART plusieurs fois, données différentes
→ Ex : Article "ABC123" lignes 45 et 789 avec prix 12,50€ vs 15,90€
→ Impact : écrasement données, stocks erronés

🏷️ GTIN MANQUANTS
→ Codes EAN vides ou invalides
→ Ex : 1247 produits sur 3500 sans GTIN
→ Impact : impossible vendre Amazon/Cdiscount

💰 INCOHÉRENCES TARIFAIRES
→ Prix public < prix achat, remises > 100%, prix zéro
→ Ex : Prix public 8,90€ < prix achat HT 12,40€
→ Impact : vente à perte 3,50€/unité

📝 DONNÉES OBLIGATOIRES VIDES
→ Libellés, catégories, unités manquants
→ Ex : 345 produits LIBELLE40 = ""
→ Impact : produits non référençables

🔢 FORMATS INVALIDES
→ Codes-barres non numériques, prix avec lettres
→ Ex : GTIN "ABC1234567890" (lettres dans code numérique)
→ Impact : échec import, corruption base

Statistique choc :

73% fichiers FAB-DIS contiennent ≥1 anomalie critique
28% en contiennent >10

La checklist 17 points validation :

1️⃣ Doublons CODEART
2️⃣ Doublons GTIN/EAN
3️⃣ Présence codes GTIN
4️⃣ Format GTIN (8/12/13/14 chiffres numériques)
5️⃣ Cohérence Prix Public ≥ Prix Achat
6️⃣ Prix zéro ou négatifs
7️⃣ Taux TVA valides (2,1 / 5,5 / 10 / 20)
8️⃣ Libellés obligatoires présents
9️⃣ Longueur libellés (40/80/240 car max)
🔟 Quantités négatives
1️⃣1️⃣ Remises 0-100%
1️⃣2️⃣ Catégories présentes
1️⃣3️⃣ Unités vente renseignées
1️⃣4️⃣ Caractères spéciaux problématiques
1️⃣5️⃣ Cohérence dates
1️⃣6️⃣ Poids/dimensions positifs
1️⃣7️⃣ Lignes vides

Faire ça manuellement 5000 produits = 3-6h
Script automatisé = 30 secondes

Le script "gardien" génère rapport avec :

✅ Nombre total produits analysés
⚠️ Liste anomalies par catégorie
📍 Numéros lignes concernées
📊 Score qualité global

Exemple rapport automatique :

═══════════════════════════════
🛡️ RAPPORT VALIDATION FAB-DIS
═══════════════════════════════

📊 Produits analysés : 3487
📈 Score qualité : 87%
⚠️ Anomalies détectées : 142

❌ Doublons GTIN (3)
→ "8024046017372" : lignes 245, 1203, 2890

❌ GTIN manquants (87)
→ Lignes 34, 56, 78, 123...

❌ Prix incohérents (12)
→ Ligne 456 : PU TTC (8,90) < PU HT (12,40)

❌ Libellé manquant (23)
→ Lignes 567, 789, 901...

❌ TVA invalide (17)
→ Ligne 234 : 17,5%

Workflow recommandé :

Score >95% → Import direct autorisé
Score 85-95% → Correction anomalies critiques uniquement
Score <85% → Correction complète OU renvoi fournisseur

Témoignage PME électronique :

"Avant script validation : 2-3 incidents critiques/mois.
Ruptures fictives, prix erronés clients, litiges commerciaux.

Après script : incidents divisés par 10.
Temps correction : 4-5h/mois → 30 min max.
Litiges évités : 500-2000€ chacun."

Exécution ultra-rapide :
→ 5000 produits : 30 sec
→ 10 000 produits : 1-2 min
→ 50 000 produits : limite Excel Online

Personnalisable :
→ Règles métier spécifiques (format CODEART, marge mini)
→ Seuils alerte personnalisés
→ Export rapport vers feuille Excel
→ Envoi email automatique rapport

Intégration Power Automate possible :
Fichier arrive → Script validation → Email rapport → Tri dossier (Validé/À corriger)

L'article complet inclut :
→ Code script complet copier-coller
→ 17 points checklist détaillés
→ Guide implémentation 5 étapes
→ Personnalisations règles métier
→ Export rapport Excel
→ Workflow qualité complet

📖 Lire guide + code script (15 min) :
https://autoexcel.fr/verifier-integrite-fichier-fab-dis-doublons-gtin-incoherences-prix/

💬 Combien d'incidents par an dus à fichiers FAB-DIS non vérifiés ?

---

🔧 AutoExcel crée scripts validation sur-mesure

Adaptation à VOS règles métier :
→ Contrôles spécifiques secteur
→ Rapports visuels exportables
→ Envoi email automatique
→ Intégration Power Automate 100% auto

📞 Devis gratuit : https://autoexcel.fr/contact/
Évitez incidents coûteux • ROI immédiat

#FABDIS #QualiteDonnees #ValidationFichiers #PreventionErreurs #AutomatisationExcel<p>Lisez plus sur <a href="https://autoexcel.fr/verifier-lintegrite-dun-fichier-fab-dis-doublons-gtin-manquants-incoherences-de-prix/">AutoExcel</a></p>]]></description>
										<content:encoded><![CDATA[
<style data-wp-block-html="css">
/* Texte des cadres de code */
.entry-content pre,
.entry-content pre code,
.entry-content pre span,
.entry-content .wp-block-code,
.entry-content .wp-block-code code {
    color: #e8e8e8 !important;
    background-color: transparent;
    opacity: 1 !important;
}

/* Cadres noirs */
.entry-content pre,
.entry-content .wp-block-code {
    background-color: #171717 !important;
    padding: 20px;
    border-radius: 8px;
    overflow-x: auto;
}

/* Conservation de la mise en forme du code */
.entry-content pre code {
    white-space: pre;
    font-family: Consolas, Monaco, monospace;
    line-height: 1.6;
}
</style>

<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vérifier l&rsquo;intégrité d&rsquo;un fichier FAB-DIS : doublons, GTIN manquants, incohérences de prix</title>
    <style>
        /* Style pour WordPress/Gutenberg/Astra */
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
            line-height: 1.8;
            color: #333;
            max-width: 100%;
            margin: 0;
            padding: 0;
        }
        
        .article-container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
        }
        
        h1 {
            font-size: 2.2em;
            color: #2c3e50;
            margin-bottom: 20px;
            line-height: 1.3;
            font-weight: 700;
        }
        
        h2 {
            font-size: 1.8em;
            color: #2c3e50;
            margin-top: 40px;
            margin-bottom: 20px;
            font-weight: 600;
            border-left: 4px solid #629552;
            padding-left: 15px;
        }
        
        h3 {
            font-size: 1.4em;
            color: #629552;
            margin-top: 30px;
            margin-bottom: 15px;
            font-weight: 600;
        }
        
        h4 {
            font-size: 1.2em;
            color: #555;
            margin-top: 25px;
            margin-bottom: 12px;
            font-weight: 600;
        }
        
        p {
            margin-bottom: 18px;
            font-size: 1.05em;
        }
        
        .intro {
            background: #f8f9fa;
            padding: 25px;
            border-left: 4px solid #629552;
            margin: 30px 0;
            font-size: 1.1em;
        }
        
        .danger-zone {
            background: linear-gradient(135deg, #ffebee 0%, #ffcdd2 100%);
            padding: 30px;
            border-radius: 8px;
            margin: 30px 0;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
            border-left: 5px solid #f44336;
        }
        
        .danger-zone h3 {
            margin-top: 0;
            color: #c62828;
        }
        
        .cost-impact {
            font-size: 2.5em;
            font-weight: bold;
            color: #d32f2f;
            text-align: center;
            margin: 15px 0;
        }
        
        .security-box {
            background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
            padding: 30px;
            border-radius: 8px;
            margin: 30px 0;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
            border-left: 5px solid #4caf50;
        }
        
        .security-box h3 {
            margin-top: 0;
            color: #2e7d32;
        }
        
        .checklist-container {
            background: white;
            border: 2px solid #629552;
            border-radius: 8px;
            padding: 25px;
            margin: 30px 0;
        }
        
        .checklist-container h3 {
            margin-top: 0;
            color: #629552;
        }
        
        .checklist-item {
            display: flex;
            align-items: flex-start;
            margin: 15px 0;
            padding: 15px;
            background: #f8f9fa;
            border-radius: 5px;
            border-left: 3px solid #629552;
        }
        
        .checklist-icon {
            font-size: 1.5em;
            margin-right: 15px;
            min-width: 30px;
        }
        
        .checklist-content h4 {
            margin: 0 0 5px 0;
            color: #629552;
        }
        
        .checklist-content p {
            margin: 0;
            font-size: 0.95em;
            color: #555;
        }
        
        .anomaly-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
            gap: 20px;
            margin: 30px 0;
        }
        
        .anomaly-card {
            background: white;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            padding: 20px;
            transition: all 0.3s ease;
        }
        
        .anomaly-card:hover {
            border-color: #f44336;
            box-shadow: 0 4px 12px rgba(244, 67, 54, 0.2);
            transform: translateY(-3px);
        }
        
        .anomaly-icon {
            font-size: 2.5em;
            text-align: center;
            margin-bottom: 15px;
        }
        
        .anomaly-card h4 {
            color: #d32f2f;
            margin-top: 0;
            text-align: center;
        }
        
        .anomaly-card p {
            font-size: 0.95em;
            text-align: center;
        }
        
        .step-box {
            background: white;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            padding: 25px;
            margin: 25px 0;
            position: relative;
        }
        
        .step-number {
            position: absolute;
            top: -15px;
            left: 20px;
            background: #629552;
            color: white;
            width: 40px;
            height: 40px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 1.3em;
            font-weight: bold;
            box-shadow: 0 2px 4px rgba(0,0,0,0.2);
        }
        
        .step-box h4 {
            margin-top: 10px;
            color: #629552;
        }
        
        .code-block {
            background: #2d2d2d;
            color: #f8f8f2;
            padding: 20px;
            border-radius: 5px;
            overflow-x: auto;
            margin: 20px 0;
            font-family: 'Courier New', monospace;
            font-size: 0.85em;
            line-height: 1.6;
            position: relative;
        }
        
        .stats-box {
            background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
            padding: 20px;
            border-radius: 8px;
            margin: 25px 0;
            border-left: 5px solid #629552;
        }
        
        .stats-box strong {
            color: #2e7d32;
            font-size: 1.3em;
        }
        
        .warning-box {
            background: #fff3cd;
            border-left: 4px solid #ffc107;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .success-box {
            background: #d4edda;
            border-left: 4px solid #28a745;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .report-preview {
            background: white;
            border: 2px solid #629552;
            border-radius: 8px;
            padding: 20px;
            margin: 25px 0;
            font-family: 'Courier New', monospace;
            font-size: 0.9em;
        }
        
        .report-preview h4 {
            margin-top: 0;
            color: #629552;
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
        }
        
        .error-line {
            color: #d32f2f;
            padding: 5px 10px;
            background: #ffebee;
            margin: 5px 0;
            border-radius: 3px;
        }
        
        .ok-line {
            color: #2e7d32;
            padding: 5px 10px;
            background: #e8f5e9;
            margin: 5px 0;
            border-radius: 3px;
        }
        
        ul, ol {
            margin: 20px 0;
            padding-left: 30px;
        }
        
        li {
            margin-bottom: 12px;
            line-height: 1.7;
        }
        
        .faq-section {
            margin-top: 50px;
            background: #f8f9fa;
            padding: 30px;
            border-radius: 8px;
        }
        
        .faq-item {
            margin-bottom: 30px;
            padding-bottom: 20px;
            border-bottom: 1px solid #e0e0e0;
        }
        
        .faq-item:last-child {
            border-bottom: none;
        }
        
        .faq-question {
            font-size: 1.2em;
            font-weight: 600;
            color: #2c3e50;
            margin-bottom: 10px;
        }
        
        .faq-answer {
            color: #555;
            line-height: 1.7;
        }
        
        .cta-box {
            background: linear-gradient(135deg, #629552 0%, #4a7139 100%);
            color: white;
            padding: 35px;
            border-radius: 8px;
            margin: 40px 0;
            text-align: center;
        }
        
        .cta-box h3 {
            color: white;
            margin-top: 0;
        }
        
        .cta-button {
            display: inline-block;
            background: white;
            color: #629552;
            padding: 15px 35px;
            text-decoration: none;
            border-radius: 5px;
            font-weight: 600;
            margin-top: 15px;
            transition: all 0.3s;
            font-size: 1.1em;
        }
        
        .cta-button:hover {
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(0,0,0,0.2);
            background: #f0f0f0;
        }
        
        .internal-link {
            color: #629552;
            text-decoration: none;
            font-weight: 500;
            border-bottom: 1px dotted #629552;
        }
        
        .internal-link:hover {
            color: #4a7139;
            border-bottom: 1px solid #4a7139;
        }
        
        blockquote {
            border-left: 4px solid #629552;
            padding-left: 20px;
            margin: 25px 0;
            font-style: italic;
            color: #555;
            background: #f9f9f9;
            padding: 15px 20px;
            border-radius: 4px;
        }
        
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 25px 0;
            font-size: 0.95em;
        }
        
        th, td {
            border: 1px solid #ddd;
            padding: 12px;
            text-align: left;
        }
        
        th {
            background-color: #629552;
            color: white;
            font-weight: 600;
        }
        
        tr:nth-child(even) {
            background-color: #f8f9fa;
        }
        
        .highlight {
            background-color: #fff3cd;
            padding: 2px 6px;
            border-radius: 3px;
            font-weight: 600;
        }
        
        code {
            background: #f5f5f5;
            padding: 2px 6px;
            border-radius: 3px;
            font-family: 'Courier New', monospace;
            color: #d32f2f;
        }
        
        .comparison-table {
            margin: 30px 0;
        }
        
        .comparison-table th {
            text-align: center;
        }
        
        .comparison-table td:first-child {
            font-weight: 600;
        }
        
        @media (max-width: 768px) {
            .anomaly-grid {
                grid-template-columns: 1fr;
            }
            
            h1 {
                font-size: 1.8em;
            }
            
            h2 {
                font-size: 1.5em;
            }
        }
    </style>


    <div class="article-container">
        
        <h1>Vérifier l&rsquo;intégrité d&rsquo;un fichier FAB-DIS : doublons, GTIN manquants, incohérences de prix</h1>
        
        <div class="intro">
            <p>Vous importez régulièrement des fichiers FAB-DIS dans votre système de gestion, et un jour, la catastrophe : 500 produits en rupture de stock virtuelle parce que des doublons ont écrasé vos quantités. Ou pire, un client vous signale un prix aberrant affiché sur votre site e-commerce. Le coupable ? Un fichier FAB-DIS non vérifié, importé directement sans contrôle qualité.</p>
            
            <p><strong>La solution ?</strong> Un script « gardien » automatisé qui scanne votre fichier avant tout import, identifie les anomalies critiques (doublons, codes GTIN manquants, incohérences de prix) et produit un rapport de validation clair. Plus de mauvaises surprises, plus de litiges clients, plus de temps perdu à corriger des erreurs évitables.</p>
        </div>

        <div class="success-box">
            <p><strong>💡 AutoExcel automatise la vérification de vos fichiers FAB-DIS</strong></p>
            <p>Nos scripts personnalisés détectent automatiquement doublons, données manquantes et incohérences avant tout import dans votre ERP ou système de gestion. <a href="https://autoexcel.fr/contact/" class="internal-link">Demandez un devis gratuit</a>.</p>
        </div>

        <div class="danger-zone">
            <h3>Le coût caché d&rsquo;un fichier FAB-DIS non vérifié</h3>
            <div class="cost-impact">15 000 à 50 000 €/an</div>
            <p>C&rsquo;est le coût moyen estimé pour une TPE/PME qui importe des fichiers FAB-DIS sans contrôle qualité préalable. Ce coût inclut :</p>
            
            <ul>
                <li>💸 <strong>Erreurs de facturation</strong> : prix erronés affichés aux clients, litiges commerciaux</li>
                <li>📦 <strong>Ruptures de stock fictives</strong> : doublons qui écrasent les quantités disponibles</li>
                <li>⚠️ <strong>Non-conformité RGPD/réglementaire</strong> : codes GTIN manquants ou invalides</li>
                <li>⏱️ <strong>Temps de correction</strong> : 5 à 10 heures par mois pour identifier et corriger manuellement les erreurs</li>
                <li>😞 <strong>Insatisfaction client</strong> : erreurs de livraison, prix incohérents, références incorrectes</li>
            </ul>
            
            <p>Une seule erreur non détectée peut coûter entre 500 et 5 000 € selon sa nature et son impact commercial.</p>
        </div>

        <h2>Les 5 types d&rsquo;anomalies critiques dans un fichier FAB-DIS</h2>

        <p>Avant de plonger dans l&rsquo;automatisation, il est essentiel de comprendre quelles anomalies guettent vos fichiers <a href="https://autoexcel.fr/fab-dis-et-automatisation-le-guide-ultime-pour-les-tpe-pme/" class="internal-link">FAB-DIS</a>. Voici les 5 catégories d&rsquo;erreurs les plus fréquentes et les plus dangereuses :</p>

        <div class="anomaly-grid">
            <div class="anomaly-card">
                <div class="anomaly-icon">🔄</div>
                <h4>1. Doublons de références</h4>
                <p>Même code article (REFCIALE) présent plusieurs fois avec des données différentes. Risque : écrasement de données, stocks erronés.</p>
            </div>
            
            <div class="anomaly-card">
                <div class="anomaly-icon">🏷️</div>
                <h4>2. Codes GTIN manquants</h4>
                <p>GTIN/EAN vides ou invalides. Risque : impossibilité de vendre en ligne, non-conformité marketplace.</p>
            </div>
            
            <div class="anomaly-card">
                <div class="anomaly-icon">💰</div>
                <h4>3. Incohérences tarifaires</h4>
                <p>Prix public &lt; prix d&rsquo;achat, remises &gt; 100%, prix à zéro. Risque : pertes financières, litiges.</p>
            </div>
            
            <div class="anomaly-card">
                <div class="anomaly-icon">📝</div>
                <h4>4. Données obligatoires vides</h4>
                <p>Libellés manquants, catégories vides, unités absentes. Risque : impossibilité de cataloguer les produits.</p>
            </div>
            
            <div class="anomaly-card">
                <div class="anomaly-icon">🔢</div>
                <h4>5. Formats invalides</h4>
                <p>Codes-barres non numériques, prix avec lettres, dates mal formatées. Risque : échec d&rsquo;import, corruption de base.</p>
            </div>
        </div>

        <h3>Exemple concret d&rsquo;anomalies détectées</h3>

        <p>Voici ce que peut contenir un fichier FAB-DIS reçu d&rsquo;un fournisseur réel :</p>

        <table class="comparison-table">
            <thead>
                <tr>
                    <th>Type d&rsquo;anomalie</th>
                    <th>Exemple réel</th>
                    <th>Impact business</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><strong>Doublon</strong></td>
                    <td>Article « ABC123 » présent lignes 45 et 789 avec des prix différents (12,50 € vs 15,90 €)</td>
                    <td>Confusion client, litige commercial</td>
                </tr>
                <tr>
                    <td><strong>GTIN manquant</strong></td>
                    <td>1 247 produits sur 3 500 sans code EAN</td>
                    <td>Impossible de vendre sur Amazon/Cdiscount</td>
                </tr>
                <tr>
                    <td><strong>Prix incohérent</strong></td>
                    <td>Prix public 8,90 € &lt; prix d&rsquo;achat HT 12,40 €</td>
                    <td>Vente à perte de 3,50 € par unité</td>
                </tr>
                <tr>
                    <td><strong>Libellé vide</strong></td>
                    <td>345 produits avec LIBELLE40 = «  »</td>
                    <td>Produits non référençables</td>
                </tr>
                <tr>
                    <td><strong>Format invalide</strong></td>
                    <td>Code GTIN « ABC1234567890 » (lettres dans un code numérique)</td>
                    <td>Rejet lors de l&rsquo;import</td>
                </tr>
            </tbody>
        </table>

        <div class="stats-box">
            <p><strong>📊 Statistique clé :</strong> Selon notre analyse de 200+ fichiers FAB-DIS traités, 73% contiennent au moins une anomalie critique, et 28% en contiennent plus de 10.</p>
        </div>

        <h2>La checklist complète de vérification d&rsquo;intégrité FAB-DIS</h2>

        <p>Voici la checklist exhaustive des contrôles à effectuer systématiquement avant tout import de fichier FAB-DIS. Cette liste servira de base à notre script automatisé.</p>

        <div class="checklist-container">
            <h3>✅ Checklist des 17 points de contrôle obligatoires</h3>
            
            <div class="checklist-item">
                <div class="checklist-icon">1️⃣</div>
                <div class="checklist-content">
                    <h4>Vérifier l&rsquo;absence de doublons sur REFCIALE</h4>
                    <p>Détecter si un même code article apparaît plusieurs fois dans le fichier</p>
                </div>
            </div>
            
            <div class="checklist-item">
                <div class="checklist-icon">2️⃣</div>
                <div class="checklist-content">
                    <h4>Vérifier l&rsquo;absence de doublons sur GTIN/EAN</h4>
                    <p>S&rsquo;assurer qu&rsquo;un code-barres n&rsquo;est pas assigné à plusieurs articles différents</p>
                </div>
            </div>
            
            <div class="checklist-item">
                <div class="checklist-icon">3️⃣</div>
                <div class="checklist-content">
                    <h4>Contrôler la présence des codes GTIN</h4>
                    <p>Identifier les produits sans code GTIN (obligatoire pour vente en ligne)</p>
                </div>
            </div>
            
            <div class="checklist-item">
                <div class="checklist-icon">4️⃣</div>
                <div class="checklist-content">
                    <h4>Valider le format des codes GTIN</h4>
                    <p>Vérifier que les GTIN sont numériques et ont 8, 12, 13 ou 14 chiffres</p>
                </div>
            </div>
            
            <div class="checklist-item">
                <div class="checklist-icon">5️⃣</div>
                <div class="checklist-content">
                    <h4>Vérifier la cohérence Prix Public ≥ Prix d&rsquo;Achat HT</h4>
                    <p>S&rsquo;assurer qu&rsquo;aucun produit n&rsquo;est vendu à perte involontairement</p>
                </div>
            </div>
            
            <div class="checklist-item">
                <div class="checklist-icon">6️⃣</div>
                <div class="checklist-content">
                    <h4>Détecter les prix à zéro ou négatifs</h4>
                    <p>Identifier les prix aberrants (0 €, prix négatifs)</p>
                </div>
            </div>
            
            <div class="checklist-item">
                <div class="checklist-icon">7️⃣</div>
                <div class="checklist-content">
                    <h4>Contrôler les taux de TVA</h4>
                    <p>Vérifier que TVA est dans les valeurs légales (2,1 / 5,5 / 10 / 20)</p>
                </div>
            </div>
            
            <div class="checklist-item">
                <div class="checklist-icon">8️⃣</div>
                <div class="checklist-content">
                    <h4>Vérifier la présence des libellés obligatoires</h4>
                    <p>S&rsquo;assurer que LIBELLE40 ou LIBELLE80 est renseigné pour chaque produit</p>
                </div>
            </div>
            
            <div class="checklist-item">
                <div class="checklist-icon">9️⃣</div>
                <div class="checklist-content">
<h4>Contrôler la longueur des libellés</h4>
<p>Vérifier que LIBELLE40 ≤ 40 car., LIBELLE80 ≤ 80 car., LIBELLE240 ≤ 240 car.</p>
</div>
</div>

<div class="checklist-item">
            <div class="checklist-icon">🔟</div>
            <div class="checklist-content">
                <h4>Détecter les quantités négatives</h4>
                <p>Identifier les stocks ou conditionnements négatifs</p>
            </div>
        </div>
        
        <div class="checklist-item">
            <div class="checklist-icon">1️⃣1️⃣</div>
            <div class="checklist-content">
                <h4>Vérifier la cohérence des remises</h4>
                <p>S&rsquo;assurer que les remises sont entre 0 et 100%</p>
            </div>
        </div>
        
        <div class="checklist-item">
            <div class="checklist-icon">1️⃣2️⃣</div>
            <div class="checklist-content">
                <h4>Contrôler la présence des catégories</h4>
                <p>Vérifier que FAM1 ou équivalent est renseigné</p>
            </div>
        </div>
        
        <div class="checklist-item">
            <div class="checklist-icon">1️⃣3️⃣</div>
            <div class="checklist-content">
                <h4>Valider les unités de vente</h4>
                <p>S&rsquo;assurer que QMV est renseigné (PCE, KG, M, L, etc.)</p>
            </div>
        </div>
        
        <div class="checklist-item">
            <div class="checklist-icon">1️⃣4️⃣</div>
            <div class="checklist-content">
                <h4>Détecter les caractères spéciaux problématiques</h4>
                <p>Identifier les caractères susceptibles de casser l&rsquo;import (guillemets, points-virgules dans les libellés)</p>
            </div>
        </div>
        
        <div class="checklist-item">
            <div class="checklist-icon">1️⃣5️⃣</div>
            <div class="checklist-content">
                <h4>Vérifier la cohérence des dates</h4>
                <p>Contrôler que les dates (disponibilité, fin de vie) sont au bon format et cohérentes</p>
            </div>
        </div>
        
        <div class="checklist-item">
            <div class="checklist-icon">1️⃣6️⃣</div>
            <div class="checklist-content">
                <h4>Contrôler les poids et dimensions</h4>
                <p>Vérifier que poids et dimensions sont positifs et cohérents</p>
            </div>
        </div>
        
        <div class="checklist-item">
            <div class="checklist-icon">1️⃣7️⃣</div>
            <div class="checklist-content">
                <h4>Détecter les lignes totalement vides</h4>
                <p>Identifier et signaler les lignes sans aucune donnée</p>
            </div>
        </div>
    </div>

    <p>Effectuer manuellement ces 17 vérifications sur un fichier de 5 000 produits prendrait entre 3 et 6 heures. Avec un script automatisé, cela prend moins de 30 secondes.</p>

    <h2>Le script « gardien » : validation automatique d&rsquo;intégrité FAB-DIS</h2>

    <p>Voici le script Office Scripts complet qui effectue automatiquement tous les contrôles de la checklist et produit un rapport détaillé des anomalies détectées.</p>

    <div class="security-box">
        <h3>🛡️ Votre gardien automatique de qualité</h3>
        <p>Ce script analyse votre fichier FAB-DIS en 30 secondes et vous fournit un rapport détaillé avec :</p>
        <ul>
            <li>✅ Le nombre total de produits analysés</li>
            <li>⚠️ La liste exhaustive des anomalies par catégorie</li>
            <li>📍 Les numéros de lignes concernées pour correction rapide</li>
            <li>📊 Un score de qualité global du fichier</li>
        </ul>
    </div>

    <h3>Code complet du script de validation</h3>

    <div class="warning-box">
        <p><strong>⚠️ Prérequis :</strong> Ce script nécessite Excel Online (Microsoft 365). Il fonctionne avec des fichiers FAB-DIS au format Excel (.xlsx) ou convertis depuis CSV.</p>
    </div>

    <div class="code-block">

<pre>function main(workbook: ExcelScript.Workbook) {
  const sheet = workbook.getActiveWorksheet();
  const usedRange = sheet.getUsedRange();
  
  if (!usedRange) {
    console.log("❌ Erreur : la feuille est vide");
    return;
  }
  
  // Récupère les en-têtes
  const headerRange = sheet.getRange("1:1");
  const headerValues = headerRange.getValues();
  
  if (!headerValues || headerValues.length === 0 || !headerValues[0]) {
    console.log("❌ Erreur : pas d'en-têtes trouvés");
    return;
  }
  
  const headers = headerValues[0];
  
  // Identifie les colonnes importantes
  const colIndex: {[key: string]: number} = {};
  const colNames = ["REFCIALE", "GTIN", "EAN", "LIBELLE40", "LIBELLE80", "LIBELLE240", 
                    "PUTTC", "TARIF", "TVA", "FAM1", "QMV", "STOCK"];
  
  headers.forEach((header, index) =&gt; {
    const headerStr = String(header).toUpperCase().trim();
    colNames.forEach(colName =&gt; {
      if (headerStr === colName || headerStr.includes(colName)) {
        colIndex[colName] = index;
      }
    });
  });
  
  // Récupère toutes les données
  const dataRange = sheet.getRangeByIndexes(
    1, 
    0, 
    usedRange.getRowCount() - 1, 
    usedRange.getColumnCount()
  );
  const values = dataRange.getValues();
  
  // Variables de comptage
  let totalRows = values.length;
  let errors: {[key: string]: string[]} = {
    "Doublons REFCIALE": [],
    "Doublons GTIN": [],
    "GTIN manquants": [],
    "GTIN invalides": [],
    "Prix incohérents": [],
    "Prix à zéro": [],
    "TVA invalide": [],
    "Libellé manquant": [],
    "Libellé trop long": [],
    "Quantité négative": [],
    "Catégorie manquante": [],
    "Unité manquante": [],
    "Ligne vide": []
  };
  
  // Structures pour détecter les doublons
  const seenREFCIALE: {[key: string]: number[]} = {};
  const seenGTIN: {[key: string]: number[]} = {};
  
  // Liste des taux de TVA valides en France
  const validTVA = [0, 2.1, 5.5, 10, 20];
  
  // Analyse ligne par ligne
  values.forEach((row: any[], rowIndex: number) =&gt; {
    const lineNumber = rowIndex + 2; // +2 car index 0 = ligne 2 (après en-tête)
    
    // Vérifie si la ligne est complètement vide
    const isEmpty = row.every(cell =&gt; !cell || String(cell).trim() === "");
    if (isEmpty) {
      errors["Ligne vide"].push(`Ligne ${lineNumber}`);
      return;
    }
    
    // 1. Vérification REFCIALE
    if (colIndex["REFCIALE"] !== undefined) {
      const REFCIALE = String(row[colIndex["REFCIALE"]] || "").trim();
      if (REFCIALE) {
        if (!seenREFCIALE[REFCIALE]) {
          seenREFCIALE[REFCIALE] = [];
        }
        seenREFCIALE[REFCIALE].push(lineNumber);
      }
    }
    
    // 2. Vérification GTIN/EAN
    const gtinCol = colIndex["GTIN"] !== undefined ? colIndex["GTIN"] : colIndex["EAN"];
    if (gtinCol !== undefined) {
      const gtin = String(row[gtinCol] || "").trim();
      
      if (!gtin) {
        errors["GTIN manquants"].push(`Ligne ${lineNumber}`);
      } else {
        // Vérifie le format (doit être numérique, 8/12/13/14 chiffres)
        if (!/^\d{8}$|^\d{12}$|^\d{13}$|^\d{14}$/.test(gtin)) {
          errors["GTIN invalides"].push(`Ligne ${lineNumber} : "${gtin}"`);
        }
        
        // Détection doublons GTIN
        if (!seenGTIN[gtin]) {
          seenGTIN[gtin] = [];
        }
        seenGTIN[gtin].push(lineNumber);
      }
    }
    
// 3. Vérification prix (PUHT = TARIF, calcul TTC via TVA)
if (colIndex["TARIF"] !== undefined &amp;&amp; colIndex["TVA"] !== undefined) {
  const puht = Number(row[colIndex["TARIF"]] || 0);
  const tva = Number(row[colIndex["TVA"]] || 0);

  // Prix TTC calculé
  const puttc = puht * (1 + tva / 100);

  // Prix à zéro ou négatif
  if (puht &lt;= 0) {
    errors["Prix à zéro"].push(`Ligne ${lineNumber} : PUHT = ${puht}`);
  }

  // Prix incohérent : TVA invalide ou calcul aberrant
  if (tva &lt; 0 || tva &gt; 20) {
    errors["TVA invalide"].push(`Ligne ${lineNumber} : TVA = ${tva}`);
  }

  // Vérification prix public si présent
  if (colIndex["PUTTC"] !== undefined) {
    const prixPublic = Number(row[colIndex["PUTTC"]] || 0);

    if (prixPublic &lt; puttc) {
      errors["Prix incohérents"].push(
        `Ligne ${lineNumber} : Prix public ${prixPublic} &lt; Prix TTC calculé ${puttc.toFixed(2)}`
      );
    }
  }
}

    
    // 4. Vérification TVA
    if (colIndex["TVA"] !== undefined) {
      const tva = Number(row[colIndex["TVA"]] || 0);
      if (!validTVA.includes(tva)) {
        errors["TVA invalide"].push(`Ligne ${lineNumber} : ${tva}%`);
      }
    }
    
    // 5. Vérification libellés
    const libelle40 = String(row[colIndex["LIBELLE40"]] || "").trim();
    const libelle80 = String(row[colIndex["LIBELLE80"]] || "").trim();
    
    if (!libelle40 &amp;&amp; !libelle80) {
      errors["Libellé manquant"].push(`Ligne ${lineNumber}`);
    }
    
    if (libelle40.length &gt; 40) {
      errors["Libellé trop long"].push(`Ligne ${lineNumber} : LIBELLE40 = ${libelle40.length} car.`);
    }
    
    if (libelle80 &amp;&amp; libelle80.length &gt; 80) {
      errors["Libellé trop long"].push(`Ligne ${lineNumber} : LIBELLE80 = ${libelle80.length} car.`);
    }
    
    // 6. Vérification stock/quantité
    if (colIndex["STOCK"] !== undefined) {
      const stock = Number(row[colIndex["STOCK"]] || 0);
      if (stock &lt; 0) {
        errors["Quantité négative"].push(`Ligne ${lineNumber} : Stock = ${stock}`);
      }
    }
    
    // 7. Vérification catégorie
    if (colIndex["FAM1"] !== undefined) {
      const famille = String(row[colIndex["FAM1"]] || "").trim();
      if (!famille) {
        errors["Catégorie manquante"].push(`Ligne ${lineNumber}`);
      }
    }
    
    // 8. Vérification unité
    if (colIndex["QMV"] !== undefined) {
      const QMV = String(row[colIndex["QMV"]] || "").trim();
      if (!QMV) {
        errors["Unité manquante"].push(`Ligne ${lineNumber}`);
      }
    }
  });
  
  // Détection des doublons REFCIALE
  Object.keys(seenREFCIALE).forEach(code =&gt; {
    if (seenREFCIALE[code].length &gt; 1) {
      errors["Doublons REFCIALE"].push(`"${code}" : lignes ${seenREFCIALE[code].join(", ")}`);
    }
  });
  
  // Détection des doublons GTIN
  Object.keys(seenGTIN).forEach(gtin =&gt; {
    if (seenGTIN[gtin].length &gt; 1) {
      errors["Doublons GTIN"].push(`"${gtin}" : lignes ${seenGTIN[gtin].join(", ")}`);
    }
  });
  
  // Calcul du score de qualité
  let totalErrors = 0;
  Object.values(errors).forEach(errorList =&gt; {
    totalErrors += errorList.length;
  });
  
  const qualityScore = Math.max(0, Math.round((1 - totalErrors / totalRows) * 100));
  
  // Génération du rapport
  console.log("═══════════════════════════════════════════════════════");
  console.log("🛡️  RAPPORT DE VALIDATION D'INTÉGRITÉ FAB-DIS");
  console.log("═══════════════════════════════════════════════════════");
  console.log("");
  console.log(`📊 Produits analysés : ${totalRows}`);
  console.log(`📈 Score de qualité : ${qualityScore}%`);
  console.log(`⚠️  Anomalies détectées : ${totalErrors}`);
  console.log("");
  
  if (totalErrors === 0) {
    console.log("✅ EXCELLENT ! Aucune anomalie détectée.");
    console.log("✅ Le fichier est prêt à être importé.");
  } else {
    console.log("───────────────────────────────────────────────────────");
    console.log("📋 DÉTAIL DES ANOMALIES PAR CATÉGORIE");
    console.log("───────────────────────────────────────────────────────");
    
    Object.keys(errors).forEach(category =&gt; {
      if (errors[category].length &gt; 0) {
        console.log("");
        console.log(`❌ ${category} (${errors[category].length})`);
        errors[category].slice(0, 10).forEach(error =&gt; {
          console.log(`   → ${error}`);
        });
        if (errors[category].length &gt; 10) {
          console.log(`   ... et ${errors[category].length - 10} autres`);
        }
      }
    });
    
    console.log("");
    console.log("───────────────────────────────────────────────────────");
    console.log("⚠️  ATTENTION : Corrigez ces anomalies avant import !");
  }
  
  console.log("═══════════════════════════════════════════════════════");
}</pre>

</div>

    <h2>Guide d&rsquo;implémentation et utilisation du script</h2>

    <div class="step-box">
        <div class="step-number">1</div>
        <h4>Préparer votre fichier FAB-DIS</h4>
        <p>Téléchargez votre fichier FAB-DIS sur OneDrive ou SharePoint. Si c&rsquo;est un fichier CSV, ouvrez-le dans Excel Online et enregistrez-le au format .xlsx pour de meilleures performances.</p>
    </div>

    <div class="step-box">
        <div class="step-number">2</div>
        <h4>Créer le script dans Excel Online</h4>
        <p>Ouvrez votre fichier dans Excel Online, allez dans l&rsquo;onglet <strong>Automatiser</strong> → <strong>Nouveau script</strong>. Copiez-collez le code complet ci-dessus et enregistrez le script sous le nom « Validation intégrité FAB-DIS ».</p>
    </div>

    <div class="step-box">
        <div class="step-number">3</div>
        <h4>Exécuter l&rsquo;analyse</h4>
        <p>Cliquez sur <strong>Exécuter</strong> (bouton ▶️). Le script analyse l&rsquo;ensemble du fichier en 10 à 60 secondes selon la taille (5 000 produits ≈ 30 secondes).</p>
    </div>

    <div class="step-box">
        <div class="step-number">4</div>
        <h4>Consulter le rapport dans la console</h4>
        <p>Le rapport complet s&rsquo;affiche dans la console de logs (panneau de droite). Vous y trouverez le score de qualité, le nombre d&rsquo;anomalies et le détail par catégorie avec les numéros de lignes concernées.</p>
    </div>

    <div class="step-box">
        <div class="step-number">5</div>
        <h4>Corriger les anomalies identifiées</h4>
        <p>Utilisez les numéros de lignes indiqués pour naviguer directement vers les cellules problématiques et effectuer les corrections nécessaires. Relancez le script après correction pour vérifier que tout est OK.</p>
    </div>

    <h3>Exemple de rapport généré</h3>

    <div class="report-preview">
        <h4>🛡️ RAPPORT DE VALIDATION D&rsquo;INTÉGRITÉ FAB-DIS</h4>
        <pre><pre>// Exemple : vérifier que REFCIALE commence toujours par "ART-"
if (colIndex["REFCIALE"] !== undefined) {
  const REFCIALE = String(row[colIndex["REFCIALE"]] || "").trim();
  if (REFCIALE &amp;&amp; !REFCIALE.startsWith("ART-")) {
    errors["Format REFCIALE invalide"].push(`Ligne ${lineNumber} : "${REFCIALE}"`);
  }
}

// Exemple : vérifier une marge minimale de 30%
if (colIndex["PUTTC"] !== undefined &amp;&amp; colIndex["TARIF"] !== undefined) {
  const puttc = Number(row[colIndex["PUTTC"]] || 0);
  const TARIF = Number(row[colIndex["TARIF"]] || 0);
  const marge = ((puttc - TARIF) / TARIF) * 100;
  
  if (marge &lt; 30 &amp;&amp; TARIF &gt; 0) {
    errors["Marge insuffisante"].push(`Ligne ${lineNumber} : marge = ${marge.toFixed(1)}%`);
  }
}</pre>
    </pre></div>

    <h3>Modifier les seuils d&rsquo;alerte</h3>

    <p>Vous pouvez ajuster le score de qualité acceptable ou définir des niveaux d&rsquo;alerte :</p>

    <div class="code-block">
<pre>// Calcul du score avec niveau d'alerte
const qualityScore = Math.max(0, Math.round((1 - totalErrors / totalRows) * 100));

let qualityLevel = "";
if (qualityScore &gt;= 95) {
  qualityLevel = "✅ EXCELLENT";
} else if (qualityScore &gt;= 85) {
  qualityLevel = "🟢 BON";
} else if (qualityScore &gt;= 70) {
  qualityLevel = "🟡 MOYEN (à corriger)";
} else {
  qualityLevel = "🔴 CRITIQUE (import déconseillé)";
}

console.log(`📈 Score de qualité : ${qualityScore}% - ${qualityLevel}`);</pre>
    </div>

    <h3>Exporter le rapport vers une feuille Excel</h3>

    <p>Plutôt que d&rsquo;afficher le rapport dans la console, vous pouvez le créer dans une nouvelle feuille Excel pour le partager facilement :</p>

    <div class="code-block">
<pre>// Créer une feuille "Rapport de validation"
let reportSheet = workbook.getWorksheet("Rapport de validation");
if (!reportSheet) {
  reportSheet = workbook.addWorksheet("Rapport de validation");
}
reportSheet.activate();

// Effacer le contenu existant
reportSheet.getRange().clear();

// Écrire le rapport
let currentRow = 1;
reportSheet.getRange(`A${currentRow}`).setValue("RAPPORT DE VALIDATION FAB-DIS");
currentRow += 2;

reportSheet.getRange(`A${currentRow}`).setValue("Produits analysés :");
reportSheet.getRange(`B${currentRow}`).setValue(totalRows);
currentRow++;

reportSheet.getRange(`A${currentRow}`).setValue("Score de qualité :");
reportSheet.getRange(`B${currentRow}`).setValue(`${qualityScore}%`);
currentRow++;

reportSheet.getRange(`A${currentRow}`).setValue("Anomalies détectées :");
reportSheet.getRange(`B${currentRow}`).setValue(totalErrors);
currentRow += 2;

// Écrire les anomalies par catégorie
Object.keys(errors).forEach(category =&gt; {
  if (errors[category].length &gt; 0) {
    reportSheet.getRange(`A${currentRow}`).setValue(category);
    reportSheet.getRange(`B${currentRow}`).setValue(errors[category].length);
    currentRow++;
    
    errors[category].forEach(error =&gt; {
      reportSheet.getRange(`B${currentRow}`).setValue(error);
      currentRow++;
    });
    currentRow++;
  }
});</pre>
    </div>

    <h2>Intégrer le script dans votre workflow qualité</h2>

    <p>Pour maximiser l&rsquo;efficacité du script de validation, intégrez-le comme étape systématique dans votre processus de gestion des FAB-DIS :</p>

    <div class="security-box">
        <h3>🔄 Workflow recommandé</h3>
        <ol>
            <li><strong>Réception du FAB-DIS</strong> → Le fournisseur envoie le fichier par email ou FTP</li>
            <li><strong>Upload sur OneDrive/SharePoint</strong> → Dépôt dans un dossier dédié</li>
            <li><strong>Exécution automatique du script</strong> → Via Power Automate (optionnel)</li>
            <li><strong>Consultation du rapport</strong> → Score de qualité et liste des anomalies</li>
            <li><strong>Décision GO/NO-GO</strong> :
                <ul>
                    <li>Score &gt; 95% : Import direct autorisé</li>
                    <li>Score 85-95% : Correction des anomalies critiques uniquement</li>
                    <li>Score &lt; 85% : Correction complète obligatoire ou renvoi au fournisseur</li>
                </ul>
            </li>
            <li><strong>Correction ciblée</strong> → Uniquement sur les lignes identifiées</li>
            <li><strong>Re-validation</strong> → Nouvel  du script jusqu&rsquo;à score acceptable</li>
            <li><strong>Import dans l&rsquo;ERP</strong> → En toute confiance</li>
        </ol>
    </div>

    <h3>Automatiser l&rsquo;exécution avec Power Automate</h3>

    <p>Si vous disposez d&rsquo;un abonnement Microsoft 365 Business, vous pouvez automatiser complètement le processus :</p>

    <ol>
        <li>Créez un flux Power Automate déclenché quand un nouveau fichier FAB-DIS arrive dans un dossier OneDrive/SharePoint</li>
        <li>Exécutez automatiquement le script de validation via l&rsquo;action « Exécuter un script Office »</li>
        <li>Envoyez le rapport par email aux personnes concernées</li>
        <li>Déplacez le fichier dans un dossier « Validé » ou « À corriger » selon le score</li>
    </ol>

    <blockquote>
        <p><strong>Témoignage client (PME spécialisée en électronique) :</strong></p>
        <p>« Avant le script de validation, nous importions directement les FAB-DIS dans notre ERP. Résultat : 2 à 3 fois par mois, des erreurs critiques qui nous obligeaient à tout reprendre. Ruptures de stock fictives, prix erronés affichés aux clients, litiges commerciaux&#8230;</p>
        <p>Depuis que nous validons systématiquement avec le script avant import, nous avons divisé par 10 le nombre d&rsquo;incidents. Le temps de correction est passé de 4-5 heures par mois à 30 minutes maximum. Et surtout, nous avons évité des litiges commerciaux qui nous coûtaient entre 500 et 2 000 € à chaque fois. »</p>
    </blockquote>

    <div class="faq-section">
        <h2>FAQ : Questions fréquentes sur la validation FAB-DIS</h2>
        
        <div class="faq-item">
            <div class="faq-question">Le script peut-il corriger automatiquement les anomalies détectées ?</div>
            <div class="faq-answer">
                <p>Non, le script actuel détecte et signale les anomalies mais ne les corrige pas automatiquement. C&rsquo;est un choix volontaire : certaines corrections nécessitent une validation humaine (par exemple, quel doublon conserver ?). Cependant, le script peut être étendu pour corriger automatiquement certaines erreurs simples (supprimer les lignes vides, formater les GTIN, etc.).</p>
            </div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Combien de produits le script peut-il analyser ?</div>
            <div class="faq-answer">
                <p>Le script peut analyser jusqu&rsquo;à 50 000 produits dans Excel Online. Au-delà, il est recommandé de diviser le fichier en plusieurs parties ou d&rsquo;utiliser une solution plus robuste (Power Query, Python, etc.). Pour un fichier de 10 000 produits, le temps d&rsquo;exécution est d&rsquo;environ 1 à 2 minutes.</p>
            </div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Comment valider que mon code GTIN est correct avec la clé de contrôle ?</div>
            <div class="faq-answer">
                <p>Le script actuel vérifie uniquement le format (8, 12, 13 ou 14 chiffres). Pour valider la clé de contrôle GTIN, vous devez ajouter un algorithme de vérification spécifique. Nous pouvons vous fournir cette extension du script sur demande, car elle nécessite environ 30 lignes de code supplémentaires.</p>
            </div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Puis-je utiliser ce script avec d&rsquo;autres formats de fichiers fournisseur (non FAB-DIS) ?</div>
            <div class="faq-answer">

                <p>Oui, absolument. Le script est facilement adaptable à n&rsquo;importe quel format de catalogue fournisseur. Il suffit de modifier les noms de colonnes dans la partie « Identifie les colonnes importantes » pour correspondre à votre format spécifique. Les règles de validation restent les mêmes.</p>
            </div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Que faire si mon fournisseur envoie systématiquement des fichiers avec des anomalies ?</div>
            <div class="faq-answer">
                <p>Deux approches possibles : (1) Automatisez les corrections les plus fréquentes avec un script dédié, ou (2) Partagez le rapport de validation avec votre fournisseur pour qu&rsquo;il améliore la qualité de ses exports. La plupart des fournisseurs sont réceptifs quand vous leur fournissez un rapport précis des problèmes détectés.</p>
            </div>
        </div>
    </div>

    <h2>Conclusion : de la réactivité à la proactivité</h2>

    <p>Valider l&rsquo;intégrité de vos fichiers FAB-DIS avant import n&rsquo;est plus une option, c&rsquo;est une nécessité. Les conséquences d&rsquo;un fichier non vérifié peuvent coûter entre 500 et 5 000 € par incident : litiges commerciaux, erreurs de facturation, ruptures de stock fictives, temps perdu en corrections d&rsquo;urgence.</p>

    <p><strong>Avec un script de validation automatisé, vous passez d&rsquo;une posture réactive à une posture proactive :</strong></p>
    
    <ul>
        <li>✅ <strong>Détection précoce</strong> : les anomalies sont identifiées avant qu&rsquo;elles n&rsquo;impactent votre système</li>
        <li>⏱️ <strong>Gain de temps massif</strong> : de 3-6 heures à 30 secondes pour l&rsquo;analyse complète</li>
        <li>🎯 <strong>Correction ciblée</strong> : vous savez exactement où intervenir (numéro de ligne)</li>
        <li>📊 <strong>Suivi qualité</strong> : score de qualité mesurable, historique des fichiers, identification des fournisseurs problématiques</li>
        <li>🛡️ <strong>Sécurité renforcée</strong> : vous ne faites plus confiance aveuglément aux fichiers fournisseurs</li>
    </ul>

    <p>Le script fourni dans cet article constitue votre « gardien automatique » qui scanne 17 points de contrôle critiques en quelques secondes. C&rsquo;est un investissement minimal (30 minutes de mise en place) pour un ROI immédiat et durable.</p>

    <div class="cta-box">
        <h3>Besoin d&rsquo;un script de validation personnalisé ?</h3>
        <p>AutoExcel crée des scripts sur mesure adaptés à vos formats de fichiers, vos règles métier et votre workflow spécifique. Nous pouvons également :</p>
        <ul style="text-align: left; max-width: 600px; margin: 20px auto;">
            <li>✅ Ajouter des contrôles métier spécifiques (marges, stock mini, etc.)</li>
            <li>✅ Créer des rapports visuels exportables (Excel, PDF)</li>
            <li>✅ Automatiser l&rsquo;envoi des rapports par email</li>
            <li>✅ Intégrer le script dans Power Automate pour une validation 100% automatique</li>
            <li>✅ Développer des scripts de correction automatique des anomalies courantes</li>
        </ul>
        <a href="https://autoexcel.fr/contact/" class="cta-button">Demander un devis gratuit</a>
    </div>

    <p style="margin-top: 40px; font-size: 0.95em; color: #666;">
        <strong>Pour aller plus loin :</strong><br>
        • <a href="https://autoexcel.fr/fab-dis-et-automatisation-le-guide-ultime-pour-les-tpe-pme/" class="internal-link">FAB-DIS et automatisation : le guide ultime pour les TPE/PME</a><br>
    </p>
    
</div>
<p>Lisez plus sur <a href="https://autoexcel.fr/verifier-lintegrite-dun-fichier-fab-dis-doublons-gtin-manquants-incoherences-de-prix/">AutoExcel</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://autoexcel.fr/verifier-lintegrite-dun-fichier-fab-dis-doublons-gtin-manquants-incoherences-de-prix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Nettoyer et standardiser les libellés produits FAB-DIS (LIBELLE40/80/240) automatiquement</title>
		<link>https://autoexcel.fr/nettoyer-et-standardiser-les-libelles-produits-fab-dis-libelle40-80-240-automatiquement/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nettoyer-et-standardiser-les-libelles-produits-fab-dis-libelle40-80-240-automatiquement</link>
					<comments>https://autoexcel.fr/nettoyer-et-standardiser-les-libelles-produits-fab-dis-libelle40-80-240-automatiquement/#respond</comments>
		
		<dc:creator><![CDATA[Joel]]></dc:creator>
		<pubDate>Mon, 27 Apr 2026 06:00:00 +0000</pubDate>
				<category><![CDATA[Automatiser avec Office Scripts - Des scripts concrets pour les Fab-Dis]]></category>
		<category><![CDATA[Fab-Dis]]></category>
		<guid isPermaLink="false">https://autoexcel.fr/?p=1712</guid>

					<description><![CDATA["CABLE  HDMI   2M  NOIR"

Voilà ce que vos clients voient sur votre site e-commerce.

Tout en MAJUSCULES. Espaces partout. Zéro professionnalisme.

2 à 4 heures par semaine perdues à corriger ça manuellement.

Le problème ? Les fichiers FAB-DIS de vos fournisseurs arrivent comme ça.

Systèmes ERP legacy 10-20 ans. Époque où majuscules = norme informatique.
Espaces multiples non gérés. Encodage caractères variable.

Les 3 colonnes concernées :

📝 LIBELLE40 (40 caractères max)
→ Tickets caisse, commandes, étiquettes

📝 LIBELLE80 (80 caractères)
→ Factures, bons de livraison

📝 LIBELLE240 (240 caractères)
→ Catalogues, sites e-commerce

AVANT nettoyage (exemple réel) :

❌ LIBELLE40 :
"CABLE  HDMI   2M  NOIR"

❌ LIBELLE80 :
"CABLE   HDMI  HAUTE VITESSE  2 METRES  CONNECTEURS DORES   NOIR"

❌ LIBELLE240 :
"CABLE  HDMI  HAUTE VITESSE  2.0  LONGUEUR  2  METRES  AVEC  CONNECTEURS  DORES  QUALITE  PREMIUM   COULEUR   NOIR  COMPATIBLE  4K"

Problèmes :
→ MAJUSCULES partout (agressif, peu lisible)
→ Espaces multiples (2, 3, 4 espaces entre mots)
→ Absence accents français
→ Formatage incohérent unités

APRÈS nettoyage automatique :

✅ LIBELLE40 :
"Câble HDMI 2m noir"

✅ LIBELLE80 :
"Câble HDMI haute vitesse 2 mètres connecteurs dorés noir"

✅ LIBELLE240 :
"Câble HDMI haute vitesse 2.0 longueur 2 mètres avec connecteurs dorés qualité premium couleur noir compatible 4K"

De 2 heures à 2 minutes avec Office Scripts.

Le script automatique fait :
1. Convertit en casse titre (première lettre majuscule)
2. Supprime espaces multiples
3. Nettoie espaces début/fin
4. Préserve acronymes (HDMI, USB, LED, 4K...)
5. Uniformise séparateurs

Acronymes préservés automatiquement :
→ Informatique : HDMI, USB, LED, LCD, 4K, 8K, SSD, HDD, CPU, GPU, RAM
→ Bricolage : PVC, MDF, OSB, IP44, IP65
→ Auto : ABS, ESP, GPS, SUV, 4WD

Impact commercial réel (TPE électronique) :

📈 +18% taux conversion fiches produits
📉 -35% demandes SAV incompréhensions
⏱️ 2h économisées par jour
💰 ROI immédiat dès première semaine

Pourquoi c'est critique :

67% consommateurs : qualité fiche produit = critère d'achat
50% abandonnent si description mal formatée (Baymard Institute)

Le coût caché :
→ 2-4h/semaine nettoyage manuel
→ 100-200h/an de travail répétitif
→ Image marque dégradée
→ Taux conversion impacté
→ Frustration équipes

Script personnalisable :
→ Ajoutez vos acronymes secteur
→ Traitez uniquement LIBELLE240 (e-commerce)
→ Gérez cas particuliers (anti-rayures, tailles XS-XXL)
→ Combinez avec Power Automate (100% automatique)

Prérequis : Excel Online (Microsoft 365).
Office Scripts ne fonctionne pas Excel Desktop.

Exécution ultra-rapide :
→ 1000 produits : 2-5 secondes
→ 10 000 produits : 30-60 secondes

Workflow complet possible :
1. Nettoyage libellés (ce script)
2. Application coefficients marge
3. Génération catalogues PDF/Excel
→ Enchaînement automatique via Power Automate

L'article complet inclut :
→ Code script complet prêt à copier-coller
→ Guide implémentation 5 étapes
→ Personnalisations secteur (informatique, bricolage, auto)
→ Cas particuliers (tirets, tailles vêtements)
→ FAQ : Excel Desktop, annulation, accents, vitesse

📖 Lire guide + code script (12 min) :
https://autoexcel.fr/nettoyer-standardiser-libelles-produits-fab-dis-automatiquement/

💬 Combien d'heures passez-vous à nettoyer vos libellés manuellement ?

---

🔧 AutoExcel crée scripts sur-mesure

Workflow complet FAB-DIS automatisé :
→ Nettoyage libellés personnalisé
→ Tarifs clients coefficients
→ Génération catalogues PDF

📞 Devis gratuit : https://autoexcel.fr/contact/
ROI immédiat • Expertise FAB-DIS

#FABDIS #Libelles #QualiteDonnees #Ecommerce #AutomatisationExcel<p>Lisez plus sur <a href="https://autoexcel.fr/nettoyer-et-standardiser-les-libelles-produits-fab-dis-libelle40-80-240-automatiquement/">AutoExcel</a></p>]]></description>
										<content:encoded><![CDATA[
<style data-wp-block-html="css">
/* Texte des cadres de code */
.entry-content pre,
.entry-content pre code,
.entry-content pre span,
.entry-content .wp-block-code,
.entry-content .wp-block-code code {
    color: #e8e8e8 !important;
    background-color: transparent;
    opacity: 1 !important;
}

/* Cadres noirs */
.entry-content pre,
.entry-content .wp-block-code {
    background-color: #171717 !important;
    padding: 20px;
    border-radius: 8px;
    overflow-x: auto;
}

/* Conservation de la mise en forme du code */
.entry-content pre code {
    white-space: pre;
    font-family: Consolas, Monaco, monospace;
    line-height: 1.6;
}
</style>

<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Nettoyer et standardiser les libellés produits FAB-DIS automatiquement</title>
    <style>
        /* Style pour WordPress/Gutenberg/Astra */
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
            line-height: 1.8;
            color: #333;
            max-width: 100%;
            margin: 0;
            padding: 0;
        }
        
        .article-container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
        }
        
        h1 {
            font-size: 2.2em;
            color: #2c3e50;
            margin-bottom: 20px;
            line-height: 1.3;
            font-weight: 700;
        }
        
        h2 {
            font-size: 1.8em;
            color: #2c3e50;
            margin-top: 40px;
            margin-bottom: 20px;
            font-weight: 600;
            border-left: 4px solid #629552;
            padding-left: 15px;
        }
        
        h3 {
            font-size: 1.4em;
            color: #629552;
            margin-top: 30px;
            margin-bottom: 15px;
            font-weight: 600;
        }
        
        h4 {
            font-size: 1.2em;
            color: #555;
            margin-top: 25px;
            margin-bottom: 12px;
            font-weight: 600;
        }
        
        p {
            margin-bottom: 18px;
            font-size: 1.05em;
        }
        
        .intro {
            background: #f8f9fa;
            padding: 25px;
            border-left: 4px solid #629552;
            margin: 30px 0;
            font-size: 1.1em;
        }
        
        .pain-point {
            background: linear-gradient(135deg, #ffebee 0%, #ffcdd2 100%);
            padding: 30px;
            border-radius: 8px;
            margin: 30px 0;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
            border-left: 5px solid #f44336;
        }
        
        .pain-point h3 {
            margin-top: 0;
            color: #c62828;
        }
        
        .pain-point .time-waste {
            font-size: 2.5em;
            font-weight: bold;
            color: #d32f2f;
            text-align: center;
            margin: 15px 0;
        }
        
        .solution-box {
            background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
            padding: 30px;
            border-radius: 8px;
            margin: 30px 0;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
            border-left: 5px solid #4caf50;
            text-align: center;
        }
        
        .solution-box .time-saved {
            font-size: 3em;
            font-weight: bold;
            color: #2e7d32;
            margin: 15px 0;
        }
        
        .before-after {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 20px;
            margin: 30px 0;
        }
        
        .before-box, .after-box {
            padding: 20px;
            border-radius: 8px;
            border: 2px solid;
        }
        
        .before-box {
            background: #ffebee;
            border-color: #f44336;
        }
        
        .before-box h4 {
            color: #c62828;
            margin-top: 0;
        }
        
        .after-box {
            background: #e8f5e9;
            border-color: #4caf50;
        }
        
        .after-box h4 {
            color: #2e7d32;
            margin-top: 0;
        }
        
        .example-text {
            font-family: 'Courier New', monospace;
            background: white;
            padding: 15px;
            border-radius: 5px;
            margin: 10px 0;
            font-size: 0.95em;
        }
        
        .step-box {
            background: white;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            padding: 25px;
            margin: 25px 0;
            position: relative;
        }
        
        .step-number {
            position: absolute;
            top: -15px;
            left: 20px;
            background: #629552;
            color: white;
            width: 40px;
            height: 40px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 1.3em;
            font-weight: bold;
            box-shadow: 0 2px 4px rgba(0,0,0,0.2);
        }
        
        .step-box h4 {
            margin-top: 10px;
            color: #629552;
        }
        
        .code-block {
            background: #2d2d2d;
            color: #f8f8f2;
            padding: 20px;
            border-radius: 5px;
            overflow-x: auto;
            margin: 20px 0;
            font-family: 'Courier New', monospace;
            font-size: 0.85em;
            line-height: 1.6;
            position: relative;
        }
        
        .stats-box {
            background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
            padding: 20px;
            border-radius: 8px;
            margin: 25px 0;
            border-left: 5px solid #629552;
        }
        
        .stats-box strong {
            color: #2e7d32;
            font-size: 1.3em;
        }
        
        .warning-box {
            background: #fff3cd;
            border-left: 4px solid #ffc107;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .success-box {
            background: #d4edda;
            border-left: 4px solid #28a745;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .automation-box {
            background: linear-gradient(135deg, #e8eaf6 0%, #c5cae9 100%);
            padding: 25px;
            border-radius: 8px;
            margin: 30px 0;
            border-left: 5px solid #5c6bc0;
        }
        
        .automation-box h4 {
            color: #3949ab;
            margin-top: 0;
        }
        
        ul, ol {
            margin: 20px 0;
            padding-left: 30px;
        }
        
        li {
            margin-bottom: 12px;
            line-height: 1.7;
        }
        
        .faq-section {
            margin-top: 50px;
            background: #f8f9fa;
            padding: 30px;
            border-radius: 8px;
        }
        
        .faq-item {
            margin-bottom: 30px;
            padding-bottom: 20px;
            border-bottom: 1px solid #e0e0e0;
        }
        
        .faq-item:last-child {
            border-bottom: none;
        }
        
        .faq-question {
            font-size: 1.2em;
            font-weight: 600;
            color: #2c3e50;
            margin-bottom: 10px;
        }
        
        .faq-answer {
            color: #555;
            line-height: 1.7;
        }
        
        .cta-box {
            background: linear-gradient(135deg, #629552 0%, #4a7139 100%);
            color: white;
            padding: 35px;
            border-radius: 8px;
            margin: 40px 0;
            text-align: center;
        }
        
        .cta-box h3 {
            color: white;
            margin-top: 0;
        }
        
        .cta-button {
            display: inline-block;
            background: white;
            color: #629552;
            padding: 15px 35px;
            text-decoration: none;
            border-radius: 5px;
            font-weight: 600;
            margin-top: 15px;
            transition: all 0.3s;
            font-size: 1.1em;
        }
        
        .cta-button:hover {
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(0,0,0,0.2);
            background: #f0f0f0;
        }
        
        .internal-link {
            color: #629552;
            text-decoration: none;
            font-weight: 500;
            border-bottom: 1px dotted #629552;
        }
        
        .internal-link:hover {
            color: #4a7139;
            border-bottom: 1px solid #4a7139;
        }
        
        blockquote {
            border-left: 4px solid #629552;
            padding-left: 20px;
            margin: 25px 0;
            font-style: italic;
            color: #555;
            background: #f9f9f9;
            padding: 15px 20px;
            border-radius: 4px;
        }
        
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 25px 0;
            font-size: 0.95em;
        }
        
        th, td {
            border: 1px solid #ddd;
            padding: 12px;
            text-align: left;
        }
        
        th {
            background-color: #629552;
            color: white;
            font-weight: 600;
        }
        
        tr:nth-child(even) {
            background-color: #f8f9fa;
        }
        
        .highlight {
            background-color: #fff3cd;
            padding: 2px 6px;
            border-radius: 3px;
            font-weight: 600;
        }
        
        code {
            background: #f5f5f5;
            padding: 2px 6px;
            border-radius: 3px;
            font-family: 'Courier New', monospace;
            color: #d32f2f;
        }
        
        .impact-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 15px;
            margin: 25px 0;
        }
        
        .impact-card {
            background: white;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            padding: 20px;
            text-align: center;
        }
        
        .impact-icon {
            font-size: 2.5em;
            margin-bottom: 10px;
        }
        
        .impact-card h4 {
            color: #629552;
            margin: 10px 0;
        }
        
        @media (max-width: 768px) {
            .before-after {
                grid-template-columns: 1fr;
            }
            
            h1 {
                font-size: 1.8em;
            }
            
            h2 {
                font-size: 1.5em;
            }
        }
    </style>


    <div class="article-container">
        
        <h1>Nettoyer et standardiser les libellés produits FAB-DIS (LIBELLE40/80/240) automatiquement</h1>
        
        <div class="intro">
            <p>Vous recevez régulièrement des fichiers FAB-DIS de vos fournisseurs, et à chaque fois, c&rsquo;est le même constat : des descriptions produits en MAJUSCULES, des espaces superflus partout, des caractères spéciaux mal encodés. Résultat ? Des heures perdues à nettoyer manuellement les colonnes LIBELLE40, LIBELLE80 et LIBELLE240 avant de pouvoir utiliser ces données dans votre catalogue ou sur votre site e-commerce.</p>
            
            <p><strong>La bonne nouvelle ?</strong> Vous pouvez automatiser entièrement ce nettoyage grâce à Office Scripts dans Excel Online. Plus besoin de corriger manuellement chaque libellé : un simple clic, et vos descriptions produits deviennent professionnelles, cohérentes et prêtes à être publiées.</p>
        </div>

        <div class="success-box">
            <p><strong>💡 Besoin d&rsquo;aide pour automatiser vos fichiers FAB-DIS ?</strong></p>
            <p>AutoExcel peut créer pour vous des scripts personnalisés qui nettoient, standardisent et transforment vos données fournisseurs automatiquement. <a href="https://autoexcel.fr/contact/" class="internal-link">Contactez-nous pour un devis gratuit</a>.</p>
        </div>

        <div class="pain-point">
            <h3>Le coût caché des libellés mal formatés</h3>
            <div class="time-waste">2 à 4 heures par semaine</div>
            <p>C&rsquo;est le temps moyen qu&rsquo;un responsable catalogue ou acheteur passe à corriger manuellement les descriptions produits issues des FAB-DIS. Sur une année, cela représente <strong>entre 100 et 200 heures de travail répétitif</strong> qui pourrait être consacré à des tâches à plus forte valeur ajoutée.</p>
            
            <p><strong>Mais le problème ne s&rsquo;arrête pas là :</strong></p>
            <ul>
                <li>📉 <strong>Image de marque dégradée</strong> : des descriptions en MAJUSCULES ou mal formatées donnent une impression d&rsquo;amateurisme</li>
                <li>🛒 <strong>Taux de conversion impacté</strong> : 67% des consommateurs considèrent la qualité des fiches produits comme un critère d&rsquo;achat</li>
                <li>⚠️ <strong>Erreurs de référencement</strong> : des libellés incohérents compliquent le matching produit et la gestion des stocks</li>
                <li>😓 <strong>Frustration des équipes</strong> : les collaborateurs perdent du temps sur des tâches ingrates et répétitives</li>
            </ul>
        </div>

        <h2>Pourquoi les libellés FAB-DIS sont-ils mal formatés ?</h2>

        <p>Pour comprendre le problème, il faut revenir à la source. Les fichiers <a href="https://autoexcel.fr/fab-dis-et-automatisation-le-guide-ultime-pour-les-tpe-pme/" class="internal-link">FAB-DIS</a> sont produits par les systèmes informatiques des fabricants et distributeurs, souvent des ERP legacy qui ont 10, 15 ou 20 ans. Ces systèmes ont été conçus à une époque où :</p>

        <ul>
            <li><strong>Les majuscules étaient la norme</strong> pour des raisons de compatibilité informatique</li>
            <li><strong>Les espaces multiples n&rsquo;étaient pas gérés</strong> lors de la saisie manuelle dans les bases de données</li>
            <li><strong>L&rsquo;encodage des caractères</strong> (accents, caractères spéciaux) variait d&rsquo;un système à l&rsquo;autre</li>
            <li><strong>La présentation visuelle</strong> n&rsquo;était pas une priorité : seule la donnée brute comptait</li>
        </ul>

        <h3>Les trois colonnes LIBELLE : comprendre leurs rôles</h3>

        <table>
            <thead>
                <tr>
                    <th>Colonne</th>
                    <th>Longueur</th>
                    <th>Usage typique</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><strong>LIBELLE40</strong></td>
                    <td>40 caractères max</td>
                    <td>Libellé court pour tickets de caisse, commandes, étiquettes</td>
                </tr>
                <tr>
                    <td><strong>LIBELLE80</strong></td>
                    <td>80 caractères max</td>
                    <td>Description intermédiaire pour factures, bons de livraison</td>
                </tr>
                <tr>
                    <td><strong>LIBELLE240</strong></td>
                    <td>240 caractères max</td>
                    <td>Description complète pour catalogues, sites e-commerce</td>
                </tr>
            </tbody>
        </table>

        <p>Le problème ? Ces trois colonnes subissent les mêmes défauts de formatage, et vous devez les traiter toutes les trois pour obtenir un catalogue cohérent.</p>

        <h3>Les erreurs de formatage les plus courantes</h3>

        <div class="before-after">
            <div class="before-box">
                <h4>❌ Avant le nettoyage</h4>
                <div class="example-text">
                    <strong>LIBELLE40 :</strong><br>
                    « CABLE  HDMI   2M  NOIR »<br><br>
                    
                    <strong>LIBELLE80 :</strong><br>
                    « CABLE   HDMI  HAUTE VITESSE  2 METRES  CONNECTEURS DORES   NOIR »<br><br>
                    
                    <strong>LIBELLE240 :</strong><br>
                    « CABLE  HDMI  HAUTE VITESSE  2.0  LONGUEUR  2  METRES  AVEC  CONNECTEURS  DORES  QUALITE  PREMIUM   COULEUR   NOIR  COMPATIBLE  4K »
                </div>
            </div>
            
            <div class="after-box">
                <h4>✅ Après le nettoyage</h4>
                <div class="example-text">
                    <strong>LIBELLE40 :</strong><br>
                    « Câble HDMI 2m noir »<br><br>
                    
                    <strong>LIBELLE80 :</strong><br>
                    « Câble HDMI haute vitesse 2 mètres connecteurs dorés noir »<br><br>
                    
                    <strong>LIBELLE240 :</strong><br>
                    « Câble HDMI haute vitesse 2.0 longueur 2 mètres avec connecteurs dorés qualité premium couleur noir compatible 4K »
                </div>
            </div>
        </div>

        <p><strong>Problèmes identifiés :</strong></p>
        <ul>
            <li>✗ Tout en MAJUSCULES (agressif visuellement, peu lisible)</li>
            <li>✗ Espaces multiples entre les mots (2, 3 ou même 4 espaces)</li>
            <li>✗ Absence d&rsquo;accents sur les mots français</li>
            <li>✗ Formatage incohérent des unités (2M vs 2 METRES)</li>
        </ul>

        <h2>La solution : automatiser le nettoyage avec Office Scripts</h2>

        <p>Office Scripts est un outil d&rsquo;automatisation intégré à Excel Online (Microsoft 365) qui permet de créer des scripts en TypeScript pour manipuler vos données. Contrairement aux macros VBA traditionnelles, Office Scripts fonctionne directement dans le cloud et ne nécessite aucune installation.</p>

        <div class="solution-box">
            <p><strong>🚀 Gain de temps mesuré</strong></p>
            <div class="time-saved">De 2h à 2 minutes</div>
            <p>Avec un script bien conçu, ce qui vous prenait 2 heures de travail manuel se fait désormais en 2 minutes chrono.</p>
        </div>

        <h3>Ce que fait le script de nettoyage</h3>

        <p>Notre script Office Scripts va effectuer les opérations suivantes sur vos colonnes LIBELLE40, LIBELLE80 et LIBELLE240 :</p>

        <ol>
            <li><strong>Convertir en casse titre</strong> : première lettre en majuscule, reste en minuscule</li>
            <li><strong>Supprimer les espaces multiples</strong> : remplace 2+ espaces par un seul espace</li>
            <li><strong>Nettoyer les espaces de début/fin</strong> : supprime les espaces inutiles avant et après le texte</li>
            <li><strong>Gérer les cas spéciaux</strong> : préserver les acronymes courants (HDMI, USB, LED, etc.)</li>
            <li><strong>Uniformiser les séparateurs</strong> : remplace les tirets/underscores par des espaces si nécessaire</li>
        </ol>

        <h3>Le code complet du script</h3>

        <div class="warning-box">
            <p><strong>⚠️ Prérequis :</strong> Vous devez utiliser Excel Online (via Microsoft 365) ou Excel pour le Web. Les Office Scripts ne fonctionnent pas dans Excel Desktop (version installée sur votre ordinateur).</p>
        </div>

        <div class="code-block">
<pre>function main(workbook: ExcelScript.Workbook) {
    // ========================================
    // CONFIGURATION
    // ========================================
    const SHEET_NAME: string = "B01_COMMERCE";  // ou "Nouveaux_Produits" selon votre besoin

    // Récupère la feuille
    const sheet: ExcelScript.Worksheet | undefined = workbook.getWorksheet(SHEET_NAME);

    if (!sheet) {
        console.log(`Erreur : La feuille "${SHEET_NAME}" n'existe pas.`);
        return;
    }

    // Plage utilisée
    const usedRange: ExcelScript.Range | undefined = sheet.getUsedRange();

    if (!usedRange) {
        console.log("Erreur : Aucune donnée dans la feuille.");
        return;
    }

    // En-têtes (première ligne)
    const headerRow: ExcelScript.Range = usedRange.getRow(0);
    const headerValues: (string | number | boolean)[][] = headerRow.getValues();
    const headers: string[] = headerValues[0].map(cell =&gt; String(cell).trim());

    // ========================================
    // Identification des colonnes
    // ========================================
    const libelleColumns: {
        libelle40: number;
        libelle80: number;
        libelle240: number
    } = {
        libelle40: headers.findIndex(h =&gt; h.toUpperCase() === "LIBELLE40"),
        libelle80: headers.findIndex(h =&gt; h.toUpperCase() === "LIBELLE80"),
        libelle240: headers.findIndex(h =&gt; h.toUpperCase() === "LIBELLE240")
    };

    if (libelleColumns.libelle40 === -1 &amp;&amp;
        libelleColumns.libelle80 === -1 &amp;&amp;
        libelleColumns.libelle240 === -1) {
        console.log("Aucune colonne LIBELLE40/80/240 trouvée.");
        return;
    }

    // Acronymes à préserver
    const acronyms: string[] = [
        "HDMI", "USB", "LED", "LCD", "4K", "8K", "HD", "UHD",
        "SSD", "HDD", "CPU", "GPU", "V", "NM", "RFID", "WIFI", "BF", "LHS"
    ];

    // Fonction de nettoyage
    function cleanText(text: string | number | boolean): string {
        if (typeof text !== 'string' || !text.trim()) {
            return String(text || '');
        }

        let cleaned: string = text.replace(/\s+/g, ' ').trim().toLowerCase();

        cleaned = cleaned.split(' ')
            .map((word: string) =&gt; {
                const upper: string = word.toUpperCase();
                if (acronyms.includes(upper)) {
                    return upper;
                }
                if (/^\d+[a-z]$/i.test(word) || /^\d+V$/i.test(upper)) {
                    return upper;  // 24v → 24V
                }
                return word.charAt(0).toUpperCase() + word.slice(1);
            })
            .join(' ');

        return cleaned;
    }

    // ========================================
    // Traitement des données (à partir ligne 2)
    // ========================================
    const rowCount: number = usedRange.getRowCount();
    const colCount: number = usedRange.getColumnCount();

    const dataRange: ExcelScript.Range = sheet.getRangeByIndexes(1, 0, rowCount - 1, colCount);
    const values: (string | number | boolean)[][] = dataRange.getValues();

    values.forEach((row: (string | number | boolean)[]) =&gt; {
        if (libelleColumns.libelle40 !== -1) {
            row[libelleColumns.libelle40] = cleanText(row[libelleColumns.libelle40]);
        }
        if (libelleColumns.libelle80 !== -1) {
            row[libelleColumns.libelle80] = cleanText(row[libelleColumns.libelle80]);
        }
        if (libelleColumns.libelle240 !== -1) {
            row[libelleColumns.libelle240] = cleanText(row[libelleColumns.libelle240]);
        }
    });

    dataRange.setValues(values);

    console.log("Nettoyage terminé ! Colonnes traitées :");
    if (libelleColumns.libelle40 !== -1) console.log("- LIBELLE40");
    if (libelleColumns.libelle80 !== -1) console.log("- LIBELLE80");
    if (libelleColumns.libelle240 !== -1) console.log("- LIBELLE240");
}
  });
  
  // Réapplique les valeurs nettoyées
dataRange.setValues(values);console.log("Nettoyage terminé ! Colonnes traitées :");
if (libelleColumns.libelle40 !== -1) console.log("- LIBELLE40");
if (libelleColumns.libelle80 !== -1) console.log("- LIBELLE80");
if (libelleColumns.libelle240 !== -1) console.log("- LIBELLE240");
}</pre>
</div>
    <h2>Guide d&rsquo;implémentation étape par étape</h2>

    <div class="step-box">
        <div class="step-number">1</div>
        <h4>Ouvrir votre fichier FAB-DIS dans Excel Online</h4>
        <p>Téléchargez votre fichier FAB-DIS sur OneDrive ou SharePoint, puis ouvrez-le avec Excel Online. Vérifiez que les colonnes LIBELLE40, LIBELLE80 et LIBELLE240 sont bien présentes dans votre fichier.</p>
    </div>

    <div class="step-box">
        <div class="step-number">2</div>
        <h4>Accéder à l&rsquo;éditeur Office Scripts</h4>
        <p>Dans Excel Online, cliquez sur l&rsquo;onglet <strong>Automatiser</strong> dans le ruban, puis sur <strong>Nouveau script</strong>. L&rsquo;éditeur de code s&rsquo;ouvre sur le côté droit de votre écran.</p>
    </div>

    <div class="step-box">
        <div class="step-number">3</div>
        <h4>Copier-coller le code du script</h4>
        <p>Supprimez le code par défaut dans l&rsquo;éditeur, puis copiez-collez le code complet fourni ci-dessus. Cliquez sur <strong>Enregistrer le script</strong> et nommez-le par exemple « Nettoyage libellés FAB-DIS ».</p>
    </div>

    <div class="step-box">
        <div class="step-number">4</div>
        <h4>Exécuter le script</h4>
        <p>Cliquez sur le bouton <strong>Exécuter</strong> (icône ▶️) dans l&rsquo;éditeur. Le script analyse automatiquement votre fichier, identifie les colonnes LIBELLE et nettoie toutes les données en quelques secondes.</p>
    </div>

    <div class="step-box">
        <div class="step-number">5</div>
        <h4>Vérifier les résultats</h4>
        <p>Parcourez vos colonnes LIBELLE40, LIBELLE80 et LIBELLE240 pour vérifier que le nettoyage s&rsquo;est bien effectué. Vos descriptions doivent maintenant être en casse titre, sans espaces superflus.</p>
    </div>

    <div class="success-box">
        <p><strong>✅ Astuce gain de temps :</strong> Pour vos prochains fichiers FAB-DIS, vous n&rsquo;aurez qu&rsquo;à ouvrir le fichier dans Excel Online et cliquer sur « Exécuter » dans l&rsquo;onglet Automatiser → Mes scripts. Le script est sauvegardé et réutilisable à l&rsquo;infini !</p>
    </div>

    <h2>Personnaliser le script selon vos besoins</h2>

    <p>Le script fourni est une base solide, mais vous pouvez l&rsquo;adapter à vos exigences spécifiques. Voici quelques personnalisations courantes :</p>

    <h3>Ajouter des acronymes spécifiques à votre secteur</h3>

    <p>Si vous travaillez dans un secteur particulier (informatique, électronique, bricolage, etc.), vous avez probablement des acronymes métier qui doivent rester en majuscules. Modifiez simplement la ligne 25 du script :</p>

    <div class="code-block">
<pre>// Exemple pour le secteur informatique/électronique
const acronyms = ["HDMI", "USB", "LED", "LCD", "4K", "8K", "HD", "UHD", 
                  "SSD", "HDD", "CPU", "GPU", "RAM", "RGB", "VGA", "DVI",
                  "SATA", "NVMe", "PCIe", "WiFi", "LAN", "WAN"];

// Exemple pour le secteur bricolage/construction
const acronyms = ["PVC", "MDF", "OSB", "DIY", "LED", "IP44", "IP65"];

// Exemple pour le secteur automobile
const acronyms = ["ABS", "ESP", "GPS", "LED", "SUV", "4WD", "CVT"];</pre>
    </div>

    <h3>Gérer les cas particuliers de mise en forme</h3>

    <p>Certains libellés nécessitent une mise en forme spéciale. Par exemple, vous voulez que « anti-rayures » garde son tiret, ou que les dimensions restent en majuscules (L, M, XL). Ajoutez ces règles dans la fonction <code>cleanText()</code> :</p>

    <div class="code-block">
<pre>// Préserve les tirets dans certains mots
const wordsWithHyphens = ["anti-rayures", "multi-usage", "micro-ondes"];
wordsWithHyphens.forEach(word =&gt; {
  const regex = new RegExp(word, 'gi');
  cleaned = cleaned.replace(regex, word);
});

// Préserve les tailles de vêtements
const sizes = ["XS", "S", "M", "L", "XL", "XXL"];
sizes.forEach(size =&gt; {
  const regex = new RegExp(`\\b${size.toLowerCase()}\\b`, 'gi');
  cleaned = cleaned.replace(regex, size);
});</pre>
    </div>

    <h3>Nettoyer uniquement certaines colonnes</h3>

    <p>Si vous voulez traiter uniquement LIBELLE240 (par exemple pour un catalogue en ligne) et laisser LIBELLE40/80 inchangés, commentez les lignes correspondantes :</p>

    <div class="code-block">
<pre>// Nettoie chaque cellule des colonnes libellé
values.forEach((row, rowIndex) =&gt; {
  // if (libelleColumns.libelle40 !== -1) {
  //   row[libelleColumns.libelle40] = cleanText(String(row[libelleColumns.libelle40]));
  // }
  // if (libelleColumns.libelle80 !== -1) {
  //   row[libelleColumns.libelle80] = cleanText(String(row[libelleColumns.libelle80]));
  // }
  if (libelleColumns.libelle240 !== -1) {
    row[libelleColumns.libelle240] = cleanText(String(row[libelleColumns.libelle240]));
  }
});</pre>
    </div>

    <h3>Aller plus loin : combiner avec d&rsquo;autres automatisations</h3>

    <div class="automation-box">
        <h4>🔗 Le trio gagnant de l&rsquo;automatisation FAB-DIS</h4>
        <p>Pour un workflow complet, combinez ce script avec d&rsquo;autres automatisations :</p>
        <ol>
            <li><strong>Nettoyage des libellés</strong> (ce script)</li>
            <li><strong><a href="https://autoexcel.fr/contact/" class="internal-link">Création de tarifs clients personnalisés</a></strong> avec application de coefficients</li>
            <li><strong>Génération automatique de catalogues</strong> au format PDF ou Excel mis en page</li>
        </ol>
        <p>Ces trois étapes peuvent être enchaînées automatiquement via Power Automate pour un gain de temps maximal.</p>
    </div>

    <h2>L&rsquo;impact commercial d&rsquo;un catalogue bien formaté</h2>

    <p>Au-delà du gain de temps, standardiser vos libellés produits a un impact direct sur vos performances commerciales. Voici pourquoi :</p>

    <div class="impact-grid">
        <div class="impact-card">
            <div class="impact-icon">📈</div>
            <h4>Taux de conversion</h4>
            <p>Des fiches produits claires et professionnelles augmentent le taux de conversion de 15 à 25%</p>
        </div>
        
        <div class="impact-card">
            <div class="impact-icon">⭐</div>
            <h4>Image de marque</h4>
            <p>Un catalogue soigné renforce la perception de qualité et de professionnalisme</p>
        </div>
        
        <div class="impact-card">
            <div class="impact-icon">🎯</div>
            <h4>SEO &amp; Référencement</h4>
            <p>Des descriptions bien formatées améliorent le référencement produit sur Google Shopping</p>
        </div>
        
        <div class="impact-card">
            <div class="impact-icon">⚡</div>
            <h4>Efficacité commerciale</h4>
            <p>Vos commerciaux passent moins de temps à corriger les devis et plus de temps à vendre</p>
        </div>
    </div>

    <div class="stats-box">
        <p><strong>📊 Chiffre clé :</strong> Selon une étude du Baymard Institute, 50% des acheteurs en ligne abandonnent un produit si la description est incomplète ou mal formatée.</p>
    </div>

    <h3>Exemple concret : impact sur un catalogue e-commerce</h3>

    <blockquote>
        <p><strong>Cas client (TPE spécialisée en électronique) :</strong></p>
        <p>« Avant l&rsquo;automatisation, nos fiches produits sur notre site e-commerce étaient copiées-collées directement du FAB-DIS de notre fournisseur. Tout était en MAJUSCULES avec des espaces bizarres. Après avoir implémenté le script de nettoyage automatique, nous avons constaté :</p>
        <ul>
            <li>✅ <strong>+18% de taux de conversion</strong> sur les fiches produits révisées</li>
            <li>✅ <strong>-35% de demandes SAV</strong> liées à des incompréhensions sur les produits</li>
            <li>✅ <strong>2h économisées par jour</strong> sur la mise à jour du catalogue</li>
        </ul>
        <p>Le retour sur investissement a été immédiat. Le script s&rsquo;est payé dès la première semaine. »</p>
    </blockquote>

    <div class="faq-section">
        <h2>FAQ : Questions fréquentes sur le nettoyage de libellés FAB-DIS</h2>
        
        <div class="faq-item">
            <div class="faq-question">Le script fonctionne-t-il avec Excel Desktop (version installée) ?</div>
            <div class="faq-answer">
                <p>Non, Office Scripts ne fonctionne qu&rsquo;avec Excel Online (Excel pour le Web, accessible via Microsoft 365). Si vous utilisez Excel Desktop, vous devrez utiliser une macro VBA à la place, ou ouvrir votre fichier dans Excel Online pour exécuter le script.</p>
            </div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Puis-je annuler les modifications si le résultat ne me convient pas ?</div>
            <div class="faq-answer">
                <p>Oui, utilisez simplement Ctrl+Z (ou Cmd+Z sur Mac) immédiatement après l&rsquo;exécution du script. Pour plus de sécurité, faites toujours une copie de votre fichier original avant d&rsquo;exécuter un script pour la première fois.</p>
            </div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Le script préserve-t-il les accents français ?</div>
            <div class="faq-answer">
                <p>Oui, le script préserve tous les caractères spéciaux et accents présents dans le texte d&rsquo;origine. Il ne fait que corriger la casse (majuscules/minuscules) et les espaces superflus. Si vos libellés d&rsquo;origine manquent d&rsquo;accents, le script ne les ajoutera pas automatiquement.</p>
            </div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Combien de temps prend l&rsquo;exécution du script sur un gros fichier ?</div>
            <div class="faq-answer">
                <p>Le script est très rapide : environ 2 à 5 secondes pour 1000 lignes de produits. Pour un fichier de 10 000 produits, comptez environ 30 à 60 secondes maximum. La vitesse dépend également de votre connexion internet et de la charge des serveurs Microsoft.</p>
            </div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Puis-je automatiser l&rsquo;exécution du script chaque fois que je reçois un nouveau FAB-DIS ?</div>
            <div class="faq-answer">
                <p>Oui, en combinant Office Scripts avec Power Automate. Vous pouvez créer un flux qui se déclenche automatiquement lorsqu&rsquo;un nouveau fichier FAB-DIS arrive dans un dossier OneDrive ou SharePoint, qui exécute le script de nettoyage, puis qui vous envoie une notification. Cette configuration nécessite un abonnement Microsoft 365 Business.</p>
            </div>
        </div>
    </div>

    <h2>Conclusion : passer de la corvée à l&rsquo;automatisation</h2>

    <p>Nettoyer manuellement les libellés produits de vos fichiers FAB-DIS est une tâche chronophage, répétitive et à faible valeur ajoutée. Pourtant, elle est indispensable pour maintenir un catalogue professionnel et performant.</p>

    <p><strong>En automatisant ce processus avec Office Scripts, vous gagnez :</strong></p>
    
    <ul>
        <li>⏱️ <strong>Du temps précieux</strong> : de 2 heures à 2 minutes par fichier</li>
        <li>💼 <strong>Une image professionnelle</strong> : des descriptions cohérentes et lisibles</li>
        <li>📈 <strong>De meilleures performances commerciales</strong> : meilleur taux de conversion et satisfaction client</li>
        <li>😌 <strong>Moins de stress</strong> : vos équipes se concentrent sur des tâches à plus forte valeur ajoutée</li>
    </ul>

    <p>Le script présenté dans cet article est une base solide que vous pouvez personnaliser selon vos besoins spécifiques. N&rsquo;hésitez pas à l&rsquo;adapter à votre secteur d&rsquo;activité et à vos exigences de formatage.</p>

    <div class="cta-box">
        <h3>Besoin d&rsquo;aide pour automatiser vos fichiers FAB-DIS ?</h3>
        <p>AutoExcel crée des scripts sur mesure pour automatiser l&rsquo;ensemble de votre workflow FAB-DIS : nettoyage des libellés, création de tarifs personnalisés, génération de catalogues, et bien plus encore.</p>
        <p>Nos solutions s&rsquo;adaptent à votre organisation et vous font gagner des dizaines d&rsquo;heures chaque mois.</p>
        <a href="https://autoexcel.fr/contact/" class="cta-button">Demander un devis gratuit</a>
    </div>

    <p style="margin-top: 40px; font-size: 0.95em; color: #666;">
        <strong>Pour aller plus loin :</strong><br>
        • <a href="https://autoexcel.fr/fab-dis-et-automatisation-le-guide-ultime-pour-les-tpe-pme/" class="internal-link">FAB-DIS et automatisation : le guide ultime pour les TPE/PME</a><br>
    </p>
    
</div>
<p>Lisez plus sur <a href="https://autoexcel.fr/nettoyer-et-standardiser-les-libelles-produits-fab-dis-libelle40-80-240-automatiquement/">AutoExcel</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://autoexcel.fr/nettoyer-et-standardiser-les-libelles-produits-fab-dis-libelle40-80-240-automatiquement/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>15 scripts Office essentiels pour vos FAB-DIS : le catalogue complet</title>
		<link>https://autoexcel.fr/15-scripts-office-essentiels-pour-vos-fab-dis-le-catalogue-complet/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=15-scripts-office-essentiels-pour-vos-fab-dis-le-catalogue-complet</link>
		
		<dc:creator><![CDATA[Joel]]></dc:creator>
		<pubDate>Wed, 01 Apr 2026 06:00:00 +0000</pubDate>
				<category><![CDATA[Automatiser avec Office Scripts - Des scripts concrets pour les Fab-Dis]]></category>
		<category><![CDATA[Fab-Dis]]></category>
		<guid isPermaLink="false">https://autoexcel.fr/?p=1894</guid>

					<description><![CDATA[Vous cherchez des scripts Office concrets pour automatiser vos fichiers FAB-DIS ?

Découvrez notre catalogue de 15 scripts essentiels classés par fonction métier :

🔧 Pré-traitement : extraction, copie de travail, nettoyage
✅ Validation : doublons, GTIN, cohérence prix
💎 Enrichissement : calculs, conversions, catégorisation
📊 Export : formatage ERP, CSV, rapports

Chaque script inclut : problème résolu, gain de temps mesuré, niveau de difficulté.

Pas besoin de coder : descriptions claires pour savoir exactement ce que chaque script fait pour vous.

👉 Article complet avec catalogue : https://autoexcel.fr/15-scripts-office-essentiels-pour-vos-fab-dis-le-catalogue-complet/<p>Lisez plus sur <a href="https://autoexcel.fr/15-scripts-office-essentiels-pour-vos-fab-dis-le-catalogue-complet/">AutoExcel</a></p>]]></description>
										<content:encoded><![CDATA[
<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>15 scripts Office essentiels pour vos FAB-DIS : le catalogue complet</title>
    <style>
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
            line-height: 1.8;
            color: #333;
            max-width: 100%;
            margin: 0;
            padding: 0;
        }
        
        .article-container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
        }
        
        h1 {
            font-size: 2.2em;
            color: #2c3e50;
            margin-bottom: 20px;
            line-height: 1.3;
            font-weight: 700;
        }
        
        h2 {
            font-size: 1.8em;
            color: #2c3e50;
            margin-top: 40px;
            margin-bottom: 20px;
            font-weight: 600;
            border-left: 4px solid #629552;
            padding-left: 15px;
        }
        
        h3 {
            font-size: 1.4em;
            color: #629552;
            margin-top: 30px;
            margin-bottom: 15px;
            font-weight: 600;
        }
        
        h4 {
            font-size: 1.2em;
            color: #555;
            margin-top: 25px;
            margin-bottom: 12px;
            font-weight: 600;
        }
        
        p {
            margin-bottom: 18px;
            font-size: 1.05em;
        }
        
        .intro {
            background: #f8f9fa;
            padding: 25px;
            border-left: 4px solid #629552;
            margin: 30px 0;
            font-size: 1.1em;
        }
        
        .stats-box {
            background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
            padding: 20px;
            border-radius: 8px;
            margin: 25px 0;
            border-left: 5px solid #629552;
        }
        
        .stats-box strong {
            color: #2e7d32;
            font-size: 1.3em;
        }
        
        .library-box {
            background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
            padding: 30px;
            border-radius: 8px;
            margin: 30px 0;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
            border-left: 5px solid #2196f3;
            text-align: center;
        }
        
        .library-box h3 {
            margin-top: 0;
            color: #1565c0;
        }
        
        .library-count {
            font-size: 3em;
            font-weight: bold;
            color: #1565c0;
            margin: 15px 0;
        }
        
        .category-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
            gap: 15px;
            margin: 30px 0;
        }
        
        .category-card {
            background: white;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            padding: 20px;
            text-align: center;
            transition: all 0.3s ease;
        }
        
        .category-card:hover {
            border-color: #629552;
            box-shadow: 0 4px 12px rgba(98, 149, 82, 0.2);
            transform: translateY(-3px);
        }
        
        .category-icon {
            font-size: 2.5em;
            margin-bottom: 10px;
        }
        
        .category-card h4 {
            color: #629552;
            margin: 10px 0;
        }
        
        .category-card p {
            font-size: 0.9em;
            color: #666;
            margin: 0;
        }
        
        .script-card {
            background: white;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            padding: 25px;
            margin: 25px 0;
            transition: all 0.3s ease;
            position: relative;
        }
        
        .script-card:hover {
            border-color: #629552;
            box-shadow: 0 6px 16px rgba(98, 149, 82, 0.15);
        }
        
        .script-header {
            display: flex;
            align-items: center;
            margin-bottom: 15px;
            flex-wrap: wrap;
        }
        
        .script-number {
            background: #629552;
            color: white;
            width: 40px;
            height: 40px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 1.2em;
            font-weight: bold;
            margin-right: 15px;
            flex-shrink: 0;
        }
        
        .script-title {
            flex: 1;
            min-width: 200px;
        }
        
        .script-title h4 {
            margin: 0;
            color: #629552;
            font-size: 1.3em;
        }
        
        .script-badges {
            display: flex;
            gap: 8px;
            margin-top: 8px;
            flex-wrap: wrap;
        }
        
        .badge {
            display: inline-block;
            padding: 4px 12px;
            border-radius: 12px;
            font-size: 0.8em;
            font-weight: 600;
        }
        
        .badge-easy {
            background: #d4edda;
            color: #155724;
        }
        
        .badge-medium {
            background: #fff3cd;
            color: #856404;
        }
        
        .badge-advanced {
            background: #f8d7da;
            color: #721c24;
        }
        
        .badge-time {
            background: #e3f2fd;
            color: #1565c0;
        }
        
        .script-content {
            margin-top: 15px;
        }
        
        .script-problem {
            background: #fff3cd;
            padding: 12px 15px;
            border-radius: 5px;
            margin: 12px 0;
            border-left: 3px solid #ffc107;
        }
        
        .script-problem strong {
            color: #856404;
        }
        
        .script-solution {
            background: #e8f5e9;
            padding: 12px 15px;
            border-radius: 5px;
            margin: 12px 0;
            border-left: 3px solid #4caf50;
        }
        
        .script-solution strong {
            color: #2e7d32;
        }
        
        .script-benefit {
            background: #e3f2fd;
            padding: 12px 15px;
            border-radius: 5px;
            margin: 12px 0;
            border-left: 3px solid #2196f3;
        }
        
        .script-benefit strong {
            color: #1565c0;
        }
        
        .decision-matrix {
            background: white;
            border: 2px solid #629552;
            border-radius: 8px;
            padding: 25px;
            margin: 30px 0;
        }
        
        .decision-matrix h3 {
            margin-top: 0;
            color: #629552;
        }
        
        .workflow-example {
            background: #f8f9fa;
            border: 2px solid #629552;
            border-radius: 8px;
            padding: 25px;
            margin: 30px 0;
        }
        
        .workflow-steps {
            display: flex;
            align-items: center;
            justify-content: space-between;
            flex-wrap: wrap;
            margin: 20px 0;
        }
        
        .workflow-step {
            background: white;
            border: 2px solid #629552;
            border-radius: 8px;
            padding: 15px;
            text-align: center;
            min-width: 140px;
            flex: 1;
            margin: 5px;
        }
        
        .workflow-step strong {
            color: #629552;
            display: block;
            margin-bottom: 5px;
        }
        
        .workflow-arrow {
            font-size: 2em;
            color: #629552;
            margin: 0 10px;
        }
        
        .warning-box {
            background: #fff3cd;
            border-left: 4px solid #ffc107;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .success-box {
            background: #d4edda;
            border-left: 4px solid #28a745;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .info-box {
            background: #d1ecf1;
            border-left: 4px solid #17a2b8;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        ul, ol {
            margin: 20px 0;
            padding-left: 30px;
        }
        
        li {
            margin-bottom: 12px;
            line-height: 1.7;
        }
        
        .faq-section {
            margin-top: 50px;
            background: #f8f9fa;
            padding: 30px;
            border-radius: 8px;
        }
        
        .faq-item {
            margin-bottom: 30px;
            padding-bottom: 20px;
            border-bottom: 1px solid #e0e0e0;
        }
        
        .faq-item:last-child {
            border-bottom: none;
        }
        
        .faq-question {
            font-size: 1.2em;
            font-weight: 600;
            color: #2c3e50;
            margin-bottom: 10px;
        }
        
        .faq-answer {
            color: #555;
            line-height: 1.7;
        }
        
        .cta-box {
            background: linear-gradient(135deg, #629552 0%, #4a7139 100%);
            color: white;
            padding: 35px;
            border-radius: 8px;
            margin: 40px 0;
            text-align: center;
        }
        
        .cta-box h3 {
            color: white;
            margin-top: 0;
        }
        
        .cta-button {
            display: inline-block;
            background: white;
            color: #629552;
            padding: 15px 35px;
            text-decoration: none;
            border-radius: 5px;
            font-weight: 600;
            margin-top: 15px;
            transition: all 0.3s;
            font-size: 1.1em;
        }
        
        .cta-button:hover {
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(0,0,0,0.2);
            background: #f0f0f0;
        }
        
        .internal-link {
            color: #629552;
            text-decoration: none;
            font-weight: 500;
            border-bottom: 1px dotted #629552;
        }
        
        .internal-link:hover {
            color: #4a7139;
            border-bottom: 1px solid #4a7139;
        }
        
        blockquote {
            border-left: 4px solid #629552;
            padding-left: 20px;
            margin: 25px 0;
            font-style: italic;
            color: #555;
            background: #f9f9f9;
            padding: 15px 20px;
            border-radius: 4px;
        }
        
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 25px 0;
            font-size: 0.95em;
        }
        
        th, td {
            border: 1px solid #ddd;
            padding: 12px;
            text-align: left;
        }
        
        th {
            background-color: #629552;
            color: white;
            font-weight: 600;
        }
        
        tr:nth-child(even) {
            background-color: #f8f9fa;
        }
        
        .highlight {
            background-color: #fff3cd;
            padding: 2px 6px;
            border-radius: 3px;
            font-weight: 600;
        }
        
        code {
            background: #f5f5f5;
            padding: 2px 6px;
            border-radius: 3px;
            font-family: 'Courier New', monospace;
            color: #d32f2f;
        }
        
        @media (max-width: 768px) {
            .category-grid {
                grid-template-columns: 1fr;
            }
            
            .workflow-steps {
                flex-direction: column;
            }
            
            .workflow-arrow {
                transform: rotate(90deg);
            }
            
            .script-header {
                flex-direction: column;
                align-items: flex-start;
            }
            
            h1 {
                font-size: 1.8em;
            }
            
            h2 {
                font-size: 1.5em;
            }
        }
    </style>


    <div class="article-container">
        
        <h1>15 scripts Office essentiels pour vos FAB-DIS : le catalogue complet</h1>
        
        <div class="intro">
            <p>Vous savez qu&rsquo;Office Scripts peut automatiser vos fichiers <a href="https://autoexcel.fr/fab-dis-et-automatisation-le-guide-ultime-pour-les-tpe-pme/" class="internal-link">FAB-DIS</a>, mais par où commencer ? Quels scripts sont vraiment utiles ? Lesquels vont vous faire gagner le plus de temps ? Face à l&rsquo;infinité de possibilités, choisir les bons scripts à implémenter peut sembler paralysant.</p>
            
            <p><strong>Ce catalogue résout ce problème.</strong> Nous avons sélectionné 15 scripts essentiels, classés par fonction métier (Pré-traitement, Validation, Enrichissement, Export, Reporting). Pour chaque script : le problème qu&rsquo;il résout, le bénéfice concret, le temps économisé et le niveau de difficulté. Pas besoin de coder : vous saurez exactement ce dont vous avez besoin.</p>
        </div>

        <div class="success-box">
            <p><strong>💡 AutoExcel développe vos scripts sur mesure</strong></p>
            <p>Tous les scripts de ce catalogue peuvent être créés spécifiquement pour votre contexte : vos colonnes FAB-DIS, vos règles métier, votre workflow. <a href="https://autoexcel.fr/contact/" class="internal-link">Demandez un développement personnalisé</a>.</p>
        </div>

        <div class="library-box">
            <div class="library-count">15</div>
            <h3>Scripts Office essentiels pour automatiser vos FAB-DIS</h3>
            <p style="margin-top: 15px; font-size: 1.1em;">Organisés en 5 catégories métier, testés en production, ROI mesuré</p>
        </div>

        <h2>Pourquoi constituer une bibliothèque de scripts ?</h2>

        <p>Contrairement aux macros VBA classiques, Office Scripts s&rsquo;exécute dans le cloud et peut être <strong>réutilisé, partagé et orchestré</strong>. Une fois qu&rsquo;un script est créé, il devient un actif permanent de votre organisation.</p>

        <h3>Les 4 avantages d&rsquo;une bibliothèque de scripts</h3>

        <div class="category-grid">
            <div class="category-card">
                <div class="category-icon">🔄</div>
                <h4>Réutilisabilité</h4>
                <p>Un script créé une fois peut être appliqué à tous vos fichiers FAB-DIS futurs</p>
            </div>
            
            <div class="category-card">
                <div class="category-icon">👥</div>
                <h4>Partage</h4>
                <p>Toute l&rsquo;équipe accède aux mêmes scripts via OneDrive/SharePoint</p>
            </div>
            
            <div class="category-card">
                <div class="category-icon">🔗</div>
                <h4>Combinaison</h4>
                <p>Enchaînez plusieurs scripts pour créer des workflows complets</p>
            </div>
            
            <div class="category-card">
                <div class="category-icon">⚡</div>
                <h4>Automatisation</h4>
                <p>Déclenchez les scripts automatiquement via Power Automate</p>
            </div>
        </div>

        <div class="stats-box">
            <p><strong>📊 Impact mesuré d&rsquo;une bibliothèque de scripts :</strong> Une PME avec 5 scripts actifs dans sa bibliothèque économise en moyenne 12 à 18 heures par mois, soit 144 à 216 heures par an. Coût de développement initial : 40-80 heures. ROI : 2-4 mois.</p>
        </div>

        <h2>Les 5 catégories de scripts pour FAB-DIS</h2>

        <p>Les scripts Office pour FAB-DIS se répartissent en 5 grandes familles fonctionnelles. Voici comment nous organisons ce catalogue :</p>

        <table>
            <thead>
                <tr>
                    <th>Catégorie</th>
                    <th>Fonction métier</th>
                    <th>Nombre de scripts</th>
                    <th>Gain de temps moyen</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><strong>🔧 Pré-traitement</strong></td>
                    <td>Préparer les données sans toucher à la source</td>
                    <td>4 scripts</td>
                    <td>1-2h par fichier</td>
                </tr>
                <tr>
                    <td><strong>✅ Validation</strong></td>
                    <td>Détecter les anomalies avant import</td>
                    <td>3 scripts</td>
                    <td>30min-1h par fichier</td>
                </tr>
                <tr>
                    <td><strong>💎 Enrichissement</strong></td>
                    <td>Ajouter des calculs et transformations</td>
                    <td>4 scripts</td>
                    <td>45min-1h30 par fichier</td>
                </tr>
                <tr>
                    <td><strong>📊 Export &amp; Formatage</strong></td>
                    <td>Préparer pour import ERP ou publication</td>
                    <td>2 scripts</td>
                    <td>20-40min par fichier</td>
                </tr>
                <tr>
                    <td><strong>📈 Reporting</strong></td>
                    <td>Analyser et comparer les catalogues</td>
                    <td>2 scripts</td>
                    <td>30min-1h par analyse</td>
                </tr>
            </tbody>
        </table>

        <h2>Catalogue des 15 scripts essentiels</h2>

        <h3>🔧 Catégorie 1 : Scripts de Pré-traitement</h3>

        <p>Ces scripts préparent vos données FAB-DIS sans jamais modifier le fichier source, selon le principe de la <a href="https://autoexcel.fr/contact/" class="internal-link">zone de sécurité</a>.</p>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">1</div>
                <div class="script-title">
                    <h4>Extraction Intelligente des Colonnes Essentielles</h4>
                    <div class="script-badges">
                        <span class="badge badge-easy">Facile</span>
                        <span class="badge badge-time">⏱️ 5-10 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Un FAB-DIS contient 47 colonnes mais vous n&rsquo;en utilisez que 15. Supprimer manuellement 32 colonnes à chaque fichier prend 10-15 minutes et risque d&rsquo;erreurs.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Identifie automatiquement vos 15 colonnes essentielles (REFCIALE, LIBELLE80, TARIF, TVA, GTIN, etc.) et crée une nouvelle feuille « Donnees_Travail » contenant uniquement ces colonnes, dans l&rsquo;ordre souhaité.
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> De 15 minutes à 10 secondes par fichier. Sur 50 fichiers/an : 12 heures économisées. Zéro risque d&rsquo;oublier une colonne ou d&rsquo;en supprimer une par erreur.
                </div>
            </div>
        </div>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">2</div>
                <div class="script-title">
                    <h4>Nettoyage Automatique des Libellés Produits</h4>
                    <div class="script-badges">
                        <span class="badge badge-easy">Facile</span>
                        <span class="badge badge-time">⏱️ 15-30 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Les libellés arrivent en MAJUSCULES avec des espaces multiples et des caractères spéciaux. Les corriger manuellement sur 5 000 produits = 2-3 heures de travail fastidieux.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Convertit automatiquement LIBELLE40, LIBELLE80 et LIBELLE240 en casse titre (Première Lettre Majuscule), supprime les espaces multiples, préserve les acronymes courants (HDMI, USB, LED), nettoie les caractères spéciaux.
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> De 2-3 heures à 30 secondes. Qualité garantie : libellés homogènes, professionnels, prêts pour catalogue ou site e-commerce.
                </div>
            </div>
        </div>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">3</div>
                <div class="script-title">
                    <h4>Copie de Travail Horodatée Automatique</h4>
                    <div class="script-badges">
                        <span class="badge badge-easy">Facile</span>
                        <span class="badge badge-time">⏱️ 2-5 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Vous modifiez directement le fichier source, risquant de le corrompre. Impossible de revenir en arrière si une erreur est introduite.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Crée automatiquement une copie du fichier avec nom horodaté (FABDIS_MARQUE_20260125_1430_WORK.xlsx), laissant le fichier source intact en lecture seule.
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> Sécurité totale : fichier source toujours disponible. Traçabilité : historique complet de toutes les versions. Conformité audit garantie.
                </div>
            </div>
        </div>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">4</div>
                <div class="script-title">
                    <h4>Fusion Multi-Blocs FAB-DIS (B01+B02+B04)</h4>
                    <div class="script-badges">
                        <span class="badge badge-medium">Moyen</span>
                        <span class="badge badge-time">⏱️ 30-60 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Vos données sont éclatées sur 3 feuilles (B01_Commerce, B02_Logistique, B04_Reglementaire). Les fusionner manuellement avec RECHERCHEV sur 5 000 lignes = 1-2 heures + erreurs fréquentes.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Fusionne automatiquement les 3 blocs en utilisant REFCIALE comme clé, crée une table unique avec colonnes Commerce + Logistique + Réglementaire, gère les références manquantes.
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> De 1-2 heures à 1 minute. Table exploitable immédiatement pour analyse ou import ERP. Zéro erreur de fusion.
                </div>
            </div>
        </div>

        <h3>✅ Catégorie 2 : Scripts de Validation &amp; Contrôle Qualité</h3>

        <p>Ces scripts détectent les anomalies critiques avant tout import dans votre système de gestion.</p>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">5</div>
                <div class="script-title">
                    <h4>Détection de Doublons (REFCIALE &amp; GTIN)</h4>
                    <div class="script-badges">
                        <span class="badge badge-easy">Facile</span>
                        <span class="badge badge-time">⏱️ 10-20 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Des doublons dans le fichier FAB-DIS écrasent vos données lors de l&rsquo;import ERP. Coût moyen d&rsquo;un doublon non détecté : 500-2 000 € (litiges, corrections, pertes).
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Scanne toutes les lignes, détecte les codes REFCIALE en double et les GTIN dupliqués, génère un rapport avec numéros de lignes concernées, signale les doublons partiels (même GTIN, codes différents).
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> Évite les imports corrompus. Détection en 20 secondes vs 1 heure de vérification manuelle. Rapport exploitable immédiatement.
                </div>
            </div>
        </div>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">6</div>
                <div class="script-title">
                    <h4>Validation des Codes GTIN (Format &amp; Checksum)</h4>
                    <div class="script-badges">
                        <span class="badge badge-medium">Moyen</span>
                        <span class="badge badge-time">⏱️ 15-30 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Des GTIN invalides (lettres, mauvaise longueur, checksum erroné) bloquent la vente en ligne. 1 247 produits sans GTIN valide = impossibilité de vendre sur marketplaces.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Vérifie le format (8/12/13/14 chiffres uniquement), calcule et valide la clé de contrôle (checksum), identifie les GTIN manquants, signale les formats invalides avec numéro de ligne.
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> Conformité marketplaces garantie. Évite les refus d&rsquo;import Amazon/Cdiscount. Rapport de validation complet en 30 secondes.
                </div>
            </div>
        </div>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">7</div>
                <div class="script-title">
                    <h4>Contrôle de Cohérence Tarifaire</h4>
                    <div class="script-badges">
                        <span class="badge badge-easy">Facile</span>
                        <span class="badge badge-time">⏱️ 10-15 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Prix publics &lt; prix d&rsquo;achat, remises &gt; 100%, prix à zéro. Ces incohérences causent des pertes financières directes si non détectées.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Vérifie TARIF &gt; 0, calcule les marges (si PV fourni), détecte les taux de TVA invalides (hors 0/2.1/5.5/10/20%), signale les prix aberrants (&lt; 0.01 € ou &gt; 100 000 €).
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> Évite les ventes à perte involontaires. Détection immédiate des erreurs de saisie fournisseur. Rapport de conformité tarifaire.
                </div>
            </div>
        </div>

        <h3>💎 Catégorie 3 : Scripts d&rsquo;Enrichissement &amp; Transformation</h3>

        <p>Ces scripts ajoutent de la valeur à vos données brutes en calculant, convertissant et catégorisant.</p>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">8</div>
                <div class="script-title">
                    <h4>Calcul Automatique de Tarifs Personnalisés</h4>
                    <div class="script-badges">
                        <span class="badge badge-medium">Moyen</span>
                        <span class="badge badge-time">⏱️ 20-40 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Vous appliquez des coefficients différents selon les familles produits (×1.3 pour catégorie A, ×1.5 pour B, ×1.8 pour C). Faire ça manuellement sur 5 000 produits = 2-3 heures.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Lit votre table de coefficients (par famille, marque ou produit), applique automatiquement le bon coefficient à chaque ligne, génère colonnes PV HT et PV TTC calculées, gère les arrondis et seuils psychologiques (9.90, 19.90).
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> De 2-3 heures à 30 secondes. Tarifs clients en 1 clic. Cohérence garantie sur toute la gamme.
                </div>
            </div>
        </div>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">9</div>
                <div class="script-title">
                    <h4>Conversion Unités &amp; Formatage Standards</h4>
                    <div class="script-badges">
                        <span class="badge badge-easy">Facile</span>
                        <span class="badge badge-time">⏱️ 10-15 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Le FAB-DIS utilise des codes d&rsquo;unités non standards (UN, PCE, EA) que votre ERP ne reconnaît pas. La TVA est en décimal (0.2) au lieu de pourcentage (20%).
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Mappe automatiquement UN→PCS, PCE→PCS, EA→PCS selon votre table de correspondance, convertit TVA décimale en pourcentage (0.2 → 20%), standardise les formats de dates, normalise les codes catégories.
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> Compatibilité ERP immédiate. Élimination des erreurs de mapping. Import ERP sans rejet.
                </div>
            </div>
        </div>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">10</div>
                <div class="script-title">
                    <h4>Catégorisation Automatique Multi-Niveaux</h4>
                    <div class="script-badges">
                        <span class="badge badge-medium">Moyen</span>
                        <span class="badge badge-time">⏱️ 20-30 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Le FAB-DIS contient des codes famille (FAM1, FAM2) mais votre site e-commerce utilise une arborescence différente à 4 niveaux. Faire le mapping manuel = 1-2 heures.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Lit votre table de mapping FAB-DIS → Catégories internes, assigne automatiquement Niveau1 &gt; Niveau2 &gt; Niveau3 &gt; Niveau4, gère les produits non catégorisés (catégorie « Divers »), génère rapport des catégories manquantes.
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> Catégorisation complète en 30 secondes. Arborescence e-commerce prête. Zéro produit orphelin.
                </div>
            </div>
        </div>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">11</div>
                <div class="script-title">
                    <h4>Enrichissement SEO (Titres &amp; Meta Descriptions)</h4>
                    <div class="script-badges">
                        <span class="badge badge-advanced">Avancé</span>
                        <span class="badge badge-time">⏱️ 40-60 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Vos fiches produits e-commerce utilisent directement les libellés FAB-DIS comme titres, peu optimisés SEO. Réécrire 5 000 titres manuellement = plusieurs jours.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Génère automatiquement des titres SEO optimisés (Marque + Modèle + Caractéristique clé + Type), crée des meta descriptions (150 car max) avec mots-clés, ajoute attributs structurés (couleur, taille, matière extraits du libellé), respecte les bonnes pratiques SEO.
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> Catalogue SEO-ready en 1 minute. Amélioration du référencement naturel. Taux de clics augmenté de 15-25%.
                </div>
            </div>
        </div>

        <h3>📊 Catégorie 4 : Scripts d&rsquo;Export &amp; Formatage</h3>

        <p>Ces scripts préparent vos données dans le format exact attendu par vos systèmes cibles.</p>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">12</div>
                <div class="script-title">
                    <h4>Export Format ERP (Mapping Colonnes Personnalisé)</h4>
                    <div class="script-badges">
                        <span class="badge badge-medium">Moyen</span>
                        <span class="badge badge-time">⏱️ 15-25 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Votre ERP attend des colonnes dans un ordre spécifique avec des noms précis. Réorganiser et renommer manuellement 20 colonnes sur 5 000 lignes = 45 minutes.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Crée une nouvelle feuille avec colonnes dans l&rsquo;ordre ERP, renomme automatiquement selon nomenclature ERP (ex: REFCIALE → Code_Article), supprime les colonnes non utilisées par l&rsquo;ERP, exporte en CSV avec séparateur correct (point-virgule ou virgule).
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> Fichier import-ready en 20 secondes. Zéro erreur de mapping. Import ERP direct sans manipulation.
                </div>
            </div>
        </div>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">13</div>
                <div class="script-title">
                    <h4>Génération de Catalogue PDF Automatique</h4>
                    <div class="script-badges">
                        <span class="badge badge-advanced">Avancé</span>
                        <span class="badge badge-time">⏱️ 1-3 min</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Créer un catalogue client PDF depuis le FAB-DIS nécessite mise en page dans Word/InDesign, copier-coller les données, mise en forme. 3-4 heures par catalogue.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Génère une feuille Excel mise en page « print-ready » avec logo, en-têtes, colonnes formatées, crée des sections par catégorie, applique mise en forme conditionnelle (nouveautés en vert, promos en rouge), prépare pour export PDF.
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> Catalogue client en 3 minutes vs 3 heures. Mise à jour instantanée possible. Cohérence graphique garantie.
                </div>
            </div>
        </div>

        <h3>📈 Catégorie 5 : Scripts de Reporting &amp; Analyse</h3>

        <p>Ces scripts extraient de l&rsquo;intelligence business de vos données FAB-DIS.</p>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">14</div>
                <div class="script-title">
                    <h4>Comparateur de Catalogues (Versions N vs N-1)</h4>
                    <div class="script-badges">
                        <span class="badge badge-medium">Moyen</span>
                        <span class="badge badge-time">⏱️ 30-60 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Le fournisseur envoie un nouveau FAB-DIS mais vous ne savez pas ce qui a changé : nouveaux produits, prix modifiés, produits retirés. Identifier les changements manuellement = 1-2 heures.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Compare 2 fichiers FAB-DIS (ancien vs nouveau), identifie nouveaux produits (présents dans nouveau uniquement), détecte produits retirés (absents du nouveau), liste les modifications de prix (avec delta en % et en €), signale les changements de libellés, génère rapport synthétique.
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> Analyse comparative en 1 minute. Anticipation des évolutions gamme. Mise à jour ciblée (uniquement ce qui change).
                </div>
            </div>
        </div>

        <div class="script-card">
            <div class="script-header">
                <div class="script-number">15</div>
                <div class="script-title">
                    <h4>Tableau de Bord Qualité FAB-DIS</h4>
                    <div class="script-badges">
                        <span class="badge badge-medium">Moyen</span>
                        <span class="badge badge-time">⏱️ 20-40 sec</span>
                    </div>
                </div>
            </div>
            
            <div class="script-content">
                <div class="script-problem">
                    <strong>❌ Problème résolu :</strong> Vous voulez suivre la qualité de vos fichiers FAB-DIS dans le temps mais analyser manuellement 15 indicateurs sur 12 mois = trop complexe.
                </div>
                
                <div class="script-solution">
                    <strong>✅ Ce que fait le script :</strong> Génère tableau de bord avec 15 KPIs : % GTIN manquants, % doublons, score de qualité global (0-100), évolution nombre de références, distribution par famille, top 10 marques, alertes qualité (anomalies détectées), graphiques synthétiques.
                </div>
                
                <div class="script-benefit">
                    <strong>💰 Bénéfice :</strong> Vision 360° de la qualité en 30 secondes. Suivi d&rsquo;évolution dans le temps. Identification fournisseurs problématiques.
                </div>
            </div>
        </div>

        <h2>Comment choisir les bons scripts pour votre situation ?</h2>

        <p>Vous n&rsquo;avez probablement pas besoin des 15 scripts immédiatement. Voici comment identifier vos priorités.</p>

        <div class="decision-matrix">
            <h3>🎯 Matrice de priorisation des scripts</h3>
            
            <table>
                <thead>
                    <tr>
                        <th>Si votre problème principal est&#8230;</th>
                        <th>Commencez par ces scripts</th>
                        <th>Ensuite ajoutez</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td><strong>Perte de temps sur tâches répétitives</strong></td>
                        <td>Scripts 1, 2, 3 (Pré-traitement)</td>
                        <td>Scripts 8, 12 (Enrichissement + Export)</td>
                    </tr>
                    <tr>
                        <td><strong>Erreurs fréquentes lors des imports ERP</strong></td>
                        <td>Scripts 5, 6, 7 (Validation)</td>
                        <td>Script 12 (Export format ERP)</td>
                    </tr>
                    <tr>
                        <td><strong>Qualité données variable des fournisseurs</strong></td>
                        <td>Scripts 5, 6, 15 (Validation + Dashboard)</td>
                        <td>Script 14 (Comparateur versions)</td>
                    </tr>
                    <tr>
                        <td><strong>Tarification client complexe</strong></td>
                        <td>Script 8 (Calcul tarifs)</td>
                        <td>Scripts 1, 2, 12 (Pré-traitement + Export)</td>
                    </tr>
                    <tr>
                        <td><strong>Publication catalogue client fréquente</strong></td>
                        <td>Scripts 2, 10, 13 (Nettoyage + Catégorisation + PDF)</td>
                        <td>Script 11 (Enrichissement SEO si e-commerce)</td>
                    </tr>
                    <tr>
                        <td><strong>Vente en ligne (marketplaces)</strong></td>
                        <td>Scripts 6, 11 (Validation GTIN + SEO)</td>
                        <td>Scripts 2, 10 (Nettoyage + Catégorisation)</td>
                    </tr>
                </tbody>
            </table>
        </div>

        <div class="info-box">
            <p><strong>💡 Recommandation :</strong> Commencez par 3-4 scripts maximum. Maîtrisez-les, mesurez le ROI, puis ajoutez progressivement d&rsquo;autres scripts selon vos besoins. Un déploiement progressif est plus efficace qu&rsquo;un « big bang » avec 15 scripts d&rsquo;un coup.</p>
        </div>

        <h3>Roadmap d&rsquo;implémentation recommandée</h3>

        <table>
            <thead>
                <tr>
                    <th>Phase</th>
                    <th>Scripts à implémenter</th>
                    <th>Durée</th>
                    <th>Gain attendu</th>
                </tr>
            </thead>
            <tbody>
                <tr style="background: #e8f5e9;">
                    <td><strong>Phase 1 &#8211; Quick Wins</strong></td>
                    <td>Scripts 1, 2, 3 (Pré-traitement basique)</td>
                    <td>1 semaine</td>
                    <td>60% du gain total</td>
                </tr>
                <tr style="background: #fff3cd;">
                    <td><strong>Phase 2 &#8211; Sécurisation</strong></td>
                    <td>Scripts 5, 6, 7 (Validation qualité)</td>
                    <td>2 semaines</td>
                    <td>+20% du gain</td>
                </tr>
                <tr style="background: #e3f2fd;">
                    <td><strong>Phase 3 &#8211; Optimisation</strong></td>
                    <td>Scripts 8, 12 (Enrichissement + Export)</td>
                    <td>2 semaines</td>
                    <td>+15% du gain</td>
                </tr>
                <tr>
                    <td><strong>Phase 4 &#8211; Excellence</strong></td>
                    <td>Scripts au choix selon besoins spécifiques</td>
                    <td>1 mois</td>
                    <td>+5% du gain</td>
                </tr>
            </tbody>
        </table>

        <h2>Combiner les scripts : créer des workflows complets</h2>

        <p>La vraie puissance vient de l&rsquo;enchaînement de plusieurs scripts pour créer un workflow automatisé de bout en bout.</p>

        <div class="workflow-example">
            <h4>Exemple : Workflow complet « Du FAB-DIS au catalogue client »</h4>
            
            <div class="workflow-steps">
                <div class="workflow-step">
                    <strong>Script 3</strong>
                    <small>Copie de travail</small>
                </div>
                
                <div class="workflow-arrow">→</div>
                
                <div class="workflow-step">
                    <strong>Script 1</strong>
                    <small>Extraction colonnes</small>
                </div>
                
                <div class="workflow-arrow">→</div>
                
                <div class="workflow-step">
                    <strong>Scripts 5+6+7</strong>
                    <small>Validation complète</small>
                </div>
                
                <div class="workflow-arrow">→</div>
                
                <div class="workflow-step">
                    <strong>Script 2</strong>
                    <small>Nettoyage libellés</small>
                </div>
                
                <div class="workflow-arrow">→</div>
                
                <div class="workflow-step">
                    <strong>Script 8</strong>
                    <small>Calcul tarifs</small>
                </div>
                
                <div class="workflow-arrow">→</div>
                
                <div class="workflow-step">
                    <strong>Script 13</strong>
                    <small>Génération PDF</small>
                </div>
            </div>
            
            <p style="margin-top: 20px; text-align: center;"><strong>Résultat :</strong> De 5-6 heures de travail manuel à 5 minutes automatisées</p>
        </div>

        <div class="success-box">
            <p><strong>✅ Orchestration avec Power Automate :</strong> Vous pouvez déclencher automatiquement cette séquence de 6 scripts dès qu&rsquo;un nouveau FAB-DIS arrive dans votre dossier OneDrive. Zero intervention manuelle.</p>
        </div>

        <blockquote>
            <p><strong>Retour d&rsquo;expérience (PME négoce matériel BTP, 40 personnes) :</strong></p>
            <p>« Nous avons commencé avec 3 scripts (extraction, validation, calcul tarifs). ROI immédiat : 4 heures économisées par semaine. Encouragés par ce succès, nous avons ajouté progressivement 5 autres scripts sur 6 mois.</p>
            <p>Aujourd&rsquo;hui, notre bibliothèque contient 8 scripts actifs que nous enchaînons selon les besoins. Le workflow &lsquo;Import ERP&rsquo; combine 4 scripts et tourne en 2 minutes vs 3 heures avant. Le workflow &lsquo;Catalogue client&rsquo; en combine 5 et génère un PDF prêt à envoyer en 5 minutes.</p>
            <p>Bilan après 1 an : 380 heures économisées, zéro erreur d&rsquo;import ERP depuis 8 mois, satisfaction client augmentée (catalogues plus beaux et à jour). Investissement initial : 60 heures de développement (AutoExcel). ROI atteint en 2 mois. »</p>
        </blockquote>

        <div class="faq-section">
            <h2>FAQ : Questions fréquentes sur les scripts Office</h2>
            
            <div class="faq-item">
                <div class="faq-question">Où puis-je télécharger ces scripts gratuitement ?</div>
                <div class="faq-answer">
                    <p>Ces scripts sont des descriptions de fonctionnalités, pas des scripts téléchargeables directement. Chaque organisation a des besoins spécifiques (colonnes FAB-DIS différentes, règles métier particulières). AutoExcel développe ces scripts sur mesure pour votre contexte exact. Cependant, des scripts simples (extraction, nettoyage basique) peuvent être fournis en version générique sur demande.</p>
                </div>
            </div>
            
            <div class="faq-item">
                <div class="faq-question">Combien coûte le développement d&rsquo;un script personnalisé ?</div>
                <div class="faq-answer">
                    <p>Cela dépend de la complexité : Script simple (extraction, nettoyage) : 200-500 €, Script moyen (validation, calculs) : 500-1 200 €, Script avancé (fusion multi-sources, reporting) : 1 200-2 500 €. Un pack de 3-5 scripts avec workflow orchestré : 2 000-5 000 €. ROI typique : 2-6 mois selon le temps économisé.</p>
                </div>
            </div>
            
            <div class="faq-item">
                <div class="faq-question">Puis-je modifier un script après sa création ?</div>
                <div class="faq-answer">
                    <p>Oui, absolument. Les scripts Office sont du code TypeScript éditable. Vous pouvez les modifier vous-même si vous avez les compétences, ou demander à AutoExcel de faire les ajustements. Nous fournissons toujours le code source complet et commenté avec documentation. Les modifications mineures (ajustement seuils, colonnes supplémentaires) prennent 1-2 heures.</p>
                </div>
            </div>
            
            <div class="faq-item">
                <div class="faq-question">Les scripts fonctionnent-ils avec Excel Desktop ou seulement Excel Online ?</div>
                <div class="faq-answer">
                    <p>Office Scripts fonctionne uniquement avec Excel Online (Excel pour le Web) via un abonnement Microsoft 365. Cela nécessite que vos fichiers soient sur OneDrive ou SharePoint. Les scripts peuvent être exécutés depuis Excel Desktop si vous disposez d&rsquo;une version Microsoft 365 récente et que votre organisation l&rsquo;autorise, sinon vous devrez utiliser des macros VBA à la place, ou ouvrir vos fichiers dans Excel Online pour exécuter les scripts.</p>
                </div>
            </div>
            
            <div class="faq-item">
                <div class="faq-question">Combien de temps faut-il pour maîtriser l&rsquo;utilisation des scripts ?</div>
                <div class="faq-answer">
                    <p>Pour UTILISER des scripts déjà développés : 5-15 minutes de formation suffisent (comment les exécuter, lire les rapports). Pour DÉVELOPPER vos propres scripts : 20-40 heures d&rsquo;apprentissage si vous avez des bases en programmation, 60-100 heures si vous partez de zéro. C&rsquo;est pourquoi la plupart des entreprises préfèrent faire développer leurs 3-5 scripts prioritaires par un expert, puis apprendre progressivement pour les ajustements mineurs.</p>
                </div>
            </div>
        </div>

        <h2>Conclusion : de la liste de souhaits à la bibliothèque opérationnelle</h2>

        <p>Ce catalogue de 15 scripts essentiels n&rsquo;est pas une liste théorique, mais un condensé de cas d&rsquo;usage réels observés sur des centaines de projets d&rsquo;automatisation FAB-DIS.</p>

        <p><strong>Les 3 principes pour réussir votre bibliothèque de scripts :</strong></p>
        
        <ul>
            <li>🎯 <strong>Commencer petit</strong> : 3-4 scripts bien choisis valent mieux que 15 scripts mal maîtrisés</li>
            <li>📊 <strong>Mesurer le ROI</strong> : chronométrez le temps « avant » vs « après » pour justifier les scripts suivants</li>
            <li>🔄 <strong>Itérer progressivement</strong> : ajoutez un script par mois, perfectionnez, puis passez au suivant</li>
        </ul>

        <p>Chaque script de cette liste résout un problème concret et génère un gain de temps mesurable. L&rsquo;investissement dans une bibliothèque de 5-8 scripts actifs se rentabilise typiquement en 2-4 mois, puis continue de générer de la valeur pendant des années.</p>

        <div class="stats-box">
            <p><strong>📊 Impact moyen d&rsquo;une bibliothèque de 8 scripts actifs :</strong> 15-20 heures économisées par mois, soit 180-240 heures par an. Sur 3 ans, c&rsquo;est 540-720 heures = 7 à 9 mois de travail d&rsquo;une personne. Investissement initial : 40-80 heures de développement.</p>
        </div>

        <div class="cta-box">
            <h3>AutoExcel développe votre bibliothèque de scripts sur mesure</h3>
            <p>Nous analysons vos fichiers FAB-DIS, identifions les 5-10 scripts les plus impactants pour VOTRE situation et les développons en version production-ready :</p>
            <ul style="text-align: left; max-width: 600px; margin: 20px auto;">
                <li>✅ Audit de vos processus actuels (1-2h gratuit)</li>
                <li>✅ Recommandation des scripts prioritaires avec ROI estimé</li>
                <li>✅ Développement sur mesure adapté à VOS colonnes et règles</li>
                <li>✅ Tests en environnement réel sur vos vrais fichiers</li>
                <li>✅ Formation de votre équipe (1-2h par script)</li>
                <li>✅ Documentation complète + code source commenté</li>
                <li>✅ Support 3 mois pour ajustements</li>
            </ul>
            <p><strong>Pack « Starter » : 3 scripts + workflow = 2 000-3 000 € | ROI moyen : 2-3 mois</strong></p>
            <a href="https://autoexcel.fr/contact/" class="cta-button">Demander un audit gratuit de mes besoins</a>
        </div>

        <p style="margin-top: 40px; font-size: 0.95em; color: #666;">
            <strong>Pour aller plus loin :</strong><br>
            • <a href="https://autoexcel.fr/fab-dis-et-automatisation-le-guide-ultime-pour-les-tpe-pme/" class="internal-link">FAB-DIS et automatisation : le guide ultime pour les TPE/PME</a><br>
            • <a href="https://autoexcel.fr/automatiser-le-pre-traitement-des-donnees-fab-dis/" class="internal-link">Automatiser le pré-traitement des données FAB-DIS</a><br>
            • <a href="https://autoexcel.fr/verifier-lintegrite-dun-fichier-fab-dis-doublons-gtin-manquants-incoherences-de-prix/" class="internal-link">Vérifier l&rsquo;intégrité d&rsquo;un fichier FAB-DIS : doublons, GTIN, prix</a>
        </p>
        
    </div>
<p>Lisez plus sur <a href="https://autoexcel.fr/15-scripts-office-essentiels-pour-vos-fab-dis-le-catalogue-complet/">AutoExcel</a></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>office script pour automatiser un fichier fab-dis</title>
		<link>https://autoexcel.fr/office-script-pour-automatiser-un-fichier-fab-dis/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=office-script-pour-automatiser-un-fichier-fab-dis</link>
					<comments>https://autoexcel.fr/office-script-pour-automatiser-un-fichier-fab-dis/#respond</comments>
		
		<dc:creator><![CDATA[Joel]]></dc:creator>
		<pubDate>Mon, 30 Mar 2026 06:00:00 +0000</pubDate>
				<category><![CDATA[Automatiser avec Office Scripts - Des scripts concrets pour les Fab-Dis]]></category>
		<category><![CDATA[Fab-Dis]]></category>
		<guid isPermaLink="false">https://autoexcel.fr/?p=1833</guid>

					<description><![CDATA[🚀 VBA, c'est fini ? Pas tout à fait... mais Office Script change la donne.

Si vous gérez des fichiers FAB-DIS dans Excel, vous connaissez la galère :
→ Valider 10 000 codes GTIN à la main
→ Nettoyer des libellés mal formatés
→ Recalculer des tarifs à chaque mise à jour fournisseur

Office Script (le "nouveau VBA" pour Excel Online) permet d'automatiser tout ça, et surtout de le connecter à Power Automate pour des flux 100% automatiques.

Dans notre dernier article, on vous donne 3 scripts prêts à copier-coller, spécifiquement conçus pour le format FAB-DIS.

👉 https://autoexcel.fr/office-script-pour-automatiser-un-fichier-fab-dis/

#Excel #OfficeScript #FABDIS #Automatisation #PowerAutomate #BTP<p>Lisez plus sur <a href="https://autoexcel.fr/office-script-pour-automatiser-un-fichier-fab-dis/">AutoExcel</a></p>]]></description>
										<content:encoded><![CDATA[
<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Office Script pour automatiser un fichier FAB-DIS : guide et exemples</title>
    <style>
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
            line-height: 1.8;
            color: #333;
            max-width: 100%;
            margin: 0;
            padding: 0;
        }
        
        .article-container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
        }
        
        h1 {
            font-size: 2.2em;
            color: #2c3e50;
            margin-bottom: 20px;
            line-height: 1.3;
            font-weight: 700;
        }
        
        h2 {
            font-size: 1.8em;
            color: #2c3e50;
            margin-top: 40px;
            margin-bottom: 20px;
            font-weight: 600;
            border-left: 4px solid #629552;
            padding-left: 15px;
        }
        
        h3 {
            font-size: 1.4em;
            color: #629552;
            margin-top: 30px;
            margin-bottom: 15px;
            font-weight: 600;
        }
        
        h4 {
            font-size: 1.2em;
            color: #555;
            margin-top: 25px;
            margin-bottom: 12px;
            font-weight: 600;
        }
        
        p {
            margin-bottom: 18px;
            font-size: 1.05em;
        }
        
        .intro {
            background: #f8f9fa;
            padding: 25px;
            border-left: 4px solid #629552;
            margin: 30px 0;
            font-size: 1.1em;
        }
        
        .service-mention {
            background-color: #f0f4f8;
            border: 1px solid #d9e2ec;
            padding: 15px;
            border-radius: 6px;
            font-size: 0.95em;
            margin-bottom: 25px;
            display: flex;
            align-items: center;
        }
        
        .service-mention span {
            margin-right: 10px;
            font-size: 1.5em;
        }
        
        .stats-box {
            background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
            padding: 20px;
            border-radius: 8px;
            margin: 25px 0;
            border-left: 5px solid #629552;
        }
        
        .stats-box strong {
            color: #2e7d32;
            font-size: 1.3em;
        }
        
        .warning-box {
            background: #fff3cd;
            border-left: 4px solid #ffc107;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .success-box {
            background: #d4edda;
            border-left: 4px solid #28a745;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .info-box {
            background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
            padding: 20px;
            border-radius: 8px;
            margin: 25px 0;
            border-left: 5px solid #2196f3;
        }
        
        .code-block {
            background: #1e1e1e;
            color: #d4d4d4;
            padding: 20px;
            border-radius: 8px;
            overflow-x: auto;
            margin: 20px 0;
            font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
            font-size: 0.85em;
            line-height: 1.5;
            position: relative;
            white-space: pre-wrap;
            word-wrap: break-word;
        }
        
        .code-label {
            position: absolute;
            top: 0;
            right: 0;
            background: #629552;
            color: white;
            padding: 5px 12px;
            font-size: 0.8em;
            border-radius: 0 8px 0 8px;
            font-family: -apple-system, sans-serif;
        }
        
        ul, ol {
            margin: 20px 0;
            padding-left: 30px;
        }
        
        li {
            margin-bottom: 12px;
            line-height: 1.7;
        }
        
        .comparison-table {
            width: 100%;
            border-collapse: collapse;
            margin: 25px 0;
            font-size: 0.95em;
        }
        
        .comparison-table th, .comparison-table td {
            border: 1px solid #ddd;
            padding: 12px;
            text-align: left;
        }
        
        .comparison-table th {
            background-color: #629552;
            color: white;
            font-weight: 600;
        }
        
        .comparison-table tr:nth-child(even) {
            background-color: #f8f9fa;
        }
        
        .check-icon { color: #28a745; font-weight: bold; }
        .cross-icon { color: #dc3545; font-weight: bold; }
        .partial-icon { color: #ffc107; font-weight: bold; }
        
        .script-card {
            background: white;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            padding: 25px;
            margin: 25px 0;
            transition: all 0.3s ease;
        }
        
        .script-card:hover {
            border-color: #629552;
            box-shadow: 0 4px 12px rgba(98, 149, 82, 0.15);
        }
        
        .script-card h4 {
            color: #629552;
            margin-top: 0;
            display: flex;
            align-items: center;
        }
        
        .script-card h4 span {
            margin-right: 10px;
            font-size: 1.3em;
        }
        
        .use-case {
            background: #f8f9fa;
            padding: 15px;
            border-radius: 5px;
            margin: 15px 0;
        }
        
        .use-case strong {
            color: #629552;
        }
        
        .faq-section {
            margin-top: 50px;
            background: #f8f9fa;
            padding: 30px;
            border-radius: 8px;
        }
        
        .faq-item {
            margin-bottom: 30px;
            padding-bottom: 20px;
            border-bottom: 1px solid #e0e0e0;
        }
        
        .faq-item:last-child {
            border-bottom: none;
            margin-bottom: 0;
            padding-bottom: 0;
        }
        
        .faq-question {
            font-size: 1.2em;
            font-weight: 600;
            color: #2c3e50;
            margin-bottom: 10px;
        }
        
        .faq-answer {
            color: #555;
            line-height: 1.7;
        }
        
        .cta-box {
            background: linear-gradient(135deg, #629552 0%, #4a7139 100%);
            color: white;
            padding: 35px;
            border-radius: 8px;
            margin: 40px 0;
            text-align: center;
        }
        
        .cta-box h3 {
            color: white;
            margin-top: 0;
            font-size: 1.5em;
        }
        
        .cta-box p {
            color: rgba(255,255,255,0.9);
        }
        
        .cta-button {
            display: inline-block;
            background: white;
            color: #629552;
            padding: 15px 35px;
            text-decoration: none;
            border-radius: 5px;
            font-weight: 600;
            margin-top: 15px;
            transition: all 0.3s;
            font-size: 1.1em;
        }
        
        .cta-button:hover {
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(0,0,0,0.2);
            background: #f0f0f0;
        }
        
        .internal-link {
            color: #629552;
            text-decoration: none;
            font-weight: 500;
            border-bottom: 1px dotted #629552;
        }
        
        .internal-link:hover {
            color: #4a7139;
            border-bottom: 1px solid #4a7139;
        }
        
        blockquote {
            border-left: 4px solid #629552;
            padding-left: 20px;
            margin: 25px 0;
            font-style: italic;
            color: #555;
            background: #f9f9f9;
            padding: 15px 20px;
            border-radius: 4px;
        }
        
        code {
            background: #f5f5f5;
            padding: 2px 6px;
            border-radius: 3px;
            font-family: 'Consolas', 'Courier New', monospace;
            color: #d32f2f;
            font-size: 0.9em;
        }
        
        .sibling-links {
            background: #f0f4f8;
            padding: 20px;
            border-radius: 8px;
            margin: 30px 0;
        }
        
        .sibling-links h4 {
            margin-top: 0;
            color: #2c3e50;
        }
        
        .sibling-links ul {
            margin-bottom: 0;
        }
    </style>



<div class="article-container">

    <h1>Office Script pour automatiser un fichier FAB-DIS : guide pratique et exemples</h1>

    <div class="intro">
        <p>Vous gerez des fichiers FAB-DIS dans Excel et vous cherchez une alternative moderne a VBA ? <strong>Office Script</strong> est la reponse de Microsoft pour automatiser Excel sur le web. Base sur TypeScript, il permet d&rsquo;executer des scripts dans Excel Online et, surtout, de les connecter a <strong>Power Automate</strong> pour creer des flux entierement automatises.</p>
        
        <p>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 <strong>exemples de code prets a copier-coller</strong>, adaptes aux blocs B01, B02, B03 et B04 du standard FAB-DIS.</p>
    </div>

    <div class="service-mention">
        <span>💼</span>
        <div>
            <strong>Besoin d&rsquo;un accompagnement personnalise ?</strong> <a href="https://autoexcel.fr/" class="internal-link">AutoExcel</a> peut realiser pour vous les automatisations completes de vos fichiers FAB-DIS, que ce soit en VBA, Office Script ou Power Automate. <a href="https://autoexcel.fr/contact/" class="internal-link">Contactez-nous</a> pour un devis gratuit.
        </div>
    </div>

    <div class="sibling-links">
        <h4>Articles connexes de ce guide</h4>
        <ul>
            <li><a href="https://autoexcel.fr/fab-dis-et-automatisation-le-guide-ultime-pour-les-tpe-pme/" class="internal-link">FAB-DIS et automatisation : le guide ultime pour les TPE/PME</a> (Article pilier)</li>
            <li><a href="https://autoexcel.fr/quand-automatiser-et-quand-laisser-manuel-un-fab-dis/" class="internal-link">Quand automatiser et quand laisser manuel un FAB-DIS ?</a></li>
        </ul>
    </div>

    <h2>1. Office Script : qu&rsquo;est-ce que c&rsquo;est et pourquoi l&rsquo;utiliser pour le FAB-DIS ?</h2>

    <p>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 <strong>TypeScript</strong> (une version typee de JavaScript). Il fonctionne exclusivement dans <strong>Excel pour le web</strong> et <strong>Excel pour Microsoft 365</strong>.</p>

    <h3>Comparaison VBA vs Office Script</h3>

    <table class="comparison-table">
        <thead>
            <tr>
                <th>Critere</th>
                <th>VBA</th>
                <th>Office Script</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><strong>Langage</strong></td>
                <td>Visual Basic</td>
                <td>TypeScript</td>
            </tr>
            <tr>
                <td><strong>Environnement</strong></td>
                <td>Excel Desktop uniquement</td>
                <td>Excel Online + Desktop (M365)</td>
            </tr>
            <tr>
                <td><strong>Cloud / Collaboration</strong></td>
                <td><span class="cross-icon">✗</span> Non</td>
                <td><span class="check-icon">✓</span> Oui, natif</td>
            </tr>
            <tr>
                <td><strong>Power Automate</strong></td>
                <td><span class="cross-icon">✗</span> Non compatible</td>
                <td><span class="check-icon">✓</span> Integration native</td>
            </tr>
            <tr>
                <td><strong>Securite (macros)</strong></td>
                <td><span class="partial-icon">⚠</span> Bloque par defaut</td>
                <td><span class="check-icon">✓</span> Moins de restrictions</td>
            </tr>
            <tr>
                <td><strong>Maturite / Ecosysteme</strong></td>
                <td><span class="check-icon">✓</span> 30 ans d&rsquo;exemples</td>
                <td><span class="partial-icon">⚠</span> Plus recent</td>
            </tr>
        </tbody>
    </table>

    <h3>Pourquoi Office Script est ideal pour le FAB-DIS</h3>

    <div class="stats-box">
        <strong>Le cas d&rsquo;usage parfait :</strong><br>
        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. <strong>Sans intervention humaine.</strong>
    </div>

    <p>Les fichiers FAB-DIS sont particulierement adaptes a Office Script pour plusieurs raisons :</p>
    <ul>
        <li><strong>Structure tabulaire fixe</strong> : Les colonnes (MARQUE, REFCIALE, GTIN, TARIF&#8230;) sont standardisees, ce qui facilite l&rsquo;ecriture de scripts generiques.</li>
        <li><strong>Flux recurrents</strong> : La mise a jour des tarifs, l&rsquo;ajout de nouvelles references, la validation des donnees sont des taches repetitives.</li>
        <li><strong>Collaboration multi-acteurs</strong> : Fournisseurs, ADV, chefs de produits peuvent travailler sur le meme fichier cloud.</li>
        <li><strong>Integration ERP</strong> : Power Automate peut envoyer les donnees validees directement vers Sage, EBP, Cegid, etc.</li>
    </ul>

    <h2>2. Trois scripts Office Script prets a l&#8217;emploi pour le FAB-DIS</h2>

    <p>Voici trois scripts concrets que vous pouvez copier-coller directement dans l&rsquo;editeur Office Script (onglet <strong>Automatiser</strong> puis <strong>Nouveau script</strong> dans Excel Online).</p>

    <div class="script-card">
        <h4><span>📦</span> Script 1 : Valider les codes GTIN (EAN-13)</h4>
        
        <div class="use-case">
            <strong>Cas d&rsquo;usage :</strong> Avant d&rsquo;envoyer votre FAB-DIS a un distributeur, verifiez que tous les codes GTIN du bloc B01_COMMERCE sont valides (checksum correct).
        </div>

        <div class="code-block">
            <span class="code-label">Office Script</span>
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&rsquo;est pas vide
    let usedRange = sheet.getUsedRange();
    
    if (!usedRange) {
        console.log(« La feuille est vide »);
        return;
    }

    let values = usedRange.getValues();
    
    // Verifier qu&rsquo;il y a au moins une ligne de donnees
    if (values.length &lt; 2) {
        console.log(« Pas de donnees a traiter »);
        return;
    }

    // Chercher l&rsquo;index de la colonne GTIN dans l&rsquo;en-tete
    let headers: string[] = [];
    for (let h = 0; h &lt; 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 &lt; values.length; i++) {
        let gtinValue = values[i][gtinIndex];
        let gtin = String(gtinValue).trim();

        // Verifier seulement les GTIN de 13 caracteres
        if (gtin &amp;&amp; gtin.length === 13 &amp;&amp; /^\d{13}$/.test(gtin)) {
            if (!isValidEAN13(gtin)) {
                erreursCount++;
                console.log(« Ligne  » + (i + 1) + « : GTIN invalide -&gt;  » + gtin);
                
                // Colorer la cellule en rouge
                let cell = sheet.getCell(i, gtinIndex);
                cell.getFormat().getFill().setColor(« #FFCCCC »);
            }
        } else if (gtin &amp;&amp; gtin.length &gt; 0 &amp;&amp; gtin.length !== 13) {
            // GTIN avec mauvaise longueur
            erreursCount++;
            console.log(« Ligne  » + (i + 1) + « : GTIN longueur incorrecte ( » + gtin.length +  » car.) -&gt;  » + gtin);
            
            let cell = sheet.getCell(i, gtinIndex);
            cell.getFormat().getFill().setColor(« #FFE0B2 »);
        }
    }

    // Resume
    if (erreursCount &gt; 0) {
        console.log(« &#8212;« );
        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&rsquo;est bien 13 chiffres
    if (code.length !== 13) {
        return false;
    }
    
    for (let c = 0; c &lt; 13; c++) {
        if (code[c] &lt; « 0 » || code[c] &gt; « 9 ») {
            return false;
        }
    }

    // Calcul du checksum
    let sum = 0;
    for (let i = 0; i &lt; 12; i++) {
        let digit = parseInt(code.charAt(i), 10);
        if (i % 2 === 0) {
            sum += digit;
        } else {
            sum += digit * 3;
        }
    }

    let checkDigit = (10 &#8211; (sum % 10)) % 10;
    let lastDigit = parseInt(code.charAt(12), 10);

    return checkDigit === lastDigit;
}
        </div>
    </div>

    <div class="script-card">
        <h4><span>🗃</span> Script 2 : Nettoyer et normaliser les libelles (LIBELLE40)</h4>
        
        <div class="use-case">
            <strong>Cas d&rsquo;usage :</strong> Les libelles produits contiennent souvent des espaces en trop, des caracteres speciaux ou des incoherences de casse. Ce script uniformise tout.
        </div>

        <div class="code-block">
            <span class="code-label">Office Script</span>
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 &lt; 2) {
        console.log(« Pas de donnees a traiter »);
        return;
    }

    // Construire le tableau des en-tetes
    let headers: string[] = [];
    for (let h = 0; h &lt; 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 &lt; 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 &lt; 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(« &#8212;« );
    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\-\.,&rsquo;]/g, «  »);

    // Convertir en majuscules
    result = result.toUpperCase();

    return result;
}
        </div>
    </div>

    <div class="script-card">
        <h4><span>💰</span> Script 3 : Calculer automatiquement les prix de vente</h4>
        
        <div class="use-case">
            <strong>Cas d&rsquo;usage :</strong> Appliquer un coefficient multiplicateur au tarif d&rsquo;achat (colonne TARIF) pour obtenir un prix de vente, en fonction de la gamme produit.
        </div>

        <div class="code-block">
            <span class="code-label">Office Script</span>
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 &lt; 2) {
        console.log(« Pas de donnees a traiter »);
        return;
    }

    // Construire le tableau des en-tetes
    let headers: string[] = [];
    for (let h = 0; h &lt; 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 &#8211; 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 &lt; 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(« &#8212;« );
    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);
}
        </div>
    </div>

    <div class="warning-box">
        <strong>Astuce :</strong> Pour acceder a l&rsquo;editeur Office Script, ouvrez votre fichier Excel dans le navigateur (Excel Online), puis cliquez sur <strong>Automatiser</strong> puis <strong>Nouveau script</strong>. Collez le code et cliquez sur <strong>Executer</strong>.
    </div>

    <h2>3. Aller plus loin : Office Script + Power Automate</h2>

    <p>La vraie puissance d&rsquo;Office Script reside dans son integration avec <strong>Power Automate</strong>. Vous pouvez creer des flux automatiques qui declenchent vos scripts sans aucune action manuelle.</p>

    <h3>Exemple de flux automatise pour le FAB-DIS</h3>

    <div class="info-box">
        <h4 style="margin-top: 0; color: #1565c0;">Scenario : Traitement automatique d&rsquo;un FAB-DIS recu par email</h4>
        <ol>
            <li><strong>Declencheur :</strong> Un email arrive avec un fichier .xlsx en piece jointe (expediteur = fournisseur)</li>
            <li><strong>Action 1 :</strong> Enregistrer le fichier dans OneDrive/SharePoint</li>
            <li><strong>Action 2 :</strong> Executer le script « Valider GTIN »</li>
            <li><strong>Action 3 :</strong> Executer le script « Nettoyer libelles »</li>
            <li><strong>Action 4 :</strong> Si aucune erreur : envoyer une notification Teams « FAB-DIS OK »</li>
            <li><strong>Action 5 :</strong> Si erreurs : envoyer un email recapitulatif a l&rsquo;ADV</li>
        </ol>
    </div>

    <p>Ce type de flux transforme un processus de 30 minutes (ouvrir le fichier, verifier, nettoyer, sauvegarder, notifier) en un processus de <strong>0 minute</strong> pour l&rsquo;utilisateur.</p>

    <h3>Limites a connaitre</h3>

    <p>Office Script n&rsquo;est pas parfait. Voici les principales limitations a prendre en compte :</p>

    <ul>
        <li><strong>Pas d&rsquo;acces aux fichiers locaux</strong> : Le fichier doit etre sur OneDrive ou SharePoint.</li>
        <li><strong>Pas de UserForms</strong> : Contrairement a VBA, vous ne pouvez pas creer de fenetres interactives.</li>
        <li><strong>Performance sur gros volumes</strong> : Au-dela de 50 000 lignes, les temps d&rsquo;execution augmentent significativement.</li>
        <li><strong>Licence requise</strong> : Il faut une licence Microsoft 365 Business (pas la version gratuite).</li>
    </ul>

    <div class="success-box">
        <strong>Notre recommandation :</strong> 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. <a href="https://autoexcel.fr/quand-automatiser-et-quand-laisser-manuel-un-fab-dis/" class="internal-link">Consultez notre guide de decision</a>.
    </div>

    <div class="faq-section">
        <h2>FAQ : Office Script et FAB-DIS</h2>
        
        <div class="faq-item">
            <div class="faq-question">Office Script peut-il remplacer completement VBA ?</div>
            <div class="faq-answer">Non, pas encore. VBA reste necessaire pour : les UserForms, l&rsquo;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.</div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Faut-il savoir coder en TypeScript pour utiliser Office Script ?</div>
            <div class="faq-answer">Des bases en JavaScript/TypeScript aident, mais l&rsquo;editeur Office Script propose une fonction « Enregistrer les actions » qui genere le code automatiquement a partir de vos manipulations manuelles. Ideal pour debuter.</div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Combien de temps prend l&rsquo;execution d&rsquo;un script sur un FAB-DIS de 10 000 lignes ?</div>
            <div class="faq-answer">En moyenne, entre 5 et 30 secondes selon la complexite du script. La validation GTIN sur 10 000 lignes prend environ 10 secondes. C&rsquo;est plus lent que VBA local, mais suffisant pour des traitements automatises en arriere-plan.</div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Peut-on partager un script Office Script avec des collegues ?</div>
            <div class="faq-answer">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&rsquo;executer.</div>
        </div>
        
        <div class="faq-item">
            <div class="faq-question">Office Script fonctionne-t-il avec les fichiers .xls (ancien format) ?</div>
            <div class="faq-answer">Non. Office Script necessite le format .xlsx (Open XML). Si vos fournisseurs envoient des .xls, vous devrez d&rsquo;abord les convertir (manuellement ou via Power Automate).</div>
        </div>
    </div>

    <div class="cta-box">
        <h3>Vous souhaitez automatiser vos fichiers FAB-DIS ?</h3>
        <p>Que vous choisissiez VBA, Office Script ou Power Automate, nous pouvons vous accompagner dans la mise en place de vos automatisations sur mesure.</p>
        <p><strong>Validation GTIN, calculs tarifaires, enrichissement ETIM, integration ERP&#8230;</strong></p>
        <a href="https://autoexcel.fr/contact/" class="cta-button">Demander un devis gratuit</a>
    </div>

    <h2>Conclusion : Office Script, un allie puissant pour le FAB-DIS cloud</h2>

    <p>Office Script represente l&rsquo;avenir de l&rsquo;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&rsquo;est une opportunite de moderniser leurs processus FAB-DIS sans investir dans des outils couteux.</p>

    <p><strong>Ce qu&rsquo;il faut retenir :</strong></p>
    <ul>
        <li>Office Script est ideal pour les <strong>traitements recurrents</strong> et les <strong>flux automatises</strong> (Power Automate).</li>
        <li>Les scripts sont ecrits en <strong>TypeScript</strong>, plus moderne que VBA, mais avec une courbe d&rsquo;apprentissage.</li>
        <li>Pour les fichiers FAB-DIS, les cas d&rsquo;usage prioritaires sont : <strong>validation GTIN, nettoyage de donnees, calculs tarifaires</strong>.</li>
        <li>VBA reste pertinent pour les gros volumes et les traitements locaux.</li>
    </ul>

    <p>Pour aller plus loin, consultez notre <a href="https://autoexcel.fr/fab-dis-et-automatisation-le-guide-ultime-pour-les-tpe-pme/" class="internal-link">guide ultime FAB-DIS et automatisation</a>, ou decouvrez <a href="https://autoexcel.fr/quand-automatiser-et-quand-laisser-manuel-un-fichier-fab-dis/" class="internal-link">quand automatiser et quand laisser manuel</a> pour prendre les bonnes decisions.</p>

</div>
<p>Lisez plus sur <a href="https://autoexcel.fr/office-script-pour-automatiser-un-fichier-fab-dis/">AutoExcel</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://autoexcel.fr/office-script-pour-automatiser-un-fichier-fab-dis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
