Le répertoire SIRENE (Système Informatique pour le Répertoire des ENtreprises et des Etablissements) dont la gestion est confiée à l’INSEE, identifie 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).
Une des fonctions du répertoire SIRENE est de fournir des avis de situation qui mentionnent, pour un numéro SIREN ou SIRET donné, les coordonnées de l’entreprise ou de l’établissement correspondant et sa situation légale : en activité ou radiée. Cette information est importante avant d’envisager de commercer avec un tiers.
Si le site SIRENE permet de télécharger les avis de situation un par un, il n’offre aucune possibilité de téléchargement en masse. C’est que proposera le classeur Excel présenté ci-après (à télécharger en pied d’article).
Automatiser le téléchargement d’un avis de situation SIRENE :
Ce classeur crée la fonction TéléchargerFicheSIRENE(SIRET As String, CheminFichier As String). Cette fonction interroge le serveur SIRENE (requête), restitue le statut de la requête et télécharge l’avis de situation SIRENE de l’établissement désigné par le numéro SIRET.
Cette fonction nécessite en paramètres d’entrée :
- le numéro SIRET de l’établissement ;
- le chemin de destination où enregistrer l’avis de sitaution SIRENE de l’établissement.
La fonction retourne le statut de la requête dans la cellule Excel.
La fonction TéléchargerFicheSIRENE est utilisable dans une formule de calcul Excel ou peut être appelée par une maco VBA.
Appel de la fonction TéléchargerFicheSIRENE à partir d’une formule de calcul Excel :
Dans cet exemple, la fonction envoie une requête au sujet du SIRET numéro 312 212 301 02001 (établissement RENAULT RETAIL GROUP sis à Clamart). La fonction renvoie le statut de la demande (ici 200 = Ok : le serveur indique que le numéro SIRET a bien été identifié et que l’avis de situation a été mis a disposition) :
L’avis de situation (fichier PDF) a été mis à disposition dans le dossier désigné par la fonction (ici : C:\cegid\).
Appel de la fonction TéléchargerFicheSIRENE à partir d’une macro VBA :
Le sous-programme ci-après commande le téléchargement de la fiche SIRENE (TéléchargerFicheSIRENE(“SIRET 31221230102001”, “C:\TEST API SIRENE\”)) correspondant au numéro SIRET 312 212 301 020001 dans le dossier C:\TEST API SIRENE/ (le statut de la requête apparaît en clair avec la commande MsgBox, en anglais, au lieu d’un simple code ésotérique…) :
'---------------------------------------------------------------------------------- 'Routine exemple : télécharge une fiche SIRENE correspondant au n° SIRET 31221230102001 Sub FicheSIRENE() 'Déclaration des variables Dim StatutRequête As Integer Dim Message_Statut As String 'Envoi de la requête, téléchargement du fichier PDF et réception du code statut StatutRequête = TéléchargerFicheSIRENE("SIRET 31221230102001", "C:\TEST API SIRENE\") 'Constitution du message de statut '---Code statut Message_Statut = StatutRequête & ". " '---Ajout d'un message en clair Select Case StatutRequête Case 200: Message_Statut = Message_Statut & "OK" Case 400: Message_Statut = Message_Statut & "Bad Request" Case 404: Message_Statut = Message_Statut & "Not Found" Case 429: Message_Statut = Message_Statut & "Too Many Requests" Case 500: Message_Statut = Message_Statut & "Internal Server Error" Case Else: Message_Statut = Message_Statut & "Erreur non définie" End Select 'Affichage du message MsgBox "Statut de la requête à l'API SIRENE : " & Message_Statut & "." End Sub
Code source de la fonction TéléchargerFicheSIRENE :
Le fonctionnement de la fonction TéléchargerFicheSIRENE est simple :
- Dans un premier temps, elle crée l’objet qui gère la requête : Set httpRequest = CreateObject(“MSXML2.ServerXMLHTTP.6.0”) ;
- Puis rédige le texte de la requête HTTP qui est composée de l’URL du serveur SIRENE (https://api-avis-situation-sirene.insee.fr/identification/pdf/) suivie du numéro SIRET (stocké dans la variable SIRET) ;
- La requête est ouverte à l’aide de la commande suivante : httpRequest.Open “GET”, URL_API_SIRET, False puis envoyée au serveur SIRENE (httpRequest.Send) ;
- Le serveur restitue le statut de la requête (Ok ou erreur…) : httpRequest.Status ;
- Si le statut de la requête est Ok (If httpRequest.Status = 200 Then… End If), l’avis de situation SIRENE a été trouvé sur le serveur et la fonction le télécharge (fichier PDF).
'---------------------------------------------------------------------------------- ' Cette fonction télécharge une fiche établissement à partir d'un n° SIRET ' en interrogeant l'API SIRENE de l'INSEE ' ' Paramètre de la requête : n° SIRET ' Restitution : ' - Statut : message d'erreur ou OK (status=200) ' - Fichier PDF de la fiche établissement (Si Statut OK) Function TéléchargerFicheSIRENE(SIRET As String, CheminFichier As String) As Integer 'Déclaration de variables & constantes Const URL_API = "https://api-avis-situation-sirene.insee.fr/identification/pdf/" Dim URL_API_SIRET Dim httpRequest As Object Dim response As String Dim fileStream As Object Dim NomFichierAvecChemin As String 'URL de l'API SIRENE avec le SIRET URL_API_SIRET = URL_API & SIRET 'Création de l'objet HTTPRequest Set httpRequest = CreateObject("MSXML2.ServerXMLHTTP.6.0") 'Envoi de la requête GET à l'API httpRequest.Open "GET", URL_API_SIRET, False httpRequest.setRequestHeader "Content-Type", "application/json" httpRequest.Send 'Collecte de la réponse de l'API (pour éventuelle analyse) response = httpRequest.responseText 'Si la requête a abouti (statut OK) -> enregistre le fichier PDF If httpRequest.Status = 200 Then 'Spécifie le chemin où enregistrer le fichier PDF NomFichierAvecChemin = CheminFichier & SIRET & ".pdf" 'Création de l'objet FileSystemObject pour gérer les fichiers Set fileStream = CreateObject("ADODB.Stream") 'Ouverture du flux fileStream.Open fileStream.Type = 1 'binaire 'Ecriture de la réponse de l'API dans le flux fileStream.Write httpRequest.responseBody 'Enregistrement du fichier sur le PC fileStream.SaveToFile NomFichierAvecChemin 'Fermeture du flux fileStream.Close End If 'Restitution du statut de la requête TéléchargerFicheSIRENE = httpRequest.Status 'Libération des objets Set httpRequest = Nothing Set fileStream = Nothing End Function
Automatiser le téléchargement en masse d’avis de situation SIRENE avec la fonction TéléchargerFichesSIRENE :
La fonction TéléchargerFichesSIRENE(SIREN As String, CheminFichier As String) télécharge les avis SIRENE de tous les établissements d’une entreprise (identifiée par son numéro SIREN).
Les paramètres d’entrée sont :
- Le numéro SIREN de l’entreprise ;
- Le chemin où enregistrer les avis SIRENE.
Le classeur ci-après teste la fonction avec différents numéros SIREN :
La fonction restitue le statut de la requête : 200 si les avis SIRENE ont pu être téléchargés sinon un code d’erreur.
Principaux retours de requêtes (statuts) des fonctions TéléchargerFicheSIRENE(SIRET,chemin) et TéléchargerFichesSIRENE(SIREN,chemin) :
- -1 : longueur du numéro SIREN/SIRET fourni non conforme (<> 9 ou 14 caractères)
- 200 : Fiche SIRENE trouvée (Ok) ;
- 404 : Fiche SIRENE non trouvée (Not Found) -> n° SIREN inexistant ?
- 429 : Vous avez dépassé votre quota de requêtes (Too Many Requests), réessayez plus tard…
- 500 : Problème sur le serveur de l’INSEE (Internal Server Error), réessayez plus tard…
- #VALEUR! -> le fichier PDF est déjà présent dans le dossier
Cette fonction prend de quelques secondes à plus d’une minute en fonction du volume de fiches à télécharger (exemple : test effectué sur 230 fiches réalisé en moins de 2 minutes…).
Des fiches SIRENE PDF portant le même nom ne doivent pas être déjà présentes dans le dossier lors de l’exécution de la fonction sinon un message d’erreur sera retourné.
A noter, pour être fonctionnelle, cette fonction nécessite que tous les établissements de l’entreprise soient répertoriés par la base INSEE (y compris les établissements inactifs/radiés) ce qui ne semble pas toujours le cas ; ainsi pour RENAULT RETAIL GROUP (SIREN n° 312 212 301), l’établissement 0001 n’étant pas connu de la base SIRENE, la fonction génère une erreur 404 (j’ai rencontré plusieurs cas dans mon groupe…). Dans ce cas, il n’y a pas d’autres solutions que de télécharger les fiches une à une avec la fonction TéléchargerFicheSIRENE…
Code source de la fonction TéléchargerFichesSIRENE :
La fonction commence par tester la taille du numéro SIREN (If Len(siren) <> 9 Then… End If) ; si le nombre de caractères diffère de neuf, la fonction retourne le message d’erreur -1 et s’arrête (Exit Function).
Passé ce test, la fonction passe en revue tous les numéros SIRET (constitués du numéro SIREN auquel sont adjoints successivement les codes établissements (NIC) de 0001 à 9999 (boucle compteur For i = 1 To 9999… Next i) suivi de la clef de contrôle). Ainsi le numéro SIRET sans clef de contrôle comprend 13 caractères et est programmé ainsi :
SIRET_sans_clef = siren & String(4 – Len(CStr(i)), “0”) & CStr(i)
Cstr(i) convertit la variable i (Integer = nombre entier) en une chaîne de caractères ; donc le nombre entier 1 devient la chaîne “1”.
La fonction Len(chaîne) renvoie le nombre de caractères compris dans une chaîne ; ainsi Len(“02001”) retourne 5.
La fonction String(nb_occurrences,chaîne) renvoie une chaîne x fois ; par exemple : String(4,”0″) retourne : “0000” (soit quatre “0”).
L’esperluette (&) permet de concaténer plusieurs chaînes ensemble ; “339403933” & “0200” donne “3394039330200”.
Ainsi, si la variable i = 57 et SIREN = 339403933, la variable SIRET_sans_clef prendra la valeur : 3394039330057 :
- SIREN : 339403933
- Len(“57″) = 2 caractères ; String(4 – 2,”0”) ajoute deux caractères “0” soit “00”
- CStr(i) = “57”
Ensuite la variable SIRET_sans_clef (13 caractères) et la clef de contrôle (sur 1 caractère) calculée par la fonction CalculeClefLuhn_SIRET (cf l’article Calculer la clef de contrôle d’un numéro SIRET) sont soumises à la fonction TéléchargerFicheSIRENE présentée plus haut (qui télécharge l’avis SIRENE de l’établissement).
'---------------------------------------------------------------------------------- ' Cette fonction télécharge en masse les fichee établissement d'une entreprise ' à partir de son n° SIRET en interrogeant l'API SIRENE de l'INSEE ' (les n° SIRET sont calculés les uns après les autres du NIC 1 au 9999 + clef de contrôle ; ' la fonction s'arrête dès lors que l'API indique d'un établissement n'a jamais existé) ' ' Paramètre de la requête : n° SIREN ' Restitution : ' - Statut : message d'erreur ou OK (status=200) ' - Fichier PDF de la fiche établissement (Si Statut OK) Function TéléchargerFichesSIRENE(siren As String, CheminFichier As String) As Integer 'Déclaration des variables Dim StatutRequête As Integer Dim Message_Statut As String Dim i As Integer Dim SIRET_sans_clef As String 'Vérification que le numéro SIREN contient 9 caractères If Len(siren) <> 9 Then TéléchargerFichesSIRENE = -1 'Valeur d'erreur pour indiquer que le numéro SIREN est incorrect Exit Function End If 'Boucle les établissements de 1 à 9999 (NIC sur 4 chiffres, de 0001 à 9999) For i = 1 To 9999 'SIRET sans clef (13 positions) = SIREN (9 positions) + NIC (4 positions) SIRET_sans_clef = siren & String(4 - Len(CStr(i)), "0") & CStr(i) 'Envoi de la requête, téléchargement du fichier PDF et réception du code statut StatutRequête = TéléchargerFicheSIRENE(SIRET_sans_clef & CStr(CalculeClefLuhn_SIRET(SIRET_sans_clef)), CheminFichier) 'Renvoi du code statut par la fonction TéléchargerFichesSIRENE = StatutRequête 'Traitement en cas de statut en erreur If StatutRequête <> 200 Then If (i = 1) Or (i > 1 And StatutRequête <> 404) Then 'L'établissement 1 n'esxiste pas ou bien apparition d'une erreur TéléchargerFichesSIRENE = StatutRequête Else: 'L'établissement en cours (variable i) n'existe pas mais les précédents existent 'Donc il faut renvoyer un statut OK TéléchargerFichesSIRENE = 200 End If 'Sortie de la boucle compteur... et incidemment de la fonction Exit For End If Next i End Function
Autres API utiles avec des exemples de codes VBA :
- Obtenir les distances et temps de parcours d’un trajet Google Maps
- Obtenir les informations juridiques d’une société à l’aide de l’API de Pappers.fr
Exemple de requêtes web : Automatiser la lecture des données boursières Yahoo Finance
Pour télécharger manuellement une fiche SIRENE, rendez-vous sur le site SIRENE (URL : https://avis-situation-sirene.insee.fr/), saisir le numéro SIREN ou SIRET voulu puis cliquer sur le bouton Lancer la recherche :
___
Approfondir le sujet : SIRET / SIREN / Information légale des entreprises
Derniers articles parBenoît RIVIERE (voir tous)
- Projet IXP (v1.2beta) : quelques nouvelles de mon interpréteur d’expressions - dimanche 1 décembre 2024
- Nouveautés de l’interpréteur de formules de calcul (v1.1) - dimanche 3 novembre 2024
- Dématérialisation de la facturation : nouvelles mentions obligatoires - lundi 28 octobre 2024
- Interpréteur de formules de calcul en Python - dimanche 13 octobre 2024
- Les données de la facturation électronique - mercredi 9 octobre 2024
Pingback: Python : automatiser le téléchargement en masse des documents juridiques et financiers des entreprises au format PDF à l'aide de l'API de l'INPI - Audit & Systèmes d'Information