# Gestion des stocks dans Google Sheets

> Gérer un stock dans Google Sheets : journal des mouvements, formules qui fonctionnent, alertes de stock bas, protection, historique et limites à anticiper.

Source: https://www.lightinventory.com/fr/guides/gestion-stock-google-sheets · Last updated: 2026-10-28

Vous pouvez gérer un stock fiable dans Google Sheets à condition de ne jamais écraser une quantité en stock. Enregistrez chaque réception, sortie, ajustement et transfert sous forme de nouvelle ligne dans un journal des mouvements, et laissez les formules calculer ce qui est disponible. Ce seul choix de conception vous donne le stock par emplacement, des alertes de stock bas et un historique lisible, le tout avec des fonctions intégrées.

Ce guide présente la structure de la feuille, les formules, la validation des données, la protection, l’historique et les limites de Google Sheets qui comptent. Il se termine par un regard honnête sur le moment où Google Sheets seul ne suffit plus.

## Concevoir la feuille de calcul

Utilisez une seule feuille de calcul avec trois onglets. Chaque onglet a une seule fonction.

| Onglet | Une ligne correspond à | Vous le modifiez quand |
|---|---|---|
| `Items` | Un produit ou une pièce | Vous ajoutez un article ou modifiez ses informations |
| `Locations` | Un entrepôt, une pièce, une étagère ou une camionnette | Vous ajoutez ou renommez un emplacement |
| `Movements` | Une variation de stock | Quelque chose entre, sort ou change d’emplacement |

### Items

| Colonne | En-tête | Exemple | Remarques |
|---|---|---|---|
| A | SKU | `BOLT-M8-40` | Unique, jamais réutilisé. Mettez la colonne au format texte brut |
| B | Nom | Vis à tête hexagonale M8 × 40 mm | |
| C | Unité | boîte | L’unité utilisée par chaque mouvement |
| D | Seuil de réapprovisionnement | 20 | Quand le stock disponible atteint ce niveau, recommandez |
| E | Stock disponible | *(formule)* | Jamais saisi à la main |
| F | Statut | *(formule)* | `Reorder` ou `OK` |

### Locations

| Colonne | En-tête | Exemple |
|---|---|---|
| A | Emplacement | `WH1` |
| B | Nom | Entrepôt principal |

### Movements : le journal

| Colonne | En-tête | Exemple | Remarques |
|---|---|---|---|
| A | Date | 28/10/2026 | Une vraie valeur de date, pas du texte |
| B | SKU | `BOLT-M8-40` | Menu déroulant issu de `Items` |
| C | Emplacement | `WH1` | Menu déroulant issu de `Locations` |
| D | Qté | `-5` | Une valeur positive ajoute du stock, une valeur négative en retire |
| E | Type | `Issue` | `Receive`, `Issue`, `Adjust` ou `Transfer` |
| F | Référence | PO-1042 | Bon de commande, chantier ou feuille d’inventaire |
| G | Saisi par | Sam | La personne qui a enregistré le mouvement |
| H | Note | Endommagé pendant le transport | Pourquoi, quand ce n’est pas évident |

Un transfert correspond à deux lignes : `-5` à l’emplacement d’origine et `+5` à l’emplacement de destination, toutes deux de type `Transfer` et avec la même référence. Un inventaire qui constate 3 unités de moins que prévu correspond à une seule ligne `Adjust` de `-3`.

### Pourquoi un journal où l’on ne fait qu’ajouter vaut mieux qu’une colonne de quantité

La feuille de stock la plus courante comporte une seule colonne « Quantité » que chacun écrase. Elle fonctionne jusqu’au jour où quelque chose tourne mal, et elle ne peut alors pas vous dire ce qui s’est passé.

