Vérifier des SIRET dans Google Sheets : formule et script Apps Script prêts à copier

Pour vérifier des SIRET dans Google Sheets, deux briques suffisent : une formule de clé de Luhn qui contrôle le format des 14 chiffres, et un script Apps Script qui interroge gratuitement l’API publique recherche-entreprises pour confirmer que chaque établissement existe et reste actif dans la base Sirene de l’INSEE. Les deux sont fournis plus bas, prêts à copier et commentés. Cette méthode fonctionne sans installation ni clé d’API, mais elle bute sur les quotas dès quelques centaines de lignes : 7 requêtes par seconde côté API, 20 000 appels par jour côté Google. Au-delà de ce seuil, un outil d’import en masse comme Trouve-ton-siret.com vérifie et enrichit le fichier entier contre la base Sirene en quelques minutes. Voici les deux approches, et le moment précis où basculer de l’une à l’autre.

Ce que Google Sheets sait vérifier (et ce qu’il ne verra jamais)

Avant de copier la moindre formule, il faut distinguer deux niveaux de contrôle. Le premier est purement mathématique : un SIRET compte 14 chiffres et sa validité formelle se vérifie avec l’algorithme de Luhn, le même que celui des numéros de carte bancaire. Ce contrôle se fait dans Google Sheets avec une simple formule, sans script ni connexion externe. Le second niveau est factuel : le numéro correspond-il à un établissement réellement immatriculé, et cet établissement est-il encore actif ? Cette information vit dans la base Sirene, tenue par l’INSEE et mise à jour quotidiennement. Pour l’atteindre depuis une feuille de calcul, il faut passer par Apps Script, le langage d’automatisation intégré à Google Sheets.

Un SIRET peut donc afficher une clé de Luhn parfaitement valide tout en désignant un établissement fermé depuis trois ans, ou n’avoir jamais existé. Les deux contrôles sont complémentaires : la formule filtre les fautes de frappe en une seconde, le script confirme l’existence et l’état administratif. C’est exactement la même logique que dans un classeur Excel, avec des outils différents : ici, pas de VBA, mais du JavaScript hébergé par Google.

Préalable : forcer le format texte pour protéger les zéros de tête

Google Sheets partage un travers avec Excel : collé dans une cellule au format automatique, un SIRET commençant par zéro perd son premier chiffre et un numéro long peut basculer en notation scientifique. Le contrôle de Luhn échouera alors sur des numéros pourtant corrects. Avant toute vérification, sélectionnez la colonne des SIRET puis appliquez Format, Nombre, Texte brut. Si le fichier a déjà été abîmé par un passage dans un tableur, mieux vaut d’abord reconstruire les zéros manquants et éliminer les doublons : vérifier des numéros tronqués ne produit que de faux négatifs.

La formule de clé de Luhn prête à copier

La formule ci-dessous contrôle un SIRET placé en A2 (format texte). Elle supprime les espaces et les points de mise en forme, vérifie la longueur de 14 chiffres, puis applique l’algorithme de Luhn : en partant de la droite, un chiffre sur deux est doublé, les résultats supérieurs à 9 sont réduits, et la somme totale doit être un multiple de 10.

=LET(n; SUBSTITUE(SUBSTITUE(A2;" ";"");".";""); SI(NBCAR(n)<>14; "Format invalide"; LET(c; STXT(n; LIGNE(INDIRECT("1:14")); 1)*1; p; c*SI(MOD(LIGNE(INDIRECT("1:14")); 2)=1; 2; 1); SI(MOD(SOMMEPROD(p-9*(p>9)); 10)=0; "Clé valide"; "Clé invalide"))))

Collez-la en B2, étirez vers le bas, et chaque ligne affiche « Clé valide », « Clé invalide » ou « Format invalide ». Testez avec le SIRET d’exemple 732 829 320 00074 (numéro fictif construit pour l’exercice) : la somme de Luhn tombe sur 50, la clé est donc valide. Si votre feuille est configurée en anglais, remplacez SI, NBCAR, STXT et SOMMEPROD par IF, LEN, MID et SUMPRODUCT, et les points-virgules par des virgules.

L’exception à connaître : La Poste

Les établissements de La Poste, rattachés au SIREN 356 000 000, ne suivent pas l’algorithme de Luhn : leur règle de validité repose sur une somme des chiffres divisible par 5. Si votre fichier contient des sites postaux, ne les classez pas en erreur sur la seule foi de la formule.

Le script Apps Script complet pour interroger la base Sirene

