Dans un monde économique aussi mouvant où les crises de succèdent aussi rapidement, les entreprises ont besoin d’obtenir et de maintenir des informations financières et juridiques, fiables et en permanence à jour, sur leurs partenaires (clients, fournisseurs…). Que ce soit pour créer ou mettre à jour des fiches tiers (outil stratégique dans le cadre de la dématérialisation de la facturation, documentation de la conformité Sapin 2), accorder du crédit à des clients actuels ou nouveaux (évaluation du risque de défaillance, solvabilité…).

Le répertoire SIRENE (Système Informatique pour le Répertoire des ENtreprises et des Etablissements) dont la gestion est confiée à l’INSEE permet de télécharger ses données notamment sous forme de fichier texte. L’INSEE est ainsi chargé d’identifier les entreprises au sens large et plus précisément les entrepreneurs individuels, les personnes morales soumises au droit commercial, les institutions et services de l’État et les collectivités territoriales, certaines associations. Toutes les mises à jour d’entreprises et d’établissements (créations, modifications, cessations) enregistrés dans SIRENE proviennent des informations déclaratives des entreprises auprès du Guichet Unique et de certains Centres de Formalités des Entreprises (CFE).
Le répertoire SIRENE est interrogeable par API (Application Programming Interface ou interface de programmation applicative) à partir d’un numéro SIREN (entreprise ou unité légale) ou d’un SIRET (établissement d’une entreprise).
Une API assure l’interface entre deux systèmes. Par exemple, les logiciels de paye télétransmettent les Déclarations Sociales Nominatives (DSN) vers les serveurs de l’État par l’intermédiaire d’une API. Le fonctionnement d’une API est simple. Un logiciel envoie une requête à un site internet ou à un autre logiciel par le biais de son API. Le site internet exécute la requête, interroge ses bases de données et renvoie le résultat au logiciel, qui intègre les données reçues dans son processus de calcul. Les API assurent ainsi l’interaction entre des logiciels d’éditeurs différents.
>>> Pour aller plus loin : Le principe de la diffusion en ligne avec autorisation de rediffusion gratuite (ou open data) des données du registre national du commerce et des sociétés (RNCS, fourni par l’INPI) et du fichier SIRENE (fourni par l’INSEE) a été acté par la loi Macron du 6 août 2015. Le site Data Inpi, lancé en décembre 2019, a mis en oeuvre la diffusion de ces données. L’INPI propose désormais une API ainsi qu’un FTP. A partir de ces moyens de diffusion, tout opérateur privé a la possibilité d’intégrer ces données dans ses propres produits, commerciaux ou gratuits, et de les rediffuser à sa guise. Plusieurs acteurs privés ont commencé à occuper ce nouveau champ des possibles, à l’image de Pappers ou de Société.Ninja.
Le présent article propose au lecteur de créer un classeur Excel doté d’un code VBA qui interroge le répertoire SIRENE. Il sera composé de deux parties :
- Interrogation de la base entreprises (SIREN) ;
- Interrogation de la base établissements (SIRET) (exposée dans un autre article à suivre).
Prérequis : obtention d’une clef d’identification :
Pour utiliser l’API SIRENE, il est nécessaire d’obtenir gratuitement une clef d’identification (token) à insérer dans le code VBA après inscription (création d’un compte) sur le site des API SIRENE :