- **Un nombre écrasé ne raconte rien.** Si 40 devient 25, la feuille ne dit pas si 15 unités ont été vendues, perdues ou mal comptées. Une ligne du journal indique `-15`, `Issue`, `JOB-311`, avec une date et un nom.
- **Deux personnes ne peuvent pas modifier un même nombre sans risque.** Si deux personnes prennent chacune 5 boîtes et remplacent toutes les deux 40 par 35, un mouvement est perdu. Deux lignes ajoutées de `-5` donnent le bon total.
- **On corrige les erreurs en ajoutant, pas en effaçant.** Une ligne erronée est corrigée par une ligne inverse : l’erreur et la correction restent toutes deux visibles.
- **Le stock à n’importe quelle date est à une formule près.** Additionnez les mouvements jusqu’à cette date.
- **Le stock par emplacement est obtenu sans effort.** Les mêmes lignes donnent les totaux par article, par emplacement, ou les deux.

La règle pour tous les utilisateurs de la feuille est simple : ajoutez des lignes dans `Movements`, ne modifiez et ne supprimez jamais les anciennes.

## Formules pour le stock disponible

Toutes les formules ci-dessous supposent la structure d’onglets et de colonnes décrite ci-dessus, avec les en-têtes en ligne 1.

> **Note:** Les formules séparent les arguments par des virgules. Si votre feuille utilise des paramètres régionaux avec virgule décimale, comme la France, Google Sheets attend des points-virgules : remplacez les virgules entre les arguments (pas celles du texte entre guillemets) par `;`.

### Stock disponible par article

Dans `Items!E2`, puis étendez vers le bas :

```
=SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2)
```

