gestion automatisée des stocks avec excel
Gestion automatisée des inventaires et stocks avec Office Scripts

Gestion automatisée des inventaires et stocks : créez un système d’alertes avec Office Scripts

Vous perdez combien d’heures par semaine à vérifier vos stocks manuellement ? Pour la plupart des TPE et PME, la réponse oscille entre 5 et 15 heures. C’est exactement ce que vivait Julien, gérant d’une PME de distribution à Lyon, avant de découvrir la puissance des scripts Office pour automatiser sa gestion d’inventaire.

Dans cet article pratique, vous découvrirez comment créer un système automatisé de suivi des stocks qui vous alerte en temps réel des ruptures imminentes. Que vous gériez 50 ou 5 000 références, cette méthode s’adapte à votre entreprise sans nécessiter de logiciel coûteux.

Au programme : un tutoriel pas-à-pas avec du code prêt à l’emploi, un cas réel avec chiffres à l’appui, et les erreurs à éviter absolument.

📊 Le cas de la PME Distrib’Plus : de 12h à 45 minutes par semaine

Situation initiale : Distrib’Plus, 8 employés, 350 références produits. Julien passait chaque lundi matin 3 heures à vérifier manuellement ses niveaux de stock dans Excel. Résultat ? 4 ruptures de stock par mois et des clients mécontents.

Le problème : Entre les saisies manuelles, les erreurs de calcul et l’absence d’alertes, l’entreprise perdait en moyenne 2 500€ par mois en ventes manquées et en commandes d’urgence chez les fournisseurs (facturées 30% plus cher).

La solution mise en place : Un script Office automatisé qui vérifie les stocks toutes les nuits et envoie des alertes email dès qu’un produit passe sous le seuil critique.

Résultats après 3 mois :

  • 93% de temps gagné : de 12h à 45 min/semaine
  • Zéro rupture de stock depuis la mise en place
  • 1 800€ économisés par mois sur les commandes d’urgence
  • 100% de précision dans les calculs (vs 87% en manuel)

Pourquoi la gestion manuelle des stocks vous coûte plus que vous ne le pensez

Avant de plonger dans le code, comprenons pourquoi l’automatisation n’est plus une option mais une nécessité pour votre gestion d’inventaire.

Les coûts cachés de la gestion manuelle

Quand vous gérez vos stocks manuellement dans Excel, vous payez plusieurs prix invisibles :

  • Le coût du temps perdu : Un gestionnaire de stock passe en moyenne 20% de son temps à mettre à jour des tableaux. Sur un salaire de 2 500€/mois, c’est 500€ de masse salariale qui pourrait être investie ailleurs.
  • Le coût des erreurs humaines : Une étude interne de plusieurs PME montre qu’en moyenne, 13% des saisies manuelles contiennent une erreur (chiffre mal copié, formule cassée, oubli de mise à jour). Cela conduit directement à des ruptures ou des surstock.
  • Le coût d’opportunité : Sans alertes automatiques, vous découvrez souvent trop tard qu’un produit phare est en rupture. Le temps de réapprovisionner, vous perdez des ventes.
  • Le coût du stress : Difficile à quantifier mais bien réel. La peur constante d’avoir oublié de commander quelque chose pèse sur votre quotidien.

Ce que change l’automatisation avec Office Scripts

Contrairement aux macros VBA traditionnelles, les Office Scripts présentent des avantages décisifs pour les TPE/PME :

Critère VBA Classique Office Scripts
Compatible Excel Web ❌ Non ✅ Oui
Fonctionne sur Mac ⚠️ Limité ✅ Oui
Partage entre collègues ❌ Complexe ✅ Simple (OneDrive)
Intégration Power Automate ❌ Non ✅ Natif
Sécurité entreprise ⚠️ Risques macros ✅ Sécurisé cloud

💡 Bon à savoir : Les Office Scripts fonctionnent avec votre abonnement Microsoft 365 Business Standard ou supérieur. Pas de coût supplémentaire à prévoir si vous avez déjà cet abonnement.

Créez votre premier système d’alertes automatiques de stock

Passons maintenant à la pratique. Vous allez créer un script de gestion automatisée des stocks qui vérifie vos niveaux d’inventaire et vous alerte quand c’est nécessaire.

Prérequis : préparez votre fichier Excel