Une fois l’inscription validée, cliquer sur le bouton Montrer les clefs puis copier la chaîne affichée dans la zone Jeton d’accès. La clef a une durée de vie limitée. Pour en générer une nouvelle, cliquer sur Regénérer. Il faudra la réinsérer dans le code VBA à la place de l’ancienne.
Le site internet SIRENE fournit une page d’aide pour la création du token.
Conditions d’utilisation de l’API SIRENE :
Les données SIRENE sont mises à jour quotidiennement dans la nuit et intègrent les mises à jour de la veille.
L’usage d’API SIRENE est soumis à une limite de 30 interrogations par minute. L’INSEE se réserve le droit de changer cette limite en cas de nécessité.
L’INSEE s’efforce de garantir la disponibilité de l’API 99,5 % du temps mensuel apprécié au terme de chaque mois.
Conditions & limitations d’utilisation du service SIRENE : cliquer ici.
Le code VBA :
L’exploitation de la base SIRENE se passe en deux temps : dans un premier temps, une requête est émise vers l’API et cette dernière retourne une réponse et dans un second temps, il faut extraire les données utiles de la réponse reçue du serveur.
Le code VBA comprend plusieurs fonctions pour répondre à ce processus :
- Fonctions de validation des numéros SIREN (VérifieClefLuhn) et VérifieClefLuhn_SIREN(Chaîne As String) : déjà présentées dans l’article EXCEL : Vérifier la validité d’un numéro SIREN
- Fonction d’interrogation de la base de données (requête API) : Interrogation_API_SIRENE(SIREN_ou_SIRET As String, Clef_API_SIRENE As String)
- Fonction d’exploitation du résultat de la requête : Extraction_Champ_API_SIRENE(Réponse_Requête_SIRENE As Variant, NomChamp As String)
La fonction Interrogation_API_SIRENE(SIREN_ou_SIRET As String, Clef_API_SIRENE As String) se charge d’envoyer la requête au serveur de l’INSEE :
- Envoi de la requête .Open “GET”, URL_API_SIRENE & Type_Numéro & “/” & SIREN_ou_SIRET, False au serveur SIRENE (https://api.insee.fr/entreprises/sirene/V3/) avec authentification à l’aide de la clef (token) : .SetRequestHeader “Authorization”, “Bearer ” & Clef_API_SIRENE
- Réception de la réponse du serveur (Réponse_Requête = .ResponseText) et de son statut (Statut_Requête = .Status) en erreur ou non (= 200)
Codes retour requête (.Status) :
La fonction Extraction_Champ_API_SIRENE(Réponse_Requête_SIRENE As Variant, NomChamp As String) permet d’isoler les champs de données figurant dans la réponse du serveur.
'-----------------------------------------------------------------------------------------------------------------------
' Collecte de données d'entreprises à l'aide de l'API SIRENE
' Ecrit par Benoît RIVIERE, v1 10/2023
'
' Plus d'infos : https://www.auditsi.eu/?p=11785
'-----------------------------------------------------------------------------------------------------------------------
Option Explicit
'Déclaration des constantes
'---URL de l'API Sirene
Const URL_API_SIRENE = "https://api.insee.fr/entreprises/sirene/V3/"
'-----------------------------------------------------------------------------------------------------------------------
' Contrôle de la validité d'un numéro SIREN
' Infos : https://www.auditsi.eu/?p=11607
'-----------------------------------------------------------------------------------------------------------------------
'Algorithme de Luhn applicable aux numéros SIREN et SIRET
'-----------------------------------------------------------------------------------------------------------------------
'Vérifie la clef de contrôle d'une chaîne (qui contient la clef) selon l'algorithme de Luhn
Private Function VérifieClefLuhn(Chaîne As String) As Boolean
'Déclaration des variables
Dim LongueurChaîne As Integer
Dim i As Integer
Dim Position As Integer
Dim Chiffre As Integer
Dim Addition As Integer
'Calcule le nombre de caractères de la Chaîne
LongueurChaîne = Len(Chaîne)
Addition = 0
Position = 0
'Parcourt chaque chiffre de la variable Chaîne de droite à gauche
For i = LongueurChaîne To 1 Step -1
Position = Position + 1
'Lit le chiffre en cours (position i dans la Chaîne)
Chiffre = CInt(Mid(Chaîne, i, 1))
'Si la position est paire (à partir de la droite), multiplier par 2
If Position Mod 2 = 0 Then 'si le reste de la division i/2= 0 -> position paire sinon impaire
Chiffre = Chiffre * 2
'Si le résultat de la multiplication est supérieur à 9, soustraire 9
If Chiffre > 9 Then
Chiffre = Chiffre - 9
End If
End If
'Additionne les chiffres au fur et à mesure de l'exécution de la boucle (impairs*2 + pairs)
Addition = Addition + Chiffre
Next i
'Calcule la clef de contrôle
VérifieClefLuhn = (Addition Mod 10) = 0
End Function
'Vérifie la validité de la clef contenue dans un numéro SIREN
' Valeur de retour :
' - VRAI : clef correcte
' - FAUX : clef erronnée ou longueur du numéro SIREN fourni <> 9
Function VérifieClefLuhn_SIREN(Chaîne As String) As Boolean
Select Case Len(Chaîne)
Case 9:
VérifieClefLuhn_SIREN = VérifieClefLuhn(Chaîne)
Case Else:
VérifieClefLuhn_SIREN = False
End Select
End Function
'-----------------------------------------------------------------------------------------------------------------------
'Interrogation et collecte des données de l'API SIRENE
Function Interrogation_API_SIRENE(SIREN_ou_SIRET As String, Clef_API_SIRENE As String) As String
Dim Type_Numéro As String
Dim Requête_XMLHTTP As Object
Dim Réponse_Requête As Variant
Dim Statut_Requête As Integer
Dim Message_Erreur As String
'Test de la validité du n° SIREN ou du n° SIRET
'(en cas de non conformité : retour d'un message d'erreur)
Select Case Len(SIREN_ou_SIRET)
Case 9:
If VérifieClefLuhn_SIREN(SIREN_ou_SIRET) = False Then
Interrogation_API_SIRENE = "Erreur 999. Numéro SIREN " & SIREN_ou_SIRET & " non conforme"
Exit Function
End If
Type_Numéro = "siren"
Case Else:
Interrogation_API_SIRENE = "Erreur 997. Longueur numéro SIREN / SIRET " & SIREN_ou_SIRET & " non conforme"
Exit Function
End Select
'Création de l'objet Requête_XMLHTTP pour effectuer la requête sur l'API SIRENE
Set Requête_XMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
'Création et envoi de la requête
With Requête_XMLHTTP
'Envoi de la requête GET à l'API SIRENE
.Open "GET", URL_API_SIRENE & Type_Numéro & "/" & SIREN_ou_SIRET, False
'Authentification à l'aide de la clef (token)
.SetRequestHeader "Authorization", "Bearer " & Clef_API_SIRENE
'Envoi de la requête
.Send
'Réception de la réponse
Réponse_Requête = .ResponseText
'Statut de la requête
Statut_Requête = .Status '200 = Ok sinon statut en erreur
End With
'Libère l'objet Requête_XMLHTTP
Set Requête_XMLHTTP = Nothing
'En fonction du statut de la réponse...
Select Case Statut_Requête
Case 200: '...statut Ok -> retourne le résultat de la requête
'Remplace les données Null par "" (chaîne vide)
Réponse_Requête = Replace(Réponse_Requête, "null", "")
'Retourne ke texte de la réponse
Interrogation_API_SIRENE = Réponse_Requête
Case Else: '...statut en erreur -> retourne un message d'erreur
Select Case Statut_Requête
Case 400:
Message_Erreur = "Nombre incorrect de paramètres ou les paramètres sont mal formatés"
Case 401:
Message_Erreur = "Jeton d'accès manquant ou invalide"
Case 404:
Message_Erreur = "Entreprise non trouvée dans la base Sirene"
Case 406:
Message_Erreur = "Le paramètre 'Accept' de l'en-tête HTTP contient une valeur non prévue"
Case 414:
Message_Erreur = "Requête trop longue"
Case 429:
Message_Erreur = "Quota d'interrogations de l'API dépassé"
Case 500:
Message_Erreur = "Erreur interne du serveur"
Case 503:
Message_Erreur = "Service indisponible"
End Select
Message_Erreur = "Erreur " & Statut_Requête & ". " & Message_Erreur
Interrogation_API_SIRENE = Message_Erreur
End Select
End Function
'-----------------------------------------------------------------------------------------------------------------------
'Extraction des données
'Informations sur cette fonction : https://www.auditsi.eu/?p=9377
Function Extraction_Champ_API_SIRENE(Réponse_Requête_SIRENE As Variant, NomChamp As String) As Variant
Dim PositionDébut As Long
Dim NomChamp_A_rechercher As String
Dim Donnée As Variant
NomChamp_A_rechercher = Chr(34) & NomChamp & Chr(34) & ":"
PositionDébut = InStr(Réponse_Requête_SIRENE, NomChamp_A_rechercher)
Select Case PositionDébut
Case 0: 'champ non trouvé -> retour vide
Extraction_Champ_API_SIRENE = ""
Case Else: 'sinon retourne la donnée correspondante
PositionDébut = PositionDébut + Len(NomChamp_A_rechercher)
Donnée = Replace(Mid(Réponse_Requête_SIRENE, PositionDébut, InStr(Right(Réponse_Requête_SIRENE, Len(Réponse_Requête_SIRENE) - PositionDébut + 1), ",") - 1), Chr(34), "")
Select Case NomChamp
Case "dateCreationUniteLegale", "dateDernierTraitementUniteLegale", "dateSuppressionUniteLegale":
Donnée = Left(Donnée, 10)
Donnée = CDate(Right(Donnée, 2) & "/" & Mid(Donnée, 6, 2) & "/" & Left(Donnée, 4))
End Select
Extraction_Champ_API_SIRENE = Donnée
End Select
End Function
Le classeur Excel :
Le classeur Excel est proposé en libre téléchargement en bas de cette page.
En cellule B2, coller la clef (token) communiquée par le site SIRENE.
Sans token, il n’est pas possible d’interroger le serveur SIRENE ; celui-ci retournera invariablement le statut 401 (Jeton d’accès manquant ou invalide) ; il en est de même si le token est erroné ou périmé.
En cellule B6, saisir le numéro SIREN de l’entreprise, ici : 312 212 301 (RENAULT RETAIL GROUP).
En cellule B7, saisir la formule :
=Interrogation_API_SIRENE($B$6;$B$2)
La fonction Interrogation_API_SIRENE demande deux paramètres : un numéro SIREN (ici $B$6 = 312 212 301) et la clef SIRENE (ici cellule $B$2).
Excel affiche la réponse du serveur SIRENE correspondant au numéro SIREN indiqué :

Si le token n’est pas renseigné en cellule B2 ou s’il est erroné ou périmé, Excel affichera une erreur 401 :

Extrait de la réponse du serveur SIRENE (ici pour le SIREN de RENAULT RETAIL GROUP) est une succession de noms de champ de données et des données corespondantes :
{“header”:{“statut”:200,”message”:”OK”},”uniteLegale”:{“siren”:”312212301“,”statutDiffusionUniteLegale”:”O”,“dateCreationUniteLegale”:”1978-01-01″,“sigleUniteLegale”:,”sexeUniteLegale”:,”prenom1UniteLegale”:,”prenom2UniteLegale”:,”prenom3UniteLegale”:,”prenom4UniteLegale”:,”prenomUsuelUniteLegale”:,”pseudonymeUniteLegale”:,”identifiantAssociationUniteLegale”:,”trancheEffectifsUniteLegale”:”52″,”anneeEffectifsUniteLegale”:”2020″,”dateDernierTraitementUniteLegale”:”2023-10-12T11:09:32″,”nombrePeriodesUniteLegale”:13,”categorieEntreprise”:”GE”,”anneeCategorieEntreprise”:”2020″,”periodesUniteLegale”:[{“dateFin”:,”dateDebut”:”2022-03-07″,”etatAdministratifUniteLegale”:”A”,”changementEtatAdministratifUniteLegale”:false,”nomUniteLegale”:,”changementNomUniteLegale”:false,”nomUsageUniteLegale”:,”changementNomUsageUniteLegale”:false,”denominationUniteLegale”:”RENAULT RETAIL GROUP”,”changementDenominationUniteLegale”:false,…
La fonction Extraction_Champ_API_SIRENE extrait les champs de données de la réponse reçue de SIRENE.
Dans l’exemple ci-après, le nom des champs de données sont situés en colonne B (à partir de la ligne 11) et les données correspondantes en colonne C :

Ainsi, en cellule B11, le nom du champ à extraire s’intitule denominationUniteLegale (dénomination sociale de l’entreprise). En C11, la formule de calcul pour extraire la dénomination sociale est :
=Extraction_Champ_API_SIRENE($B$7;B11)
Le premier paramètre correspond à la réponse SIRENE (située ici en cellule B7 et le deuxième au nom du champ de données à extraire (ici denominationUniteLegale). Le résultat correspondant est : RENAULT RETAIL GROUP.
Parmi les autres champs intéressants à extraire :
- nicSiegeUniteLegale (NIC du siège social) ; le NIC associé au numéro SIREN permet de reconstituer le numéro SIRET du siège social (SIREN + NIC = SIRET) ;
- dateCreationUniteLegale (date d’immatriculation de l’entreprise au RCS) ;
- activitePrincipaleUniteLegale (code APE) ;
- categorieJuridiqueUniteLegale (identifie la forme juridique ; la liste des codes est fournie sur le site SIRENE) ;
- economieSocialeSolidaireUniteLegale (appartenance au champ de l’économie sociale et solidaire) ;
- societeMissionUniteLegale (l’entreprise appartient au champ des sociétés à mission) ;
- identifiantAssociationUniteLegale (numéro au Répertoire National des Associations, RNA).
La liste complète des champs de données disponibles est téléchargeable en bas de page (PDF nommé Schémas De Sortie API Sirene) ou consultable sur le site SIRENE.

A noter : la version actuelle de l’API est la V3. Courant 2024, la V4 devrait entrer en fonction suite à le mise en oeuvre du Guichet Unique : pour plus d’informations, cf la page de la V4 sur le site SIRENE.
Calendrier prévisionnel de la transition vers la V4 :

A suivre : interrogation de la base de données établissements (SIRET)…
Autres moyens permettant de consulter des informations sur les entreprises :
- Télécharger gratuitement des listes d’entreprises et de leurs établissements (fichier SIRENE)
- Consulter des sites internet spécialisés : fiche SIRENE (au format PDF), site Pappers, site Société Ninja… ; Automatiser le téléchargement en masse de fiches SIRENE .
- Mettre en oeuvre des API (Application Programming Interface ou interface de programmation applicative) : par exemple celles de SIRENE ou Pappers.
___
Pour aller plus loin : articles en rapport avec SIRENE, SIREN, SIRET / Publicité légale des entreprises / API / Open Data
Derniers articles parBenoît RIVIERE (voir tous)
- Analyse des données comptables (FEC) : analyse de la conformité comptable des transactions et de leur dénouement - dimanche 23 novembre 2025
- L’AMF et l’AFA appellent à la vigilance sur le risque de corruption par des réseaux criminels de personnes ayant accès à des informations privilégiées - lundi 4 août 2025
- Détecter les inversions HT/TVA avec ANA-FEC2 - jeudi 31 juillet 2025
- Analyse de FEC en ligne avec ANA-FEC2 (manuel d’utilisation) - mardi 29 juillet 2025
- Rapport AFA 2024 : les contrôles comptables à ne pas négliger - samedi 5 juillet 2025





Bonjour,
J’ai testé votre fichier “Fonction-API-SIRENE-1ere-partie-SIREN.xlsm”.
J’ai mis le token en cellule B2 avec un SIREN valable en B6 mais j’obtiens systématiquement la réponse requête ‘Erreur 404. Entreprise non trouvée dans la base SIrene’. Alors que ce SIREN est bien présent dans cette base, je l’ai trouvé. J’ai également essayé avec d’autres SIREN. Il y’aurait eu des changements dans la réponse de la requête ?
Cordialement,
DAH02
Bonjour,
Il faudrait consulter le site de l’INPI. Comme je l’indique dans mon article, il est prévu un changement de version d’ici 2025. Mais normalement, ma macro devrait fonctionner en attendant. Je vais tester sur mon PC.
Cordialement,
B. RIVIERE
Bonsoir,
Je poste ci-après le mél d’un lecteur qui a trouvé la source du problème : l’adresse de l’API a changé. Merci beaucoup pour le message.
Cordialement,
B. RIVIERE
Bonjour,
Tout d’abord merci de partager ainsi vos travaux.
Je viens de rencontrer le même problème qu’ADH02 sur votre macro de l’API Siren.
L’URL de l’API a légèrement changé : https://api.insee.fr/entreprises/sirene/V3.11
Après mise à jour de votre macro cela fonctionne.
Je ne parvenais pas à vous laisser un commentaire directement sur l’article.
Cordialement,
A. Landrieux
Bonjour Benoît,
Désolé, je viens de tester à nouveau. J’ai changé l’URL (j’ai testé avec https://api.insee.fr/entreprises/sirene/V3.11 et également avec https://api.insee.fr/entreprises/sirene/V3.11/). J’ai mis un token fraichement généré. Mais rien n’y fait. J’ai une erreur 403.
Cordialement,
DAH02
<> il y’aurait un problème d’interdiction mais je ne vois pas pourquoi ? Le token est bien généré à partir de l’API INSEE (dans DefaultApplication, sur l’onglet ‘Clefs et jetons d’accès’, un jeton d’accès a été généré avec une période de validité de 604800 secondes).
C’est bon… ça fonctionne correctement maintenant. Merci à vous. 😉
Bonsoir, navré mais l’envoi ne semble pas fonctionner.
J’ai essayer de débugger un peu et j’ai enlevé une répétition “/siren” en trop dans l’URL d’appel et malgré cela on dirait que c’est l’envoi du token qui ne fonctionne pas dans le header.
J’ai testé en mode console depuis le site et le token fonctionne bien pourtant.
Pourriez-vous indiquer ce qui manque svp?
Bonsoir,
Désolé, je n’ai pas le temps de tester pour le moment.
Lors de mes derniers tests le code était fonctionnel.
Deux points à surveiller :
– Est-ce que votre token est valide ? (il faut régulièrement le régénérer sur le site de l’INPI)
– Consulter le site de l’INPI pour s’assurer que les conditions d’utilisation de l’API n’ont pas changé. Et notamment l’adresse de l’API.
Cordialement,
Benoît RIVIERE
Bonsoir,
Merci pour votre réponse.
Oui la clef est valide et elle fonctionne en test directement depuis le portail api qui a été mis en place.
Les conditions sont toujours conformes apparemment.
Est-ce que votre fichier fonctionne pour vous actuellement svp?
J’essaie de comprendre d’où peut venir cette erreur 401.
Merci pour votre aide
Bonsoir,
Il faudrait que je réessaye.
L’erreur 401 est renvoyée en cas de problème d’authentification (cf https://www.inpi.fr/sites/default/files/documentation%20technique%20API%20formalit%C3%A9s_v3.0.pdf).
Vous êtes sûr de votre code VBA ?
Cordialement,
B. RIVIERE
Bonsoir, c’est bon j’ai trouvé.
Il faut rajouter .SetRequestHeader “X-INSEE-Api-Key-Integration” et rappeler la clef dans le header et ça fonctionne.
Merci à vous et belle soirée
Ravi que vous ayez pu trouver la solution.
Bonne soirée.
Bonjour,
L’INSEE a modifié le protocole d’envoi de la clé d’API et la macro jointe dans ce post ne fonctionne plus.
La correction est très simple, il suffit de remplacer la ligne 108 du code par la ligne suivante :
.setRequestHeader “X-INSEE-Api-Key-Integration”, Clef_API_SIRENE
Et la macro fonctionnera comme avant
NB : Copilot m’a bien aidé pour rédiger la syntaxe de la correction.
; o )
Bonsoir,
Merci pour ces précisions.
J’oubliais ….
L’url en rouge de la ligne 14 doit être remplacée par celle-ci :
https://api.insee.fr/api-sirene/3.11/
Et voilà …