[SUMIFS](https://support.google.com/docs/answer/3238496?hl=fr) additionne chaque quantité (colonne D) du journal dont le SKU correspond à l’article de la ligne.

Pour remplir toute la colonne avec une seule formule, placez plutôt celle-ci dans `Items!E2` et laissez les cellules situées en dessous vides :

```
=ARRAYFORMULA(IF(A2:A="", "", SUMIF(Movements!B:B, A2:A, Movements!D:D)))
```

### Stock disponible par article et par emplacement

Pour un article à un emplacement donné, par exemple l’emplacement saisi dans la cellule `H1` de `Items` :

```
=SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2, Movements!$C:$C, $H$1)
```

Pour un tableau de stock complet dans son propre onglet, utilisez [QUERY](https://support.google.com/docs/answer/3093343?hl=fr). Cette formule liste chaque paire article et emplacement qui a des mouvements :

```
=QUERY(Movements!A1:H, "select B, C, sum(D) where B is not null group by B, C label sum(D) 'On hand'", 1)
```

Celle-ci transforme les emplacements en colonnes, avec une ligne par article :

```
=QUERY(Movements!A1:H, "select B, sum(D) where B is not null group by B pivot C", 1)
```

> **Note:** QUERY attend un seul type de données par colonne. La documentation de Google indique qu’en cas de types mélangés dans une colonne, c’est le type de données majoritaire qui détermine celui de la colonne, et les autres valeurs sont considérées comme vides. Gardez les SKU en texte brut et les dates en vraies dates.

### Stock à une date passée

Pour voir le stock disponible à la fin d’une journée donnée, par exemple la date indiquée dans `Items!H2` :

```
=SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2, Movements!$A:$A, "<="&$H$2)
```

### Repérer un stock négatif

Un emplacement ne peut pas contenir moins de zéro. Cette formule liste chaque paire article et emplacement en dessous de zéro, ce qui signale généralement une réception manquante ou une faute de frappe :

```
=QUERY(QUERY(Movements!A1:H, "select B, C, sum(D) where B is not null group by B, C", 1), "select * where Col3 < 0", 1)
```

Le QUERY intérieur calcule les totaux par emplacement ; le QUERY extérieur ne conserve que les lignes négatives. Un résultat vide signifie qu’aucun emplacement n’est en dessous de zéro.

## Alertes de stock bas et seuils de réapprovisionnement

### Une colonne de statut

Dans `Items!F2`, puis étendez vers le bas :

```
=IF(D2="", "", IF(E2<=D2, "Reorder", "OK"))
```

Le statut reste vide tant qu’aucun seuil de réapprovisionnement n’est défini, pour que les nouveaux articles ne déclenchent pas de fausse alerte.

### Mettre en évidence les lignes à réapprovisionner

1. Sélectionnez `A2:F` dans l’onglet `Items`.
2. Cliquez sur **Format → Mise en forme conditionnelle**.
3. Sous **Mettre en forme les cellules si**, choisissez **La formule personnalisée est**.
4. Saisissez `=AND($D2<>"", $E2<=$D2)`.
5. Choisissez une couleur de remplissage et cliquez sur **OK**.

Les signes dollar fixent les colonnes tandis que la ligne varie : c’est donc toute la ligne qui change de couleur. Google signale que les formules de mise en forme conditionnelle [peuvent uniquement faire référence à la même feuille de calcul](https://support.google.com/docs/answer/78413?hl=fr), sauf si vous utilisez `INDIRECT`. C’est pourquoi le stock disponible et le seuil de réapprovisionnement se trouvent côte à côte dans l’onglet `Items`.

La même fonctionnalité permet de signaler les lignes du journal dont le signe ne correspond pas au type. Sélectionnez `A2:H` dans `Movements` et utilisez :

```
=OR(AND($E2="Receive", $D2<0), AND($E2="Issue", $D2>0))
```

### Les bases du seuil de réapprovisionnement

Un seuil de réapprovisionnement répond à une seule question : jusqu’où le stock peut-il descendre avant que vous deviez commander, pour que la nouvelle livraison arrive avant la rupture ? La formule de base est la suivante :

**Seuil de réapprovisionnement = consommation moyenne par jour × délai de livraison en jours + stock de sécurité**

- **La consommation moyenne par jour** provient de votre journal.
- **Le délai de livraison** est le nombre de jours entre la commande et la mise en rayon du stock.
- **Le stock de sécurité** est la marge prévue pour les livraisons lentes ou les semaines chargées.

Ajoutez trois colonnes auxiliaires à `Items` : G « Conso. moy. par jour (30 jours) », H « Délai (jours) » et I « Stock de sécurité ». Dans `G2` :

```
=-SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2, Movements!$E:$E, "Issue", Movements!$A:$A, ">="&(TODAY()-30))/30
```

Le signe moins transforme les quantités négatives de type `Issue` en un taux de consommation positif. Définissez ensuite le seuil de réapprovisionnement dans `D2` :

```
=ROUNDUP(G2*H2 + I2, 0)
```

Par exemple, un article consommé à raison de 4 boîtes par jour, avec un délai de livraison de 5 jours et un stock de sécurité de 10 boîtes, a un seuil de réapprovisionnement de 4 × 5 + 10 = 30. Revoyez les délais et le stock de sécurité lorsque les fournisseurs ou les saisons changent ; la formule ne vaut que ce que valent ces deux données.

## Validation des données et menus déroulants

Les menus déroulants évitent les fautes de frappe qui faussent SUMIFS et QUERY : un SKU suivi d’un espace ou un emplacement écrit de deux façons ne correspond jamais.

### Ajouter un menu déroulant à partir d’une plage

1. Dans `Movements`, sélectionnez `B2:B`.
2. Cliquez sur **Données → Validation des données → Ajouter une règle**.
3. Sous **Critères**, choisissez **Menu déroulant (depuis une plage)** et saisissez `Items!A2:A`.
4. Cliquez sur **OK**.

Répétez l’opération pour `C2:C` avec `Locations!A2:A`. Pour `E2:E`, choisissez **Menu déroulant** et ajoutez les éléments `Receive`, `Issue`, `Adjust` et `Transfer`. Google propose aussi **Insérer → Menu déroulant** et une option **Menu déroulant** accessible par clic droit ; toutes ouvrent le même [panneau des règles de validation des données](https://support.google.com/docs/answer/186103?hl=fr).

### Refuser ou avertir

Par défaut, Google Sheets refuse une saisie qui ne correspond pas à la liste. Si vous préférez l’accepter avec un avertissement, ouvrez **Options avancées** et, sous **Si les données ne sont pas valides**, sélectionnez **Afficher un avertissement**. Pour un journal de stock, conservez le refus : un mouvement portant sur un SKU inconnu est presque toujours une erreur.

Ajoutez aussi une règle de validation sur `D2:D` qui n’accepte que des nombres, et sur `A2:A` qui n’accepte que des dates. Une quantité saisie sous forme de texte est ignorée par SUMIFS, et le stock reste faux sans que rien ne le signale.

## Protéger des plages et partager avec soin

Les autorisations de Google Sheets comportent deux niveaux, et les deux comptent.

1. **Le partage** détermine qui peut ouvrir le fichier et avec quel rôle : Lecteur, Commentateur ou Éditeur. Vous le configurez avec **Partager**, et il s’applique à tout le fichier.
2. **Les feuilles et plages protégées** restreignent ce que les éditeurs peuvent modifier à l’intérieur du fichier.

### Protéger ce que personne ne doit saisir

1. Cliquez sur **Données → Protéger des feuilles et des plages**.
2. Cliquez sur **Ajouter une feuille ou une plage**.
3. Choisissez **Plage** et sélectionnez `Items!E2:F` (les colonnes de formules).
4. Cliquez sur **Définir les autorisations**.
5. Sélectionnez **Restreindre les utilisateurs autorisés à modifier cette plage**, choisissez **Vous uniquement**, puis cliquez sur **OK**.

Protégez de la même façon tout l’onglet `Locations` si la liste change rarement. Dans `Movements`, les utilisateurs doivent pouvoir ajouter des lignes : une protection stricte ne convient donc pas. Utilisez plutôt **Afficher un avertissement lorsque cette plage est modifiée** sur les lignes existantes ; les utilisateurs devront confirmer avant de modifier l’historique.

Sachez ce que la protection ne fait pas. Selon Google, cette fonctionnalité [« ne doit toutefois pas être considérée comme un dispositif de protection »](https://support.google.com/docs/answer/1218656?hl=fr), et il « restera possible d’imprimer, de copier et de coller la feuille de calcul protégée, et d’en importer et exporter des copies ». Le propriétaire peut toujours modifier une plage protégée, et vous ne pouvez pas protéger des données par un mot de passe. Les étapes détaillées se trouvent dans [Protéger une feuille ou une plage](/fr/aide/google-sheets/proteger-des-plages).

### Partager avec le rôle le plus restreint

- Attribuez le rôle **Lecteur** aux personnes qui ont seulement besoin de consulter le stock.
- Réservez le rôle **Éditeur** aux personnes qui enregistrent des mouvements.
- Les paramètres de partage de Google vous permettent d’empêcher les éditeurs de partager le fichier, comme l’explique la page [Partager des fichiers depuis Google Drive](https://support.google.com/drive/answer/2494822?hl=fr).

## Historique des versions et historique des modifications des cellules

Google Sheets conserve deux types d’historique : les versions de tout le fichier et l’historique des modifications d’une cellule. [Vous ne pouvez pas voir l’historique des versions](https://support.google.com/docs/answer/190843?hl=fr) sans être autorisé à modifier le fichier.

### Historique des versions

Pour voir les versions antérieures, cliquez sur **Dernière modification** en haut à droite de la feuille de calcul. Choisissez une version dans le panneau de droite pour voir qui a modifié quoi. Par défaut, Google Sheets masque les lignes non modifiées ; cliquez sur **Afficher les lignes non modifiées** pour tout voir.

Vous pouvez restaurer une version ou en créer une copie. La restauration d’une version de la feuille de calcul efface l’historique des modifications cellule par cellule pour les modifications effectuées avant la restauration : pour un fichier de stock très utilisé, une copie est donc généralement le choix le plus sûr. Consultez [Restaurer une version antérieure](/fr/aide/google-sheets/restaurer-une-version).

Vous pouvez nommer jusqu’à 15 versions par feuille de calcul, et les versions nommées ne sont pas fusionnées. Nommez-en une après chaque inventaire, par exemple « Inventaire 31/10/2026 », pour pouvoir toujours y revenir.

### Historique des modifications des cellules

Faites un clic droit sur une cellule et choisissez **Afficher l’historique des modifications** pour voir qui l’a modifiée. Google liste les modifications qui peuvent ne pas y apparaître :

- les lignes et colonnes ajoutées ou supprimées ;
- les modifications apportées au format de la cellule ;
- les modifications effectuées avant la restauration d’une version antérieure;
- les modifications effectuées à l’aide de formules .

Ce dernier point compte pour une feuille pilotée par des formules : les cellules de stock disponible (colonne E) changent via des formules, et leur historique des modifications n’expliquera donc pas un nouveau chiffre. Les lignes du journal, si. Pour plus de détails, consultez [Savoir qui a modifié une cellule](/fr/aide/google-sheets/qui-a-modifie-une-cellule).

### Notifications de modification

Cliquez sur **Outils → Paramètres de notification → Modifier les notifications** pour recevoir un e-mail lorsque d’autres personnes modifient la feuille de calcul, immédiatement ou sous forme de résumé quotidien. Google précise que [vous ne pouvez configurer des notifications que pour vous-même](https://support.google.com/docs/answer/91588?hl=fr).

## Les limites de Google Sheets à anticiper

Voici les limites documentées par Google, telles que vérifiées le 28 octobre 2026. La liste complète, avec la marche à suivre à l’approche de chacune, se trouve dans [Limites de Google Sheets pour la gestion des stocks](/fr/aide/google-sheets/limites).

| Limite | Ce que Google documente |
|---|---|
| Cellules par feuille de calcul | Jusqu’à 20 millions de cellules ou 100 Mo pour les feuilles de calcul créées dans Google Sheets ou converties à ce format ([limites des fichiers Drive](https://support.google.com/drive/answer/37603?hl=fr)). Google l’a relevée de 10 millions en septembre 2026 ([Workspace Updates](https://workspaceupdates.googleblog.com/2026/09/doubled-cell-limits-in-google-sheets-now-generally-available.html)) |
| Personnes qui modifient en même temps | Un fichier Google ne peut être modifié activement que sur 100 onglets ouverts ou appareils au maximum en même temps ([limites de partage](https://support.google.com/drive/answer/2494822?hl=fr)) |
| Partage | Jusqu’à 600 adresses e-mail individuelles par fichier ([limites de partage](https://support.google.com/drive/answer/2494822?hl=fr)) |
| Versions nommées | Jusqu’à 15 par feuille de calcul ([historique des versions](https://support.google.com/docs/answer/190843?hl=fr)) |
| IMPORTRANGE | Plafonné à 10 Mo de données reçues par requête ; recherche des mises à jour toutes les heures tant que le document est ouvert ([IMPORTRANGE](https://support.google.com/docs/answer/3093340?hl=fr)) |

Un journal s’allonge d’une ligne par mouvement. Avec 8 colonnes, 1 000 mouvements par mois ajoutent 8 000 cellules par mois, soit environ 96 000 par an. La plupart des petites équipes n’atteignent jamais la limite de cellules, mais les fichiers volumineux ralentissent bien avant. Archivez les années clôturées dans un fichier distinct et reportez le solde de clôture sous forme d’une ligne `Adjust` par article et par emplacement.

## Quand Google Sheets seul ne suffit plus

La structure ci-dessus fonctionne bien pour quelques personnes rigoureuses. À mesure que l’équipe grandit, ces lacunes commencent à coûter du temps ou de l’argent.

- **Modifications simultanées.** Google Sheets affiche les modifications en direct, mais rien n’empêche deux personnes de modifier la même ligne, ni quelqu’un de trier le journal pendant qu’une autre personne saisit. Rien ne vérifie une modification avant qu’elle ne soit appliquée.
- **Pas de validations.** N’importe quel éditeur peut enregistrer un ajustement de 500 unités ou modifier un seuil de réapprovisionnement. Aucune étape ne prévoit qu’une deuxième personne l’examine d’abord.
- **Un historique difficile à auditer.** L’historique des versions est regroupé et [les révisions peuvent dans certains cas être fusionnées](https://support.google.com/docs/answer/190843?hl=fr). L’historique des modifications des cellules ignore les résultats de formules, les lignes insérées et supprimées et les changements de format, et une restauration l’efface. Le propriétaire d’un fichier dans un compte Google personnel peut supprimer définitivement ses versions sans nom. Rien ne prouve que l’historique que vous voyez est complet.
- **Écrasements accidentels.** Un collage sur la mauvaise plage ou une recopie vers le bas trop longue modifie des centaines de lignes du journal d’un coup. L’historique des versions peut réparer les dégâts, si quelqu’un s’en aperçoit.
- **Des autorisations au niveau du fichier.** Un éditeur peut modifier tous les onglets et tous les emplacements, sauf si vous créez des protections à la main, et la protection n’est pas un dispositif de sécurité, selon Google lui-même. Impossible de dire « cette personne enregistre des mouvements uniquement pour l’entrepôt nord ».
- **Les règles n’existent que dans la tête des gens.** « Ne jamais modifier les anciennes lignes » et « toujours indiquer une référence » sont des conventions. La feuille ne les fait pas respecter.

Si cela vous parle, vous avez trois options : accepter le risque, passer à un système de gestion des stocks distinct, ou conserver la feuille et y ajouter une couche de contrôle.

## Comment LightInventory ajoute du contrôle à la même feuille

LightInventory est une application de gestion des stocks construite sur une feuille Google Sheets qui vous appartient. Elle est en cours de développement et n’est pas encore disponible pour tous. Elle reprend la structure de journal présentée dans ce guide, et l’application fait respecter les règles ci-dessus au lieu de les laisser à l’état de conventions.

- **Vos données restent dans votre feuille.** Articles, emplacements, mouvements et journal des modifications sont des onglets de votre propre feuille de calcul. Si vous cessez d’utiliser LightInventory, vous conservez le fichier.
- **Chaque modification est enregistrée.** Chaque modification est écrite dans un onglet `Log` avec son auteur, sa date, la valeur avant et la valeur après. Les erreurs sont corrigées par une entrée compensatoire, jamais en effaçant l’historique.
- **Un historique à altération détectable.** Une chaîne d’empreintes à clé calculée sur le journal, sans vos valeurs, est stockée en dehors de votre fichier et ancrée à l’extérieur : une ligne du journal discrètement modifiée ou supprimée échoue donc à la vérification. Consultez la [piste d’audit](/fr/fonctionnalites/piste-audit).
- **Des validations.** Vous choisissez les modifications qui nécessitent une validation, par exemple les changements de prix. Le valideur ne peut pas être la personne qui a demandé la modification.
- **Des rôles.** Propriétaire, Administrateur, Approbateur, Éditeur et Lecteur, avec une limitation facultative par emplacement pour les Éditeurs et les Lecteurs. Les membres de l’équipe travaillent dans l’application et ne sont pas ajoutés au fichier, sauf si le propriétaire leur accorde un droit de modification directe.
- **Détection des modifications directes.** Si quelqu’un modifie directement la feuille, LightInventory détecte la modification et la traite selon votre règle : la bloquer jusqu’à ce qu’un propriétaire l’adopte ou rétablisse la valeur, l’enregistrer automatiquement dans le journal, ou la soumettre à validation.

La formule Free est prévue pour 1 utilisateur et 1 feuille de calcul. La formule Team coûte 2,99 € par utilisateur et par mois en facturation mensuelle, ou 2,49 € en facturation annuelle, hors taxes. Tous les détails figurent sur la page [Tarifs](/fr/tarifs), et la façon dont vos données et vos accès sont gérés est présentée sur la page [Sécurité](/fr/securite).