La clé de Luhn ne dit rien de l’existence du numéro. Pour cela, on interroge l’API recherche-entreprises.api.gouv.fr, le service public opéré par la DINUM qui expose les données Sirene de l’INSEE : elle est gratuite, sans clé d’API ni inscription, et actualisée chaque jour.

Installation en quatre étapes

  1. Dans votre feuille, ouvrez Extensions puis Apps Script.
  2. Supprimez le contenu de l’éditeur et collez le script ci-dessous.
  3. Enregistrez, puis rechargez la feuille de calcul : un menu « SIRET » apparaît.
  4. Utilisez la fonction =VERIF_SIRET(A2) en cellule, ou le menu pour traiter toute la colonne A.

Le script, commenté ligne à ligne

/** * Vérifie un SIRET contre la base Sirene via l'API recherche-entreprises. * Usage en cellule : =VERIF_SIRET(A2) * Renvoie : "Actif : nom", "Fermé : nom", "Introuvable", "Format invalide" ou "Erreur API". */ function VERIF_SIRET(siret) { // 1. Nettoyage : on ne garde que les chiffres (espaces et points supprimés) var s = String(siret).replace(/[^0-9]/g, ''); // 2. Contrôle de format : un SIRET compte exactement 14 chiffres if (s.length !== 14) return 'Format invalide'; // 3. Appel de l'API publique (gratuite, aucune clé requise) var url = 'https://recherche-entreprises.api.gouv.fr/search?q=' + s; var reponse = UrlFetchApp.fetch(url, { muteHttpExceptions: true }); if (reponse.getResponseCode() !== 200) return 'Erreur API'; var donnees = JSON.parse(reponse.getContentText()); // 4. Aucun résultat : le numéro n'existe pas dans la base Sirene if (!donnees.results || donnees.results.length === 0) return 'Introuvable'; // 5. On repère l'établissement exact (siège ou établissement secondaire) var entreprise = donnees.results[0]; var etab = null; if (entreprise.siege && entreprise.siege.siret === s) { etab = entreprise.siege; } else if (entreprise.matching_etablissements) { for (var i = 0; i < entreprise.matching_etablissements.length; i++) { if (entreprise.matching_etablissements[i].siret === s) { etab = entreprise.matching_etablissements[i]; break; } } } if (!etab) return 'Introuvable'; // 6. État administratif de l'établissement : "A" = actif, "F" = fermé return etab.etat_administratif === 'A' ? 'Actif : ' + entreprise.nom_complet : 'Fermé : ' + entreprise.nom_complet; } /** * Vérifie tous les SIRET de la colonne A (à partir de la ligne 2) * et écrit le résultat en colonne B. */ function verifierColonneA() { var feuille = SpreadsheetApp.getActiveSheet(); var derniereLigne = feuille.getLastRow(); var valeurs = feuille.getRange(2, 1, derniereLigne - 1, 1).getValues(); var resultats = []; for (var i = 0; i < valeurs.length; i++) { resultats.push([VERIF_SIRET(valeurs[i][0])]); // Pause de 200 ms : environ 5 appels/seconde, sous la limite officielle de 7 Utilities.sleep(200); } feuille.getRange(2, 2, resultats.length, 1).setValues(resultats); } /** Ajoute le menu "SIRET" à l'ouverture de la feuille. */ function onOpen() { SpreadsheetApp.getUi().createMenu('SIRET') .addItem('Vérifier la colonne A', 'verifierColonneA') .addToUi(); }

À la première exécution, Google demande d’autoriser le script à contacter un service externe : c’est normal, l’autorisation ne vaut que pour votre feuille. Le script est libre de reprise : copiez-le, adaptez-le, citez la source si vous le republiez.

Quotas et limites : pourquoi ça coince au-delà de quelques centaines de lignes

Cette mécanique fonctionne très bien sur un fichier modeste, mais trois plafonds se cumulent dès que le volume grimpe :

  • 7 requêtes par seconde : c’est la limite annoncée par la DINUM pour l’API recherche-entreprises. Au-delà, l’API renvoie des erreurs 429 et vos cellules affichent « Erreur API ». D’où la pause de 200 ms dans le script.
  • 20 000 appels UrlFetch par jour pour un compte Google gratuit d’après la documentation officielle des quotas Apps Script (100 000 pour un compte Google Workspace). Un fichier de 25 000 lignes ne passera donc jamais en une journée sur un compte personnel.
  • 6 minutes d’exécution maximum par lancement de script (30 secondes pour une fonction personnalisée en cellule). À 5 appels par seconde, une exécution traite environ 1 500 lignes avant l’arrêt forcé, et il faut relancer manuellement.

Autre écueil, plus sournois : les fonctions personnalisées se recalculent à chaque ouverture de la feuille. Mille cellules contenant =VERIF_SIRET relancent mille appels d’API à chaque consultation du fichier, ce qui épuise le quota pour rien. Sur un vrai fichier de production, préférez toujours le menu « SIRET », qui écrit des valeurs figées.

Au-delà de 300 lignes : passer au traitement en masse

En pratique, la frontière se situe autour de 200 à 300 lignes. En dessous, la formule et le script couvrent le besoin sans rien installer d’autre. Au-dessus, vous cumulez les relances de script, la surveillance des quotas et l’absence d’enrichissement : le script renvoie un état, pas l’adresse, le code NAF ou le numéro de TVA. C’est le moment de soumettre le fichier entier à une vérification Sirene en un seul import plutôt que de bricoler des exécutions successives. Trouve-ton-siret.com prend un fichier Excel ou CSV en entrée, vérifie chaque SIRET, SIREN ou numéro de TVA contre la base Sirene via l’API officielle, et restitue le fichier corrigé et enrichi en quelques minutes, exportable en CSV ou JSON.

Quelle méthode pour quel volume : le tableau de décision

Volume de SIRETMéthode recommandéeCe que vous obtenez
1 à 20Recherche manuelle (Annuaire des Entreprises)Existence et état, sans automatisation
20 à 300Google Sheets : formule de Luhn + Apps ScriptFormat, existence, état, à 3 à 5 lignes par seconde
300 à plusieurs milliersOutil d’import en masse type Trouve-ton-siret.comFichier vérifié et enrichi en quelques minutes
Volumes récurrents, intégration logicielleAPI branchée sur vos outilsContrôle en continu, sans fichier intermédiaire

Pour un panorama détaillé des trois approches automatisées, leurs coûts et leurs limites respectives, consultez notre match complet entre tableur, API et solution no-code. Le bon réflexe reste le même quel que soit l’outil : contrôler le format d’abord, l’existence ensuite, l’état administratif enfin.

Questions fréquentes

Peut-on vérifier un SIRET dans Google Sheets sans écrire de script ?

Oui, mais uniquement au niveau du format : une formule appliquant l’algorithme de Luhn détecte les numéros dont la clé de contrôle est fausse, ce qui attrape la plupart des fautes de frappe. En revanche, une formule seule ne peut pas dire si le numéro correspond à un établissement réel et actif : cette information vit dans la base Sirene et nécessite un appel d’API, donc un script Apps Script ou un outil externe.

L’API recherche-entreprises est-elle gratuite et faut-il une clé ?

L’API recherche-entreprises.api.gouv.fr, opérée par la DINUM, est entièrement gratuite et ne demande ni clé d’API ni création de compte. Elle expose les données de la base Sirene de l’INSEE, mise à jour quotidiennement. Sa principale contrainte est la limite de 7 requêtes par seconde, au-delà de laquelle les appels sont rejetés.

Combien de SIRET puis-je vérifier par jour avec Apps Script ?

La documentation des quotas Google Apps Script plafonne les appels UrlFetch à 20 000 par jour pour un compte Google gratuit et 100 000 pour un compte Workspace. S’ajoute une durée d’exécution maximale de 6 minutes par lancement de script, soit environ 1 500 lignes traitées à 5 appels par seconde avant de devoir relancer. En pratique, la méthode reste confortable jusqu’à quelques centaines de lignes par session.

Pourquoi mes SIRET perdent-ils leur zéro initial dans Google Sheets ?

Par défaut, Google Sheets interprète une suite de chiffres comme un nombre : les zéros de tête disparaissent et les numéros longs peuvent s’afficher en notation scientifique. Il faut appliquer le format « Texte brut » à la colonne avant de coller les données, ou préfixer chaque numéro d’une apostrophe. Un SIRET tronqué à 13 chiffres échouera systématiquement au contrôle de Luhn alors que le numéro d’origine était correct.

Que faire quand le fichier dépasse quelques centaines de lignes ?

Au-delà de 200 à 300 lignes, les quotas de Google Apps Script et la limite de débit de l’API imposent de relancer le script plusieurs fois et de surveiller les erreurs. Un outil de traitement en masse comme Trouve-ton-siret.com vérifie un fichier entier de SIRET, SIREN ou numéros de TVA contre la base Sirene en quelques minutes à partir d’un simple import Excel ou CSV, et restitue les données enrichies en CSV ou JSON. C’est la solution adaptée aux bases fournisseurs ou clients de plusieurs milliers de lignes.

À lire aussi