EXCEL (VBA) : Automatiser le téléchargement en masse des avis de situation SIRENE (avec l’API de l’INSEE)

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.

Avis de situation SIRENE pour le SIRET n° 312 212 301 02001 (RENAULT RETAIL GROUP à Clamart)

Avis de situation SIRENE pour le SIRET n° 312 212 301 02001 (RENAULT RETAIL GROUP à Clamart)

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) :

TéléchargerFicheSIRENE

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 :

TéléchargerFichesSIRENE

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…).

Fiches SIRENE téléchargées

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 :

SITE AVIS SITUATION SIRENE

___

Approfondir le sujet : SIRET / SIREN / Information légale des entreprises

Share Button
Télécharger En Masse Des Fiches SIRENE
Télécharger En Masse Des Fiches SIRENE
Telecharger-en-masse-des-fiches-SIRENE.xlsm
26 KiB
156 téléchargements
Détails...
The following two tabs change content below.
Après seize années passées en cabinet d’expertise-comptable et de commissariat aux comptes (où j’ai exercé comme expert-comptable et chef de mission audit), j’ai pris le poste de directeur comptable d’un groupe de distribution automobile en novembre 2014. Au cours de ma carrière, j’ai acquis une expérience significative en audit et en exploitation des systèmes d’information (analyse de données, automatisation des tâches, programmation informatique) au service de la production des comptes annuels et consolidés. C’est cette expérience personnelle et ma passion pour l’informatique que je partage sur ce blog. Mon CV / Réalisations personnelles et projets informatiques / Ma collection / Me contacter

Un commentaire

  1. 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

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.