Un outil indispensable pour votre veille commerciale
Dans le monde des affaires, connaître le statut actuel de vos prospects ou partenaires commerciaux est essentiel. Une entreprise a-t-elle déménagé ? Est-elle toujours active ? L’établissement que vous connaissez est-il fermé alors que l’entreprise existe ailleurs ?
Aujourd’hui, nous vous présentons une macro Excel puissante et simple à utiliser qui va révolutionner votre processus de vérification. Plus besoin de consulter manuellement le site gouvernemental pour chaque entreprise – notre solution automatise entièrement cette tâche !
L’API du gouvernement à votre service
Notre macro utilise l’API officielle du gouvernement français pour récupérer des informations à jour sur n’importe quelle entreprise. En quelques secondes, vous obtenez :
- Le statut actuel de l’entreprise (active ou fermée)
- Le statut spécifique de l’établissement recherché
- La date de fermeture (si applicable)
- L’adresse du siège social
- Le numéro SIREN
- Le nombre d’établissements ouverts
Comment installer la macro dans Excel
L’installation est simple et rapide. Suivez ces étapes :
- Ouvrez Excel et appuyez sur Alt+F11 pour ouvrir l’éditeur VBA
- Allez dans Outils > Références et vérifiez que les options suivantes sont cochées :
- « Microsoft XML, v6.0 » (ou la version disponible)
- « Microsoft Scripting Runtime »
- Sélectionnez Insertion > Module
- Copiez-collez le code complet fourni ci-dessous
Comment utiliser l’outil
Vous avez deux options pour utiliser cette macro :
Option 1 : Formule directe
Pour vérifier une entreprise spécifique, utilisez la formule :
=CheckCompanyStatus(B2;D2;C2)
Où B2 contient le nom de l’entreprise, D2 le code postal, et C2 l’adresse.
Option 2 : Macro automatisée (recommandée)
Pour traiter l’ensemble de votre fichier en un clic :
- Organisez votre fichier Excel avec les colonnes suivantes :
- Colonne B : Nom de la société
- Colonne C : Adresse
- Colonne D : Code postal
- Colonne E : Ville
- Appuyez sur Alt+F8
- Sélectionnez ImplementCompanyStatusChecker et cliquez sur Exécuter
La macro parcourra automatiquement toutes vos entreprises, avec un code couleur intuitif :
- 🟢 Vert : Entreprise active
- 🔴 Rouge : Entreprise ou établissement fermé
- 🟡 Jaune : Statut indéterminé
Le code de la macro
Voici le code complet de notre solution. Copiez-le intégralement dans votre module VBA :
Function CheckCompanyStatus(companyName As String, postalCode As String, Optional address As String = "") As String
Dim http As Object, url As String, response As String
Dim companyStatus As String, dateFermeture As String, etabsOuverts As String
Dim matchingAdress As Boolean, newAddress As String, sirenValue As String
Dim formattedAddress As String' Créer l'objet HTTP
Set http = CreateObject("MSXML2.XMLHTTP")' Construire l'URL de l'API
url = "https://recherche-entreprises.api.gouv.fr/search?q=" & _
WorksheetFunction.EncodeURL(companyName) & _
"&code_postal=" & postalCode & _
"&per_page=1"' Exécuter la requête API
On Error Resume Next
http.Open "GET", url, False
http.send
On Error GoTo 0' Vérifier si la requête a réussi
If http.status = 200 Then
response = http.responseText
' Extraction des informations de base
companyStatus = ExtractValue(response, """etat_administratif"":""", """")
sirenValue = ExtractValue(response, """siren"":""", """")
etabsOuverts = ExtractValue(response, """nombre_etablissements_ouverts"":", ",")
Dim totalEtabs As String
totalEtabs = ExtractValue(response, """nombre_etablissements"":", ",")
' Vérifier si l'établissement spécifique est ouvert ou fermé
Dim matchingEstablishment As String
matchingEstablishment = ExtractBetween(response, """matching_etablissements"":[", "]")
If matchingEstablishment <> "" Then
' Vérifier si l'établissement correspondant est fermé
Dim matchingStatus As String, matchingDateFermeture As String
matchingStatus = ExtractValue(matchingEstablishment, """etat_administratif"":""", """")
matchingDateFermeture = ExtractValue(matchingEstablishment, """date_fermeture"":""", """")
' Information sur l'adresse
Dim matchingAdresseComplete As String
matchingAdresseComplete = ExtractValue(matchingEstablishment, """adresse"":""", """")
' Vérifier le statut de l'établissement
If matchingStatus = "F" Or matchingDateFermeture <> "" And matchingDateFermeture <> "null" Then
' L'établissement est fermé, mais l'entreprise peut être active
If companyStatus = "A" Then
' Récupérer l'adresse du siège
Dim siegeInfo As String, siegeAdresse As String, siegeCP As String, siegeVille As String
siegeInfo = ExtractBetween(response, """siege"":{", "},")
siegeAdresse = ExtractValue(siegeInfo, """adresse"":""", """")
siegeCP = ExtractValue(siegeInfo, """code_postal"":""", """")
siegeVille = ExtractValue(siegeInfo, """libelle_commune"":""", """")
' Format de retour détaillé
CheckCompanyStatus = "ENTREPRISE ACTIVE mais ETABLISSEMENT FERMÉ" & vbCrLf & _
"Date fermeture: " & matchingDateFermeture & vbCrLf & _
"Adresse siège: " & siegeAdresse & vbCrLf & _
"SIREN: " & sirenValue & vbCrLf & _
"Etablissements ouverts: " & etabsOuverts & "/" & totalEtabs
Else
' L'entreprise est aussi fermée
CheckCompanyStatus = "ENTREPRISE FERMÉE" & vbCrLf & _
"Date fermeture: " & matchingDateFermeture & vbCrLf & _
"SIREN: " & sirenValue
End If
Else
' L'établissement est ouvert (normalement ne devrait pas arriver dans matching si l'adresse est la même)
CheckCompanyStatus = "ACTIF" & vbCrLf & _
"SIREN: " & sirenValue & vbCrLf & _
"Etablissements ouverts: " & etabsOuverts & "/" & totalEtabs
End If
Else
' Pas d'établissement correspondant à cette adresse, mais vérifier le siège
Dim siegeSection As String
siegeSection = ExtractBetween(response, """siege"":{", "},")
If siegeSection <> "" Then
Dim siegeStatus As String, siegeDateFermeture As String, siegeAdress As String
siegeStatus = ExtractValue(siegeSection, """etat_administratif"":""", """")
siegeDateFermeture = ExtractValue(siegeSection, """date_fermeture"":""", """")
siegeAdress = ExtractValue(siegeSection, """adresse"":""", """")
' Décider du statut global
If companyStatus = "A" Then
CheckCompanyStatus = "ENTREPRISE ACTIVE" & vbCrLf & _
"Adresse siège: " & siegeAdress & vbCrLf & _
"SIREN: " & sirenValue & vbCrLf & _
"Etablissements ouverts: " & etabsOuverts & "/" & totalEtabs
Else
CheckCompanyStatus = "ENTREPRISE FERMÉE" & vbCrLf & _
"SIREN: " & sirenValue
End If
Else
' Aucune information de siège disponible
CheckCompanyStatus = "STATUT INDÉTERMINÉ (informations partielles)"
End If
End If
Else
' Erreur API
CheckCompanyStatus = "ERREUR API: " & http.status
End If
End Function
' Fonction pour extraire une valeur entre deux marqueurs
Function ExtractValue(jsonText As String, startTag As String, endTag As String) As String
Dim startPos As Long, endPos As Long
startPos = InStr(jsonText, startTag)
If startPos > 0 Then
startPos = startPos + Len(startTag)
endPos = InStr(startPos, jsonText, endTag)
If endPos > startPos Then
ExtractValue = Mid(jsonText, startPos, endPos – startPos)
Else
ExtractValue = ""
End If
Else
ExtractValue = ""
End If
End Function
' Fonction pour extraire une section complète entre deux marqueurs
Function ExtractBetween(jsonText As String, startTag As String, endTag As String) As String
Dim startPos As Long, endPos As Long, nestedCount As Long
Dim i As Long, char As String
startPos = InStr(jsonText, startTag)
If startPos > 0 Then
startPos = startPos + Len(startTag)
' Gestion des accolades/crochets imbriqués
If Right(startTag, 1) = "[" Then
nestedCount = 1
endPos = startPos
For i = startPos To Len(jsonText)
char = Mid(jsonText, i, 1)
If char = "[" Then
nestedCount = nestedCount + 1
ElseIf char = "]" Then
nestedCount = nestedCount – 1
If nestedCount = 0 Then
endPos = i – 1
Exit For
End If
End If
Next i
If endPos > startPos Then
ExtractBetween = Mid(jsonText, startPos, endPos – startPos)
Else
ExtractBetween = ""
End If
Else
' Méthode simple pour les sections sans imbrication
endPos = InStr(startPos, jsonText, endTag)
If endPos > startPos Then
ExtractBetween = Mid(jsonText, startPos, endPos – startPos)
Else
ExtractBetween = ""
End If
End If
Else
ExtractBetween = ""
End If
End Function
' Fonction pour ajouter à Excel
Sub ImplementCompanyStatusChecker()
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Dim companyName As String, postalCode As String, address As String
Dim result As String
' Définir la feuille active
Set ws = ActiveSheet
' Vérifier que les colonnes nécessaires existent
If ws.Cells(1, 2).Value <> "Société" Then
MsgBox "La colonne B doit contenir le nom de la société (Société)", vbExclamation
Exit Sub
End If
If ws.Cells(1, 4).Value <> "cp" Then
MsgBox "La colonne D doit contenir le code postal (cp)", vbExclamation
Exit Sub
End If
' S'assurer que la colonne statut existe
If ws.Cells(1, 6).Value <> "Statut" Then
ws.Cells(1, 6).Value = "Statut"
End If
' Trouver la dernière ligne
lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
' Activer la barre de statut
Application.DisplayStatusBar = True
Application.StatusBar = "Initialisation…"
Application.ScreenUpdating = False
' Parcourir chaque ligne
For i = 2 To lastRow
' Mettre à jour la barre de progression
Application.StatusBar = "Traitement: " & i – 1 & "/" & lastRow – 1 & " (" & Format((i – 1) / (lastRow – 1), "0%") & ")"
' Récupérer les données
companyName = Trim(ws.Cells(i, 2).Value)
postalCode = Trim(ws.Cells(i, 4).Value)
address = Trim(ws.Cells(i, 3).Value) ' Adresse en colonne C
' Vérifier l'entreprise
If companyName <> "" And postalCode <> "" Then
result = CheckCompanyStatus(companyName, postalCode, address)
ws.Cells(i, 6).Value = result
' Mise en forme conditionnelle
If InStr(1, result, "ACTIF", vbTextCompare) > 0 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206) ' Vert
ElseIf InStr(1, result, "FERMÉ", vbTextCompare) > 0 Then
ws.Cells(i, 6).Interior.Color = RGB(255, 199, 206) ' Rouge
Else
ws.Cells(i, 6).Interior.Color = RGB(255, 235, 156) ' Jaune/Orange pour indéterminé
End If
' Ajuster la hauteur de ligne pour accommoder le texte multilignes
ws.Rows(i).RowHeight = 60
' Formater pour le texte multiligne
ws.Cells(i, 6).WrapText = True
' Pause pour éviter de surcharger l'API
Sleep 300
End If
Next i
' Ajuster les colonnes
ws.Columns("F:F").AutoFit
ws.Columns("F:F").ColumnWidth = 50 ' Largeur fixe pour accommoder le texte
' Réinitialiser
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox "Traitement terminé!", vbInformation
End Sub
' Fonction Sleep (pause en millisecondes)
Sub Sleep(milliseconds As Long)
Dim start As Double
start = Timer
Do While Timer < start + (milliseconds / 1000)
DoEvents
Loop
End Sub
Exemples concrets d’utilisation
Voici quelques scénarios où notre macro s’avère particulièrement utile :
- Mise à jour de votre base clients : Identifiez rapidement les entreprises qui ne sont plus actives pour nettoyer votre CRM
- Prospection commerciale : Vérifiez le statut des entreprises avant de lancer une campagne
- Vérification de fournisseurs : Assurez-vous que vos partenaires sont toujours en activité
- Due diligence : Dans le cadre d’une acquisition ou d’un partenariat stratégique
Exemples de résultats
Voici un aperçu des différents types de résultats que vous pourriez obtenir :
Entreprise active avec établissement à l’adresse spécifiée
ACTIF
SIREN: 401502950
Etablissements ouverts: 9/16
Entreprise active mais établissement fermé
ENTREPRISE ACTIVE mais ETABLISSEMENT FERMÉ
Date fermeture: 2020-09-28
Adresse siège: PONT DE MENAT 4 ROUTE DU PONT DE MENAT 63440 POUZOL
SIREN: 510829252
Etablissements ouverts: 1/2
Entreprise fermée
ENTREPRISE FERMÉE
Date fermeture: 2023-08-31
SIREN: 791023229
Conclusion
Cette macro Excel représente un gain de temps considérable pour toute entreprise devant vérifier régulièrement le statut de ses partenaires commerciaux ou prospects. En utilisant l’API officielle du gouvernement français, vous avez l’assurance d’obtenir des informations fiables et à jour.
N’hésitez pas à adapter ce code à vos besoins spécifiques ou à nous contacter pour plus d’informations sur nos services d’automatisation et de développement sur mesure.
Mots-clés : vérification entreprise, macro Excel, API gouvernement, statut entreprise, SIREN, automatisation Excel, VBA, entreprise active, établissement fermé
Vous avez des questions sur cette macro ou besoin d’une solution personnalisée ? Contactez notre équipe d’experts !