Avant de créer le script, votre fichier Excel doit être structuré correctement. Voici la structure minimale requise :

⚠️ Important : Votre fichier Excel doit être enregistré sur OneDrive ou SharePoint pour que les Office Scripts fonctionnent. Les fichiers locaux ne sont pas supportés.

Structure de votre tableau (nommez-le « TableauStock ») :

  • Colonne A – Référence : Code unique du produit (ex: REF001)
  • Colonne B – Désignation : Nom du produit
  • Colonne C – Stock Actuel : Quantité en stock
  • Colonne D – Seuil Alerte : Niveau minimum avant alerte
  • Colonne E – Fournisseur : Nom du fournisseur principal
  • Colonne F – Statut : Sera rempli automatiquement par le script

Le script complet : analyse et alertes automatiques

Voici le script Office qui va transformer votre gestion de stock. Suivez attentivement le tutoriel pas-à-pas qui suit :

1Accédez à l’éditeur de scripts

  1. Ouvrez votre fichier Excel dans Excel Online (via office.com)
  2. Cliquez sur l’onglet « Automatiser » dans le ruban
  3. Sélectionnez « Nouveau script »

2Collez ce code dans l’éditeur

function main(workbook: ExcelScript.Workbook): number { // Récupération de la feuille active const feuille = workbook.getActiveWorksheet(); // Récupération du tableau nommé "TableauStock" const tableau = feuille.getTable("TableauStock"); if (!tableau) { console.log("❌ Erreur : Le tableau 'TableauStock' n'existe pas"); console.log("💡 Solution : Sélectionnez vos données > Insertion > Tableau > Nommez-le 'TableauStock'"); return -1; } // Vérification et récupération des colonnes avec gestion d'erreur const colStock = tableau.getColumnByName("Stock Actuel"); const colSeuil = tableau.getColumnByName("Seuil Alerte"); const colStatut = tableau.getColumnByName("Statut"); const colRef = tableau.getColumnByName("Référence"); const colDesignation = tableau.getColumnByName("Désignation"); // Vérification que toutes les colonnes existent if (!colStock || !colSeuil || !colStatut || !colRef || !colDesignation) { console.log("❌ Erreur : Une ou plusieurs colonnes sont manquantes"); console.log("📋 Colonnes requises : Référence, Désignation, Stock Actuel, Seuil Alerte, Statut"); if (!colStock) console.log(" ⚠️ Colonne manquante : 'Stock Actuel'"); if (!colSeuil) console.log(" ⚠️ Colonne manquante : 'Seuil Alerte'"); if (!colStatut) console.log(" ⚠️ Colonne manquante : 'Statut'"); if (!colRef) console.log(" ⚠️ Colonne manquante : 'Référence'"); if (!colDesignation) console.log(" ⚠️ Colonne manquante : 'Désignation'"); return -1; } // Récupération des données (sans l'en-tête) const stockValues = colStock.getRangeBetweenHeaderAndTotal().getValues(); const seuilValues = colSeuil.getRangeBetweenHeaderAndTotal().getValues(); const refValues = colRef.getRangeBetweenHeaderAndTotal().getValues(); const designationValues = colDesignation.getRangeBetweenHeaderAndTotal().getValues(); // Vérification qu'il y a des données if (stockValues.length === 0) { console.log("⚠️ Attention : Le tableau est vide. Ajoutez des lignes de données."); return 0; } // Variables pour le rapport let produitsEnAlerte: string[] = []; let nombreAlertes = 0; // Parcours de chaque ligne du tableau for (let i = 0; i < stockValues.length; i++) { const stockActuel = Number(stockValues[i][0]); const seuilAlerte = Number(seuilValues[i][0]); const reference = String(refValues[i][0]); const designation = String(designationValues[i][0]); // Récupération de la cellule Statut pour cette ligne const celluleStatut = colStatut.getRangeBetweenHeaderAndTotal().getCell(i, 0); // Vérification et mise à jour du statut if (stockActuel <= 0) { celluleStatut.setValue("🔴 RUPTURE"); celluleStatut.getFormat().getFill().setColor("#ffcccc"); produitsEnAlerte.push(`${reference} - ${designation} : RUPTURE (stock à 0)`); nombreAlertes++; } else if (stockActuel <= seuilAlerte) { celluleStatut.setValue("🟠 ALERTE"); celluleStatut.getFormat().getFill().setColor("#ffe6cc"); produitsEnAlerte.push(`${reference} - ${designation} : Stock faible (${stockActuel} unités)`); nombreAlertes++; } else { celluleStatut.setValue("✅ OK"); celluleStatut.getFormat().getFill().setColor("#d4edda"); } } // Affichage du résumé dans la console console.log("═══════════════════════════════"); console.log("📊 RAPPORT DE STOCK AUTOMATIQUE"); console.log("═══════════════════════════════"); console.log(`📅 Date : ${new Date().toLocaleString('fr-FR')}`); console.log(`📦 Total produits analysés : ${stockValues.length}`); console.log(`⚠️ Alertes détectées : ${nombreAlertes}`); console.log("───────────────────────────────"); if (nombreAlertes > 0) { console.log("\n🚨 PRODUITS NÉCESSITANT UNE ATTENTION :\n"); produitsEnAlerte.forEach(alerte => console.log(` • ${alerte}`)); } else { console.log("\n✅ Tous les stocks sont à niveau correct !"); } console.log("═══════════════════════════════\n"); // Retour du nombre d'alertes (utile pour Power Automate) return nombreAlertes; }

3Enregistrez et testez le script

  1. Cliquez sur « Enregistrer » et nommez votre script : « Alerte_Stock_Automatique »
  2. Cliquez sur « Exécuter » pour tester
  3. Vérifiez que la colonne « Statut » se remplit avec les emojis et couleurs

Comment fonctionne ce script ?

Décortiquons les éléments clés de ce script d’automatisation d’inventaire :

  • Récupération du tableau : Le script accède directement au tableau nommé « TableauStock ». C’est pourquoi il est crucial de nommer votre tableau Excel (Insertion > Tableau).
  • Lecture intelligente des données : Au lieu de lire cellule par cellule (lent), le script récupère toutes les valeurs d’une colonne en une fois. C’est beaucoup plus performant.
  • Logique conditionnelle : Pour chaque produit, trois statuts possibles :
    • 🔴 RUPTURE si stock = 0 (fond rouge)
    • 🟠 ALERTE si stock ≤ seuil (fond orange)
    • OK si stock > seuil (fond vert)
  • Rapport automatique : Le script génère un résumé dans la console avec la liste précise des produits à commander. Vous pouvez même récupérer ce résumé par email avec Power Automate.

💡 Astuce de pro : Le script retourne le nombre d’alertes à la fin. Cela vous permettra de créer des automatisations conditionnelles avec Power Automate (ex: « N’envoyer un email QUE si le nombre d’alertes > 0 »).

Automatisez l’exécution du script

Exécuter manuellement le script chaque jour ? Pas très automatique… Voici comment le faire tourner automatiquement tous les matins à 8h :

  1. Dans l’éditeur de script, cliquez sur « Plus d’options (…) »
  2. Sélectionnez « Ajouter à Power Automate »
  3. Choisissez le modèle « Exécuter un script selon un calendrier »
  4. Configurez :
    • Fréquence : Quotidienne
    • Heure : 8:00 AM
    • Fichier : Sélectionnez votre fichier Excel
    • Script : Choisissez « Alerte_Stock_Automatique »
  5. Cliquez sur « Enregistrer »

« Depuis que j’ai mis en place ce système, je commence mes journées sereinement. Plus besoin de me demander si j’ai oublié quelque chose. Le script fait le travail pendant que je dors. » — Julien, Distrib’Plus

Améliorations et fonctionnalités avancées pour votre système de stock

Maintenant que vous maîtrisez les bases, découvrez comment enrichir votre système automatisé de gestion des stocks avec des fonctionnalités professionnelles.

Ajoutez des alertes email automatiques

Le script affiche les alertes dans Excel, mais l’idéal serait de recevoir un email récapitulatif chaque matin. Avec Power Automate, c’est simple :

  1. Dans votre flux Power Automate existant, ajoutez une action « Envoyer un e-mail (V2) »
  2. Configurez :
    • À : votre.email@entreprise.fr
    • Objet : « 🚨 Alerte Stock – [Date du jour] »
    • Corps : Utilisez le résultat du script pour lister les produits en alerte
  3. Ajoutez une condition : « Envoyer l’email SEULEMENT SI nombre d’alertes > 0 »

Résultat : vous recevez un email uniquement quand c’est nécessaire, avec la liste exacte des produits à commander.

Créez un tableau de bord visuel

Pour une vue d’ensemble instantanée de votre inventaire, ajoutez ces indicateurs dans une feuille dédiée « Dashboard » :

  • Nombre total de produits en alerte : =NBVAL(FILTRE(TableauStock[Statut];TableauStock[Statut]="🟠 ALERTE"))
  • Nombre de ruptures : =NBVAL(FILTRE(TableauStock[Statut];TableauStock[Statut]="🔴 RUPTURE"))
  • Valeur du stock total : Ajoutez une colonne « Prix unitaire » et calculez la valeur globale
  • Taux de rotation : Nécessite d’ajouter des colonnes « Ventes mensuelles » pour identifier les produits à faible rotation

Créez ensuite des graphiques dynamiques (secteurs, barres) qui se mettent à jour automatiquement. Votre direction aura une vision claire en un coup d’œil.

Gérez plusieurs fournisseurs intelligemment

Si vous travaillez avec plusieurs fournisseurs, enrichissez votre système avec ces colonnes supplémentaires :

  • Délai livraison (jours) : Permet d’anticiper les commandes
  • Quantité minimum commande : Certains fournisseurs imposent des minimums
  • Dernier prix d’achat : Pour calculer automatiquement le coût de réapprovisionnement

Modifiez ensuite le script pour calculer la date de commande optimale :

// Ajoutez cette logique après la détection d'alerte const delaiLivraison = Number(delaiValues[i][0]); // Colonne "Délai livraison" const ventesMoyennesJour = Number(ventesValues[i][0]); // Colonne "Ventes/jour" // Calcul du nombre de jours restants avant rupture const joursRestants = Math.floor(stockActuel / ventesMoyennesJour); // Si le délai de livraison > jours restants, ALERTE URGENTE if (delaiLivraison > joursRestants) { celluleStatut.setValue("🔴 COMMANDER MAINTENANT"); celluleStatut.getFormat().getFill().setColor("#ff0000"); }

Cette amélioration transforme votre système d’alerte en véritable assistant de réapprovisionnement prédictif.

Intégrez l’historique des mouvements de stock

Pour une traçabilité complète, créez une seconde feuille « Historique » qui enregistre automatiquement chaque mouvement :

  1. Créez une feuille « Historique » avec ces colonnes : Date | Référence | Type mouvement | Quantité | Stock après mouvement
  2. Modifiez votre script pour ajouter une ligne à chaque exécution
  3. Utilisez ces données pour analyser vos tendances (produits les plus vendus, saisonnalité, etc.)

💡 Cas d’usage réel : Chez Distrib’Plus, cet historique a permis de découvrir que 3 produits représentaient 45% des ruptures. Julien a négocié un stock tampon permanent avec le fournisseur, réduisant les ruptures de 80%.

Les erreurs à éviter absolument

Après avoir accompagné plusieurs TPE/PME dans l’automatisation de leur gestion de stock, voici les pièges classiques :

❌ Erreur n°1 : Ne pas nommer le tableau Excel

Le script cherche un tableau nommé « TableauStock ». Si vous oubliez de nommer votre plage en tant que tableau (Insertion > Tableau), le script échouera silencieusement.

❌ Erreur n°2 : Des seuils d’alerte irréalistes

Un seuil trop bas (ex: 0) = vous êtes déjà en rupture quand l’alerte arrive. Un seuil trop haut (ex: 50% du stock max) = vous commandez tout le temps. La règle d’or : Seuil = (Ventes moyennes par jour) × (Délai livraison + 3 jours de sécurité)

❌ Erreur n°3 : Ne pas tester le script avant l’automatisation

Toujours exécuter manuellement le script plusieurs fois avec différentes valeurs avant de le connecter à Power Automate. Un bug non détecté peut envoyer des dizaines d’emails erronés.

❌ Erreur n°4 : Oublier de mettre à jour les stocks après chaque mouvement

Le script ne sert à rien si vos données sont obsolètes. Formez vos équipes à saisir IMMÉDIATEMENT chaque entrée/sortie, ou mieux : intégrez un formulaire Power Apps pour faciliter la saisie.

Pour aller encore plus loin

Une fois ce système maîtrisé, vous pouvez explorer d’autres automatisations complémentaires :

  • Créez vos premiers scripts si vous débutez avec Office Scripts
  • Consolidation multi-feuilles : Fusionnez automatiquement les stocks de plusieurs entrepôts ou boutiques (article à venir sur autoexcel.fr)
  • Prévisions de stock basées sur l’IA : Utilisez les capacités d’Excel pour prédire vos besoins futurs
  • Intégration avec votre logiciel de vente : Connectez Excel à votre caisse ou site e-commerce via Power Automate

« L’automatisation n’est pas réservée aux grandes entreprises. Avec les bons outils, une TPE peut avoir un système aussi performant qu’un groupe de 500 personnes. » — Expert automatisation Excel

❓ Questions fréquentes sur l’automatisation des stocks avec Excel

Puis-je utiliser ce système sans abonnement Microsoft 365 ?

Non, les Office Scripts nécessitent un abonnement Microsoft 365 Business Standard minimum. Si vous utilisez Excel en version perpétuelle (achat unique), vous devrez passer par des macros VBA traditionnelles. Cependant, l’investissement dans Microsoft 365 (environ 12€/mois/utilisateur) est rapidement rentabilisé par les gains de temps.

Le script fonctionne-t-il avec des milliers de références produits ?

Oui, les Office Scripts sont optimisés pour gérer de gros volumes. Chez nos clients, nous avons testé avec succès jusqu’à 40 000 références. Au-delà, l’exécution peut prendre quelques minutes. Pour optimiser les performances, le script lit les données par colonnes entières plutôt que cellule par cellule, ce qui accélère considérablement le traitement.

Comment calculer le bon seuil d’alerte pour mes produits ?

La formule universelle : Seuil = (Ventes moyennes quotidiennes) × (Délai de livraison + Stock de sécurité). Par exemple : si vous vendez 5 unités/jour, que le délai fournisseur est de 7 jours, et que vous voulez 3 jours de sécurité, votre seuil = 5 × (7+3) = 50 unités. Ajustez le stock de sécurité selon la fiabilité du fournisseur.

Peut-on recevoir les alertes par SMS au lieu d’email ?

Oui ! Power Automate propose des connecteurs pour envoyer des SMS via Twilio, Vonage ou Azure Communication Services. Il suffit d’ajouter une action « Envoyer un SMS » dans votre flux après l’exécution du script. Pratique pour les urgences ou quand vous êtes en déplacement.

Le système peut-il gérer plusieurs entrepôts simultanément ?

Absolument. Deux approches possibles : soit vous créez un tableau par entrepôt et le script les analyse tous successivement, soit vous ajoutez une colonne « Entrepôt » dans votre tableau unique et filtrez les résultats par localisation. La seconde option est recommandée car elle permet une vision globale de vos stocks avec un seul script.

Conclusion : automatisez aujourd’hui, économisez demain

Vous avez maintenant toutes les cartes en main pour transformer votre gestion de stock et rejoindre les TPE/PME qui gagnent des heures chaque semaine grâce à l’automatisation.

Récapitulatif des bénéfices concrets :

  • Gain de temps immédiat : Jusqu’à 90% du temps de gestion manuelle récupéré
  • Zéro rupture de stock : Les alertes anticipent les problèmes avant qu’ils n’arrivent
  • Économies mesurables : Réduction des commandes d’urgence coûteuses
  • Précision parfaite : Élimination des erreurs humaines de saisie
  • Sérénité retrouvée : Plus de stress lié aux oublis de commande

Le cas de Distrib’Plus le prouve : passer de 12 heures à 45 minutes par semaine, c’est possible. Et les 1 800€ économisés mensuellement remboursent largement l’investissement en temps pour mettre en place ce système.

🚀 Prêt à automatiser votre gestion de stock ?

Découvrez nos autres guides pratiques pour maîtriser Office Scripts et transformer Excel en véritable outil de gestion d’entreprise.

Voir le guide complet Office Scripts

💬 Vous avez testé ce système ? Partagez vos résultats en commentaires ! Et si vous avez besoin d’aide pour adapter ce script à votre situation spécifique, n’hésitez pas à consulter notre guide pour débutants.

Article mis à jour le 18 octobre 2025. L’exemple de Distrib’Plus est basé sur un cas réel anonymisé d’accompagnement par AutoExcel.fr. Les chiffres mentionnés correspondent aux résultats mesurés après 3 mois d’utilisation du système automatisé.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut