La collecte d’informations qualifiées sur les tiers avec lesquels une entreprise est en affaire est primordiale surtout dans le contexte de crise actuel. Par ailleurs, cette pratique répond à des obligations légales en rapport avec l’évaluation du risques de contrôle interne (PAF) ou encore la lutte contre le blanchiment, la corruption et le financement du terrorisme (loi SAPIN 2…).
Ce processus de collecte gagne à être systématisé et automatisé. Les API (Application Programming Interface ou interface de programmation applicative) aident à développer ces pratiques.
Un 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’un API.
Le fonctionnement d’un 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 ses données dans son processus de calcul. Les API assurent ainsi l’interaction entre des logiciels d’éditeurs différents.
Excel est en capacité d’interroger un API web (protocole HTTP). A titre d’exemple, la feuille de calcul Excel (fournie en libre téléchargement) permet d’interroger, à l’aide de requêtes, la base de données d’informations juridiques Pappers.fr grâce son API.
Pour utiliser l’API Pappers.fr, il est nécessaire de s’inscrire gratuitement sur le site. Suite à cette inscription, l’utilisateur obtient un Token (identifiant unique personnel) qui sert de clef pour communiquer avec Pappers.fr. La feuille de calcul n’est utilisable qu’après insertion de ce token dans le code VBA (à la place des XXXXX de la ligne Const Pappers_Token = “api_token=XXXXX”). Pour accéder au code VBA, il faut ajouter le menu Développeur au ruban de menus d’Excel puis cliquer sur le bouton Visual Basic.
La version gratuite de l’API Pappers permet de consulter dix mille fiches entreprises par mois et mille téléchargements de documents par mois, ce qui répond aux besoins les plus usuels.
Paramètres de la requête envoyée à Pappers (QUERY PARAMETERS) et statuts de la réponse (RESPONSES) :
Exemple de requête :
https://api.pappers.fr/v1/entreprise?api_token=XXXXXXXX&siren=542065479
Réponse de l’API pour le SIREN 542 065 479 (PSA AUTOMOBILES) :
La réponse de Pappers comprend quatre statuts différents. Si le SIREN existe (et que le Token est reconnu), la réponse renvoyée comprend le statut 200 et les champs de données correspondant à la fiche juridique.
Extrait des champs disponibles sur l’interface Pappers.fr :
La feuille de calcul ci-après interroge la base Pappers et restitue les données suivantes :
L’utilisateur saisit un numéro SIREN et clique sur le bouton Importation. Ce bouton déclenche l’exécution d’une macro VBA qui envoie une requête (Set Req = CreateObject(“MSXML2.ServerXMLHTTP”) Req.Open “GET”, URL, False Req.Send) vers l’API et analyse la réponse reçue en retour (Réponse = Req.ResponseText).
La feuille de calcul affiche un échantillon de données contenu dans la réponse de l’API.
Le code source de la macro VBA est le suivant :
'Macro VBA d'interrogation des bases Pappers (API) 'Ecrit par Benoît RIVIERE 12/2020, benoit@auditsi.eu 'Informations : https://www.auditsi.eu/?p=9377 Option Explicit 'Constantes '---Token Pappers : pour en obtenir un gratuitement : https://www.pappers.fr/api/register Const Pappers_Token = "api_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" '---Adresse HTTP de l'API Pappers Const Pappers_URL = "https://api.pappers.fr/v1/entreprise" Function Extraction_champ(Chaîne As Variant, NomChamp) Dim PositionDébut As Long NomChamp = NomChamp & """:""" PositionDébut = InStr(Chaîne, NomChamp) + Len(NomChamp) Extraction_champ = Mid(Chaîne, PositionDébut, InStr(Right(Chaîne, Len(Chaîne) - PositionDébut + 1), """") - 1) End Function Sub Infos_Jur() Dim SIREN As String Dim URL As String Dim Réponse As String Dim Req As Object Dim i As Integer Dim MsgErreur As String Dim LibChamp As String Dim Champ As String Dim ligne As Integer Dim DénomSoc As String 'Lecture SIREN SIREN = ActiveSheet.Range("B6") '---Si SIREN est vide sortir de la procédure If SIREN = "" Then Exit Sub 'Constitution de l'URL à requêter URL = Pappers_URL & "?" & Pappers_Token & "&siren=" & SIREN 'Envoi de la requête au site Pappers Set Req = CreateObject("MSXML2.ServerXMLHTTP") Req.Open "GET", URL, False Req.Send 'Lecture de la réponse à la requête restituée par Pappers Réponse = Req.ResponseText 'Si la réponse correspond à un message d'erreur la variable MsgErreur renvoie un message MsgErreur = "" If InStr(Réponse, "statusCode"":400,""error") > 1 Or InStr(Réponse, "statusCode"":404,""error") > 1 Then MsgErreur = "SIREN inconnu !" ElseIf InStr(Réponse, "statusCode"":401,""error") > 1 Then MsgErreur = "Token non reconnu ! Pour obtenir un Token valide, s'inscrire sur https://www.pappers.fr/api/register" End If 'Restitution des données juridiques For i = 1 To 10 '10 champs de données restitués 'Extraction des champs de données Select Case i Case 1: LibChamp = "Dénomination sociale" Champ = Extraction_champ(Réponse, "denomination") DénomSoc = Champ Case 2: LibChamp = "Forme juridique" Champ = Extraction_champ(Réponse, "forme_juridique") Case 3: LibChamp = "Capital social" Champ = Extraction_champ(Réponse, "capital") Case 4: LibChamp = "Code postal + ville" Champ = Extraction_champ(Réponse, "code_postal") & " " & Extraction_champ(Réponse, "ville") Case 5: LibChamp = "Latitude / Longitude" Champ = Extraction_champ(Réponse, "latitude") & " / " & Extraction_champ(Réponse, "longitude") Case 6: LibChamp = "Activité (NAF)" Champ = Extraction_champ(Réponse, "code_naf") & ". " & Extraction_champ(Réponse, "libelle_code_naf") Case 7: LibChamp = "Objet social" Champ = Extraction_champ(Réponse, "objet_social") Case 8: LibChamp = "Date de création" Champ = Extraction_champ(Réponse, "date_creation_formate") Case 9: LibChamp = "Entreprise cessée" Champ = Extraction_champ(Réponse, "entreprise_cessee") Case 10: LibChamp = "Numéro de TVA intracommunautaire" Champ = Extraction_champ(Réponse, "numero_tva_intracommunautaire") End Select 'Ligne de la feuille de calcul où coller le champ en cours ligne = 9 + (i - 1) * 2 'Si le SIREN est inconnu -> renvoyer un message d'erreur If MsgErreur <> "" Then Champ = MsgErreur 'Transfert des données dans le classeur Excel With ActiveSheet .Range("A" & ligne).Value = LibChamp .Range("B" & ligne).Value = Champ End With Next i 'Liens hypertextes With ActiveSheet If MsgErreur <> "" Then .Range("A" & ligne + 2).Value = "" Else .Hyperlinks.Add Anchor:=.Range("A" & ligne + 2), Address:="https://www.pappers.fr/entreprise/" & SIREN, TextToDisplay:="Cliquer ici pour accéder à la fiche juridique Pappers de l'entreprise " & DénomSoc End If .Hyperlinks.Add Anchor:=.Range("A" & ligne + 4), Address:="https://www.auditsi.eu/?p=9377", TextToDisplay:="Plus d'informations sur www.auditsi.eu" End With End Sub
D’autres sites d’informations légales ou de cotation d’entreprises proposent des API, par exemple :
- Le site de l’INPI (accès au RCS) : https://data.inpi.fr/content/editorial/apis_entreprises_doc
- Le site Companies House (le RCS britannique) : https://developer.company-information.service.gov.uk/api/docs/index/gettingStarted.html#overview
- Le Registre des Bénéficiaires Effectifs (RBE) recensant toutes les personnes physiques associées ou actionnaires d’une société civile ou commerciale exerçant un contrôle effectif sur ses organes décisionnels. Accès réservé notamment aux experts-comptables, commissaires aux comptes, avocats… : https://api.gouv.fr/les-api/api-rbe
- Répertoire National des Métiers : https://api.gouv.fr/les-api/api_rnm
- Le registre public des entreprises artisanales : https://api.gouv.fr/les-api/api_rnm
- Répertoire National des Associations (RNA) : https://api.gouv.fr/les-api/api_rna
- Le site CreditSafe (cotation d’entreprises) : https://www.creditsafe.com/fr/fr/solutions-integrees/api-integration-de-donnees/api-creditsafe.html
L’interrogation de sites internet ne disposant pas d’API peut passer par l’analyse de la restitution de simples requêtes HTTP.
Exemples de réutilisation des informations juridiques et légales : Fonctions Excel (DénominationSociale et NuméroTVAIntracommunautaire) / Intégration des informations juridiques et cotations d’entreprises dans la balance auxiliaire (projet PADoCC_Ecritures)
___
Approfondir le sujet : Informations juridiques et légales / Programmer en VBA


Derniers articles parBenoît RIVIERE (voir tous)
- Projet IXP (v1.21beta) : nouvelle version en ligne - mardi 7 janvier 2025
- Excel : conserver les zéros non significatifs à gauche - dimanche 5 janvier 2025
- Excellente année 2025 ! - mercredi 1 janvier 2025
- Projet IXP (v1.21beta) : contrôles de cohérences et gestion MULTIFEC - lundi 30 décembre 2024
- Joyeuses fêtes de fin d’année ! - mardi 24 décembre 2024
Bonjour Benoit
Félicitation pour votre site d’une richesse et d’une aide précieuse.
J’ai utilisé votre code avec l’api pappers.
Je souhaitais utiliser la seconde fonction de cette api qui est de fournir une liste de sociétés à partir d’un nom.
Souvent nécessaire lors de la création d’un compte client si nous n’avons pas le siren. Débutant en vba, je reste bloqué sur la mise en forme de la réponse. comment mettre les données en forme de tableau.
Si vous avez une piste je suis preneur.
bonne journée
benoist
Bonsoir,
Je ne me suis pas encore penché sur cette question parce que ce n’est pas dans mes besoins du moment. Je pense qu’il faut scinder la réponse reçue avec des Split.
Je regarderai à l’occasion.
Bonne soirée,
Benoît RIVIERE
Bonjour Benoît,
Félicitation pour ce code très utile.
Petit aide complémentaire. Quelle est la syntaxe pour les champs de type Array (eg Representants) pour obtenir pour chacun d’entre eux : nom, prénom, qualité …
Merci d’avance de votre aide
Bien cordialement
Philippe BÉRARD
Merci pour le code très utile.Est il possible de rajouter 2 infos “le ratio d’endettement” et le “résultat net”
J’ai essayé d’insérer dans le VBA 2 cases mais le résultat n’est pas bon
Cordialement
Pingback: Reconstituer l'organigramme juridique d'un groupe avec Pappers - Audit & Systèmes d'Information
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
Pingback: Télécharger gratuitement des listes d'entreprises et de leurs établissements (fichier SIRENE) - Audit & Systèmes d'Information
Bonjour Benoît,
Félicitation pour cet article très bien fait.
Petite question. Quelle est la syntaxe pour les champs de type Array (eg Etablissement) pour obtenir pour chacun d’entre eux : adresse…
Merci d’avance de votre aide.
Pingback: Excel : collecter des données juridiques sur les entreprises avec l'API SIRENE - 1ère partie : base SIREN (entreprises) - Audit & Systèmes d'Information