{"id":11626,"date":"2023-12-11T06:18:55","date_gmt":"2023-12-11T05:18:55","guid":{"rendered":"https:\/\/www.auditsi.eu\/?p=11626"},"modified":"2023-12-03T21:19:14","modified_gmt":"2023-12-03T20:19:14","slug":"excel-vba-automatiser-le-telechargement-en-masse-des-avis-de-situation-sirene-avec-lapi-de-linsee","status":"publish","type":"post","link":"https:\/\/www.auditsi.eu\/?p=11626","title":{"rendered":"EXCEL (VBA) : Automatiser le t\u00e9l\u00e9chargement en masse des avis de situation SIRENE (avec l&#8217;API de l&#8217;INSEE)"},"content":{"rendered":"<p style=\"text-align: justify;\">Le <strong>r\u00e9pertoire SIRENE<\/strong> (Syst\u00e8me Informatique pour le R\u00e9pertoire des ENtreprises et des Etablissements) dont la gestion est confi\u00e9e \u00e0 l\u2019INSEE, <strong>identifie les entreprises<\/strong> au sens large et plus pr\u00e9cis\u00e9ment les entrepreneurs individuels, les personnes morales soumises au droit commercial, les institutions et services de l\u2019\u00c9tat et les collectivit\u00e9s territoriales, certaines associations. Toutes les mises \u00e0 jour d\u2019entreprises et d\u2019\u00e9tablissements (cr\u00e9ations, modifications, cessations) enregistr\u00e9s dans SIRENE proviennent des informations d\u00e9claratives des entreprises aupr\u00e8s du Guichet Unique et de certains Centres de Formalit\u00e9s des Entreprises (CFE).<\/p>\n<p style=\"text-align: justify;\">Une des fonctions du r\u00e9pertoire SIRENE est de fournir des avis de situation qui mentionnent, pour un <strong>num\u00e9ro SIREN ou SIRET<\/strong> donn\u00e9, les coordonn\u00e9es de l&#8217;entreprise ou de l&#8217;\u00e9tablissement correspondant et sa <strong>situation l\u00e9gale : en activit\u00e9 ou radi\u00e9e<\/strong>. Cette information est importante avant d&#8217;envisager de commercer avec un tiers.<\/p>\n<div id=\"attachment_11639\" style=\"width: 602px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-11639\" class=\"wp-image-11639 size-full\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/Fiche-SIRENE-RRG-312-212-301-02001.png\" alt=\"Avis de situation SIRENE pour le SIRET n\u00b0 312 212 301 02001 (RENAULT RETAIL GROUP \u00e0 Clamart)\" width=\"592\" height=\"761\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/Fiche-SIRENE-RRG-312-212-301-02001.png 592w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/Fiche-SIRENE-RRG-312-212-301-02001-233x300.png 233w\" sizes=\"auto, (max-width: 592px) 100vw, 592px\" \/><p id=\"caption-attachment-11639\" class=\"wp-caption-text\">Avis de situation SIRENE pour le SIRET n\u00b0 312 212 301 02001 (RENAULT RETAIL GROUP \u00e0 Clamart)<\/p><\/div>\n<p style=\"text-align: justify;\">Si le site SIRENE permet de t\u00e9l\u00e9charger les avis de situation un par un, il n&#8217;offre aucune possibilit\u00e9 de <strong>t\u00e9l\u00e9chargement en masse<\/strong>. C&#8217;est que proposera le classeur Excel pr\u00e9sent\u00e9 ci-apr\u00e8s (\u00e0 t\u00e9l\u00e9charger en pied d&#8217;article).<\/p>\n<p style=\"text-align: justify;\"><strong><em>Automatiser le t\u00e9l\u00e9chargement d&#8217;un avis de situation SIRENE :<\/em><\/strong><\/p>\n<p style=\"text-align: justify;\">Ce classeur cr\u00e9e la <strong>fonction T\u00e9l\u00e9chargerFicheSIRENE(SIRET As String, CheminFichier As String)<\/strong>. Cette fonction interroge le serveur SIRENE (requ\u00eate), restitue le statut de la requ\u00eate et t\u00e9l\u00e9charge l&#8217;avis de situation SIRENE de l&#8217;\u00e9tablissement d\u00e9sign\u00e9 par le num\u00e9ro SIRET.<\/p>\n<p style=\"text-align: justify;\">Cette fonction n\u00e9cessite en param\u00e8tres d&#8217;entr\u00e9e :<\/p>\n<ul>\n<li style=\"text-align: justify;\">le num\u00e9ro SIRET de l&#8217;\u00e9tablissement ;<\/li>\n<li style=\"text-align: justify;\">le chemin de destination o\u00f9 enregistrer l&#8217;avis de sitaution SIRENE de l&#8217;\u00e9tablissement.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">La fonction retourne le statut de la requ\u00eate dans la cellule Excel.<\/p>\n<p style=\"text-align: justify;\">La fonction T\u00e9l\u00e9chargerFicheSIRENE est utilisable dans une formule de calcul Excel ou peut \u00eatre appel\u00e9e par une maco VBA.<\/p>\n<p style=\"text-align: justify;\"><strong><em>Appel de la fonction T\u00e9l\u00e9chargerFicheSIRENE \u00e0 partir d&#8217;une formule de calcul Excel :<\/em><\/strong><\/p>\n<p style=\"text-align: justify;\">Dans cet exemple, la fonction envoie une requ\u00eate au sujet du SIRET num\u00e9ro 312 212 301 02001 (\u00e9tablissement RENAULT RETAIL GROUP sis \u00e0 Clamart). La fonction renvoie le statut de la demande (ici 200 = Ok : le serveur indique que le num\u00e9ro SIRET a bien \u00e9t\u00e9 identifi\u00e9 et que l&#8217;avis de situation a \u00e9t\u00e9 mis a disposition) :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11638\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/TelechargerFicheSIRENE.png\" alt=\"T\u00e9l\u00e9chargerFicheSIRENE\" width=\"570\" height=\"278\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/TelechargerFicheSIRENE.png 570w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/TelechargerFicheSIRENE-300x146.png 300w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/p>\n<p style=\"text-align: justify;\">L&#8217;avis de situation (fichier PDF) a \u00e9t\u00e9 mis \u00e0 disposition dans le dossier d\u00e9sign\u00e9 par la fonction (ici : C:\\cegid\\).<\/p>\n<p style=\"text-align: justify;\"><strong><em>Appel de la fonction T\u00e9l\u00e9chargerFicheSIRENE \u00e0 partir d&#8217;une macro VBA :<\/em><\/strong><\/p>\n<p style=\"text-align: justify;\">Le sous-programme ci-apr\u00e8s commande le t\u00e9l\u00e9chargement de la fiche SIRENE (<em>T\u00e9l\u00e9chargerFicheSIRENE(&#8220;SIRET 31221230102001&#8221;, &#8220;C:\\TEST API SIRENE\\&#8221;)<\/em>) correspondant au num\u00e9ro SIRET 312 212 301 020001 dans le dossier C:\\TEST API SIRENE\/ (le statut de la requ\u00eate appara\u00eet en clair avec la commande <em>MsgBox<\/em>, en anglais, au lieu d&#8217;un simple code \u00e9sot\u00e9rique&#8230;) :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">'----------------------------------------------------------------------------------\r\n'Routine exemple : t\u00e9l\u00e9charge une fiche SIRENE correspondant au n\u00b0 SIRET 31221230102001\r\nSub FicheSIRENE()\r\n    'D\u00e9claration des variables\r\n    Dim StatutRequ\u00eate As Integer\r\n    Dim Message_Statut As String\r\n    \r\n    'Envoi de la requ\u00eate, t\u00e9l\u00e9chargement du fichier PDF et r\u00e9ception du code statut\r\n    StatutRequ\u00eate = T\u00e9l\u00e9chargerFicheSIRENE(\"SIRET 31221230102001\", \"C:\\TEST API SIRENE\\\")\r\n\r\n    'Constitution du message de statut\r\n    '---Code statut\r\n    Message_Statut = StatutRequ\u00eate &amp; \". \"\r\n    '---Ajout d'un message en clair\r\n    Select Case StatutRequ\u00eate\r\n        Case 200:\r\n            Message_Statut = Message_Statut &amp; \"OK\"\r\n        Case 400:\r\n            Message_Statut = Message_Statut &amp; \"Bad Request\"\r\n        Case 404:\r\n            Message_Statut = Message_Statut &amp; \"Not Found\"\r\n        Case 429:\r\n            Message_Statut = Message_Statut &amp; \"Too Many Requests\"\r\n        Case 500:\r\n            Message_Statut = Message_Statut &amp; \"Internal Server Error\"\r\n        Case Else:\r\n            Message_Statut = Message_Statut &amp; \"Erreur non d\u00e9finie\"\r\n    End Select\r\n    'Affichage du message\r\n    MsgBox \"Statut de la requ\u00eate \u00e0 l'API SIRENE : \" &amp; Message_Statut &amp; \".\"\r\nEnd Sub<\/pre>\n<p style=\"text-align: justify;\"><strong><em>Code source de la fonction T\u00e9l\u00e9chargerFicheSIRENE :<\/em><\/strong><\/p>\n<p style=\"text-align: justify;\">Le fonctionnement de la fonction T\u00e9l\u00e9chargerFicheSIRENE est simple :<\/p>\n<ul>\n<li>Dans un premier temps, elle cr\u00e9e l&#8217;objet qui g\u00e8re la requ\u00eate : <em>Set httpRequest = CreateObject(&#8220;MSXML2.ServerXMLHTTP.6.0&#8221;)<\/em> ;<\/li>\n<li>Puis r\u00e9dige le texte de la requ\u00eate HTTP qui est compos\u00e9e de l&#8217;URL du serveur SIRENE (<strong><em>https:\/\/api-avis-situation-sirene.insee.fr\/identification\/pdf\/<\/em><\/strong>) suivie du num\u00e9ro SIRET (stock\u00e9 dans la variable <em>SIRET<\/em>) ;<\/li>\n<li>La requ\u00eate est ouverte \u00e0 l&#8217;aide de la commande suivante : <em>httpRequest.Open &#8220;GET&#8221;, URL_API_SIRET, False<\/em> puis envoy\u00e9e au serveur SIRENE (<em>httpRequest.Send<\/em>) ;<\/li>\n<li>Le serveur restitue le statut de la requ\u00eate (Ok ou erreur&#8230;) : <em>httpRequest.Status<\/em> ;<\/li>\n<li>Si le statut de la requ\u00eate est Ok (<em>If httpRequest.Status = 200 Then&#8230; End If<\/em>), l&#8217;avis de situation SIRENE a \u00e9t\u00e9 trouv\u00e9 sur le serveur et la fonction le t\u00e9l\u00e9charge (fichier PDF).<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">'----------------------------------------------------------------------------------\r\n' Cette fonction t\u00e9l\u00e9charge une fiche \u00e9tablissement \u00e0 partir d'un n\u00b0 SIRET\r\n' en interrogeant l'API SIRENE de l'INSEE\r\n'\r\n' Param\u00e8tre de la requ\u00eate : n\u00b0 SIRET\r\n' Restitution :\r\n'     - Statut : message d'erreur ou OK (status=200)\r\n'     - Fichier PDF de la fiche \u00e9tablissement (Si Statut OK)\r\nFunction T\u00e9l\u00e9chargerFicheSIRENE(SIRET As String, CheminFichier As String) As Integer\r\n    'D\u00e9claration de variables &amp; constantes\r\n    Const URL_API = \"https:\/\/api-avis-situation-sirene.insee.fr\/identification\/pdf\/\"\r\n    Dim URL_API_SIRET\r\n    Dim httpRequest As Object\r\n    Dim response As String\r\n    Dim fileStream As Object\r\n    Dim NomFichierAvecChemin As String\r\n    \r\n    'URL de l'API SIRENE avec le SIRET\r\n    URL_API_SIRET = URL_API &amp; SIRET\r\n    \r\n    'Cr\u00e9ation de l'objet HTTPRequest\r\n    Set httpRequest = CreateObject(\"MSXML2.ServerXMLHTTP.6.0\")\r\n    \r\n    'Envoi de la requ\u00eate GET \u00e0 l'API\r\n    httpRequest.Open \"GET\", URL_API_SIRET, False\r\n    httpRequest.setRequestHeader \"Content-Type\", \"application\/json\"\r\n    httpRequest.Send\r\n    \r\n    'Collecte de la r\u00e9ponse de l'API (pour \u00e9ventuelle analyse)\r\n    response = httpRequest.responseText\r\n    \r\n    'Si la requ\u00eate a abouti (statut OK) -&gt; enregistre le fichier PDF\r\n    If httpRequest.Status = 200 Then\r\n        'Sp\u00e9cifie le chemin o\u00f9 enregistrer le fichier PDF\r\n        NomFichierAvecChemin = CheminFichier &amp; SIRET &amp; \".pdf\"\r\n        \r\n        'Cr\u00e9ation de l'objet FileSystemObject pour g\u00e9rer les fichiers\r\n        Set fileStream = CreateObject(\"ADODB.Stream\")\r\n        \r\n        'Ouverture du flux\r\n        fileStream.Open\r\n        fileStream.Type = 1 'binaire\r\n        \r\n        'Ecriture de la r\u00e9ponse de l'API dans le flux\r\n        fileStream.Write httpRequest.responseBody\r\n        \r\n        'Enregistrement du fichier sur le PC\r\n        fileStream.SaveToFile NomFichierAvecChemin\r\n        \r\n        'Fermeture du flux\r\n        fileStream.Close\r\n    End If\r\n    \r\n    'Restitution du statut de la requ\u00eate\r\n    T\u00e9l\u00e9chargerFicheSIRENE = httpRequest.Status\r\n    \r\n    'Lib\u00e9ration des objets\r\n    Set httpRequest = Nothing\r\n    Set fileStream = Nothing\r\nEnd Function<\/pre>\n<p style=\"text-align: justify;\"><strong><em>Automatiser le t\u00e9l\u00e9chargement en masse d&#8217;avis de situation SIRENE avec la fonction T\u00e9l\u00e9chargerFichesSIRENE :<\/em><\/strong><\/p>\n<p style=\"text-align: justify;\">La fonction T\u00e9l\u00e9chargerFichesSIRENE(SIREN As String, CheminFichier As String) <strong>t\u00e9l\u00e9charge les avis SIRENE de tous les \u00e9tablissements d&#8217;une entreprise<\/strong> (identifi\u00e9e par son num\u00e9ro SIREN).<\/p>\n<p style=\"text-align: justify;\">Les param\u00e8tres d&#8217;entr\u00e9e sont :<\/p>\n<ul>\n<li>Le num\u00e9ro SIREN de l&#8217;entreprise ;<\/li>\n<li>Le chemin o\u00f9 enregistrer les avis SIRENE.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Le classeur ci-apr\u00e8s teste la fonction avec diff\u00e9rents num\u00e9ros SIREN :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11635\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/TelechargerFichesSIRENE.png\" alt=\"T\u00e9l\u00e9chargerFichesSIRENE\" width=\"573\" height=\"593\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/TelechargerFichesSIRENE.png 573w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/TelechargerFichesSIRENE-290x300.png 290w\" sizes=\"auto, (max-width: 573px) 100vw, 573px\" \/><\/p>\n<p style=\"text-align: justify;\">La fonction restitue le <strong>statut de la requ\u00eate<\/strong> : 200 si les avis SIRENE ont pu \u00eatre t\u00e9l\u00e9charg\u00e9s sinon un code d&#8217;erreur.<\/p>\n<p style=\"text-align: justify;\">Principaux retours de requ\u00eates (statuts) des fonctions T\u00e9l\u00e9chargerFicheSIRENE(SIRET,chemin) et T\u00e9l\u00e9chargerFichesSIRENE(SIREN,chemin) :<\/p>\n<ul>\n<li><span style=\"background-color: #ffff00;\">-1<\/span> : longueur du num\u00e9ro SIREN\/SIRET fourni non conforme (&lt;&gt; 9 ou 14 caract\u00e8res)<\/li>\n<li><span style=\"background-color: #00ff00;\">200<\/span> : Fiche SIRENE trouv\u00e9e (Ok) ;<\/li>\n<li><span style=\"background-color: #ffff00;\">404<\/span> : Fiche SIRENE non trouv\u00e9e (Not Found) -&gt; n\u00b0 SIREN inexistant ?<\/li>\n<li>429 : Vous avez d\u00e9pass\u00e9 votre quota de requ\u00eates (Too Many Requests), r\u00e9essayez plus tard&#8230;<\/li>\n<li>500 : Probl\u00e8me sur le serveur de l&#8217;INSEE (Internal Server Error), r\u00e9essayez plus tard&#8230;<\/li>\n<li>#VALEUR! -&gt; le fichier PDF est d\u00e9j\u00e0 pr\u00e9sent dans le dossier<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Cette fonction prend de quelques secondes \u00e0 plus d&#8217;une minute en fonction du volume de fiches \u00e0 t\u00e9l\u00e9charger (exemple : test effectu\u00e9 sur 230 fiches r\u00e9alis\u00e9 en moins de 2 minutes&#8230;).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11637\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/Fiches-SIRENE-telechargees.png\" alt=\"Fiches SIRENE t\u00e9l\u00e9charg\u00e9es\" width=\"531\" height=\"387\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/Fiches-SIRENE-telechargees.png 531w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/Fiches-SIRENE-telechargees-300x219.png 300w\" sizes=\"auto, (max-width: 531px) 100vw, 531px\" \/><\/p>\n<p style=\"text-align: justify;\">Des fiches SIRENE PDF portant le m\u00eame nom ne doivent pas \u00eatre d\u00e9j\u00e0 pr\u00e9sentes dans le dossier lors de l&#8217;ex\u00e9cution de la fonction sinon un message d&#8217;erreur sera retourn\u00e9.<\/p>\n<p style=\"text-align: justify;\">A noter, pour \u00eatre fonctionnelle, cette fonction n\u00e9cessite que tous les \u00e9tablissements de l&#8217;entreprise soient r\u00e9pertori\u00e9s par la base INSEE (y compris les \u00e9tablissements inactifs\/radi\u00e9s) ce qui ne semble pas toujours le cas ; ainsi pour RENAULT RETAIL GROUP (SIREN n\u00b0 312 212 301), l&#8217;\u00e9tablissement 0001 n&#8217;\u00e9tant pas connu de la base SIRENE, la fonction g\u00e9n\u00e8re une erreur 404 (j&#8217;ai rencontr\u00e9 plusieurs cas dans mon groupe&#8230;). Dans ce cas, il n&#8217;y a pas d&#8217;autres solutions que de t\u00e9l\u00e9charger les fiches une \u00e0 une avec la fonction T\u00e9l\u00e9chargerFicheSIRENE&#8230;<\/p>\n<p style=\"text-align: justify;\"><strong><em> Code source de la fonction T\u00e9l\u00e9chargerFichesSIRENE :<\/em><\/strong><\/p>\n<p style=\"text-align: justify;\">La fonction commence par tester la taille du num\u00e9ro SIREN (<em>If Len(siren) &lt;&gt; 9 Then&#8230; End If<\/em>) ; si le nombre de caract\u00e8res diff\u00e8re de neuf, la fonction retourne le message d&#8217;erreur -1 et s&#8217;arr\u00eate (<em>Exit Function<\/em>).<\/p>\n<p>Pass\u00e9 ce test, la fonction passe en revue tous les num\u00e9ros SIRET (constitu\u00e9s du num\u00e9ro SIREN auquel sont adjoints successivement les codes \u00e9tablissements (NIC) de 0001 \u00e0 9999 (boucle compteur <em>For i = 1 To 9999&#8230; Next i<\/em>) suivi de la clef de contr\u00f4le). Ainsi le num\u00e9ro SIRET sans clef de contr\u00f4le comprend 13 caract\u00e8res et est programm\u00e9 ainsi :<\/p>\n<p style=\"text-align: center;\">SIRET_sans_clef = siren &amp; String(4 &#8211; Len(CStr(i)), &#8220;0&#8221;) &amp; CStr(i)<\/p>\n<p style=\"text-align: justify;\"><strong>Cstr(i)<\/strong> convertit la variable i (Integer = nombre entier) en une cha\u00eene de caract\u00e8res ; donc le nombre entier 1 devient la cha\u00eene &#8220;1&#8221;.<\/p>\n<p style=\"text-align: justify;\">La fonction <strong>Len(cha\u00eene)<\/strong> renvoie le nombre de caract\u00e8res compris dans une cha\u00eene ; ainsi Len(&#8220;02001&#8221;) retourne 5.<\/p>\n<p style=\"text-align: justify;\">La fonction <strong>String(nb_occurrences,cha\u00eene)<\/strong> renvoie une cha\u00eene x fois ; par exemple : String(4,&#8221;0&#8243;) retourne : &#8220;0000&#8221; (soit quatre &#8220;0&#8221;).<\/p>\n<p style=\"text-align: justify;\">L&#8217;<strong>esperluette (&amp;)<\/strong> permet de concat\u00e9ner plusieurs cha\u00eenes ensemble ; &#8220;339403933&#8221; &amp; &#8220;0200&#8221; donne &#8220;3394039330200&#8221;.<\/p>\n<p style=\"text-align: justify;\">Ainsi, si la variable i = 57 et SIREN = 339403933, la variable SIRET_sans_clef prendra la valeur : 3394039330057 :<\/p>\n<ul>\n<li>SIREN : 339403933<\/li>\n<li>Len(&#8220;57&#8243;) = 2 caract\u00e8res ; String(4 &#8211; 2,&#8221;0&#8221;) ajoute deux caract\u00e8res &#8220;0&#8221; soit &#8220;00&#8221;<\/li>\n<li>CStr(i) = &#8220;57&#8221;<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Ensuite la variable SIRET_sans_clef (13 caract\u00e8res) et la clef de contr\u00f4le (sur 1 caract\u00e8re) calcul\u00e9e par la fonction CalculeClefLuhn_SIRET (cf l&#8217;article <a href=\"https:\/\/www.auditsi.eu\/?p=11620\">Calculer la clef de contr\u00f4le d\u2019un num\u00e9ro SIRET<\/a>) sont soumises \u00e0 la fonction T\u00e9l\u00e9chargerFicheSIRENE pr\u00e9sent\u00e9e plus haut (qui t\u00e9l\u00e9charge l&#8217;avis SIRENE de l&#8217;\u00e9tablissement).<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">'----------------------------------------------------------------------------------\r\n' Cette fonction t\u00e9l\u00e9charge en masse les fichee \u00e9tablissement d'une entreprise\r\n' \u00e0 partir de son n\u00b0 SIRET en interrogeant l'API SIRENE de l'INSEE\r\n' (les n\u00b0 SIRET sont calcul\u00e9s les uns apr\u00e8s les autres du NIC 1 au 9999 + clef de contr\u00f4le ;\r\n' la fonction s'arr\u00eate d\u00e8s lors que l'API indique d'un \u00e9tablissement n'a jamais exist\u00e9)\r\n'\r\n' Param\u00e8tre de la requ\u00eate : n\u00b0 SIREN\r\n' Restitution :\r\n'     - Statut : message d'erreur ou OK (status=200)\r\n'     - Fichier PDF de la fiche \u00e9tablissement (Si Statut OK)\r\nFunction T\u00e9l\u00e9chargerFichesSIRENE(siren As String, CheminFichier As String) As Integer\r\n    'D\u00e9claration des variables\r\n    Dim StatutRequ\u00eate As Integer\r\n    Dim Message_Statut As String\r\n    Dim i As Integer\r\n    Dim SIRET_sans_clef As String\r\n    \r\n    'V\u00e9rification que le num\u00e9ro SIREN contient 9 caract\u00e8res\r\n    If Len(siren) &lt;&gt; 9 Then\r\n        T\u00e9l\u00e9chargerFichesSIRENE = -1 'Valeur d'erreur pour indiquer que le num\u00e9ro SIREN est incorrect\r\n        Exit Function\r\n    End If\r\n    \r\n    'Boucle les \u00e9tablissements de 1 \u00e0 9999 (NIC sur 4 chiffres, de 0001 \u00e0 9999)\r\n    For i = 1 To 9999\r\n        'SIRET sans clef (13 positions) = SIREN (9 positions) + NIC (4 positions)\r\n        SIRET_sans_clef = siren &amp; String(4 - Len(CStr(i)), \"0\") &amp; CStr(i)\r\n        \r\n        'Envoi de la requ\u00eate, t\u00e9l\u00e9chargement du fichier PDF et r\u00e9ception du code statut\r\n        StatutRequ\u00eate = T\u00e9l\u00e9chargerFicheSIRENE(SIRET_sans_clef &amp; CStr(CalculeClefLuhn_SIRET(SIRET_sans_clef)), CheminFichier)\r\n        'Renvoi du code statut par la fonction\r\n        T\u00e9l\u00e9chargerFichesSIRENE = StatutRequ\u00eate\r\n        'Traitement en cas de statut en erreur\r\n        If StatutRequ\u00eate &lt;&gt; 200 Then\r\n            If (i = 1) Or (i &gt; 1 And StatutRequ\u00eate &lt;&gt; 404) Then\r\n                'L'\u00e9tablissement 1 n'esxiste pas ou bien apparition d'une erreur\r\n                T\u00e9l\u00e9chargerFichesSIRENE = StatutRequ\u00eate\r\n            Else:\r\n                'L'\u00e9tablissement en cours (variable i) n'existe pas mais les pr\u00e9c\u00e9dents existent\r\n                'Donc il faut renvoyer un statut OK\r\n                T\u00e9l\u00e9chargerFichesSIRENE = 200\r\n            End If\r\n            'Sortie de la boucle compteur... et incidemment de la fonction\r\n            Exit For\r\n        End If\r\n    Next i\r\nEnd Function<\/pre>\n<p style=\"text-align: justify;\"><strong>Autres API<\/strong> utiles avec des exemples de codes VBA :<\/p>\n<ul>\n<li>Obtenir les <strong>distances et temps de parcours d\u2019un trajet<\/strong> <a href=\"https:\/\/www.auditsi.eu\/?p=11129\">Google Maps<\/a><\/li>\n<li>Obtenir les <strong>informations juridiques d\u2019une soci\u00e9t\u00e9<\/strong> \u00e0 l\u2019aide de l\u2019<a href=\"https:\/\/www.auditsi.eu\/?p=9377\">API de Pappers.fr<\/a><\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Exemple de <strong>requ\u00eates web<\/strong> : <a href=\"https:\/\/www.auditsi.eu\/?p=10797\">Automatiser la lecture des donn\u00e9es boursi\u00e8res Yahoo Finance<\/a>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Pour <strong>t\u00e9l\u00e9charger manuellement une fiche SIRENE<\/strong>, rendez-vous sur le site SIRENE (URL : <a href=\"https:\/\/avis-situation-sirene.insee.fr\/\" target=\"_blank\" rel=\"noopener\">https:\/\/avis-situation-sirene.insee.fr\/<\/a>), saisir le num\u00e9ro SIREN ou SIRET voulu puis cliquer sur le bouton Lancer la recherche :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11641\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/SITE-AVIS-SITUATION-SIRENE.png\" alt=\"SITE AVIS SITUATION SIRENE\" width=\"942\" height=\"871\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/SITE-AVIS-SITUATION-SIRENE.png 942w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/SITE-AVIS-SITUATION-SIRENE-300x277.png 300w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/SITE-AVIS-SITUATION-SIRENE-768x710.png 768w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/08\/SITE-AVIS-SITUATION-SIRENE-730x675.png 730w\" sizes=\"auto, (max-width: 942px) 100vw, 942px\" \/><\/p>\n<p style=\"text-align: justify;\">___<\/p>\n<p style=\"text-align: justify;\">Approfondir le sujet : <a href=\"https:\/\/www.auditsi.eu\/?tag=siret\">SIRET<\/a> \/ <a href=\"https:\/\/www.auditsi.eu\/?tag=siren\">SIREN<\/a> \/ <a href=\"https:\/\/www.auditsi.eu\/?p=9269\">Information l\u00e9gale des entreprises<\/a><\/p>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img decoding=\"async\" src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"EXCEL%20%28VBA%29%20%3A%20Automatiser%20le%20t%C3%A9l%C3%A9chargement%20en%20masse%20des%20avis%20de%20situation%20SIRENE%20%28avec%20l%27API%20de%20l%27INSEE%29\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>Le r\u00e9pertoire SIRENE (Syst\u00e8me Informatique pour le R\u00e9pertoire des ENtreprises et des Etablissements) dont la gestion est confi\u00e9e \u00e0 l\u2019INSEE, identifie les entreprises au sens large et plus pr\u00e9cis\u00e9ment les entrepreneurs individuels, les personnes morales soumises au droit commercial, les institutions et services de l\u2019\u00c9tat et les collectivit\u00e9s territoriales, certaines associations. Toutes les mises \u00e0 &#8230;<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?p=11626\" class=\"more-link\">Continue reading &lsquo;EXCEL (VBA) : Automatiser le t\u00e9l\u00e9chargement en masse des avis de situation SIRENE (avec l&#8217;API de l&#8217;INSEE)&rsquo; &raquo;<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"EXCEL%20%28VBA%29%20%3A%20Automatiser%20le%20t%C3%A9l%C3%A9chargement%20en%20masse%20des%20avis%20de%20situation%20SIRENE%20%28avec%20l%27API%20de%20l%27INSEE%29\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[48,215],"tags":[3045,2394,2393,3046,2116,815,3042,3036,3047,3044,2057,2903,1788,3043,1787,233,2395,11,1784,2358,2359,385,1641],"class_list":["post-11626","post","type-post","status-publish","format-standard","hentry","category-excel","category-vba","tag-open-get","tag-responsetext","tag-send","tag-status","tag-api","tag-automatisation","tag-avis-de-situation","tag-cfe","tag-createobjectadodb-stream","tag-createobjectmsxml2-serverxmlhttp-6-0","tag-cstr","tag-esperluette","tag-formule-de-luhn","tag-guichet-unique","tag-insee-fr","tag-len","tag-requete-http","tag-scandales-financiers","tag-siren","tag-sirene","tag-siret","tag-string","tag-vba"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/11626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11626"}],"version-history":[{"count":25,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/11626\/revisions"}],"predecessor-version":[{"id":11867,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/11626\/revisions\/11867"}],"wp:attachment":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}