Extraire des données dans un fichier fermé (recherchev ou équivalent)

Bonjour pierrep56,

J'ai modifié quelques valeurs dans votre code pour l'adapter à mon fichier de base et cela fonctionne correctement, merci beaucoup pour votre aide.

J'ai encore une petite demande... je souhaiterai également récupérer le nom de la société ainsi que le nom du représentant légal par exemple mais je sèche sur le nom de la valeur que je dois récupérer car si je mets "denominationunitelegale" cela ne fonctionne pas, j'ai une erreur 438.

C'est curieux car lorsque j'ajoute certaines valeurs comme le siren ou sectionetablissement il n'y a pas de problème

Voici ce que donne votre code après que j'ai ajouté ma ligne pour le nom, peut-être que j'ai oublié quelque chose :

Sub Lire_sirene()

Dim lg As Long, nb As Long, i As Long, T As Variant

Dim DataSet As Object, Rcd As Object, Rc As Object, Fld As Object

nb = 10

With Sheets("DAS2bis")

lg = .Cells(Rows.Count, "F").End(xlUp).Row + 1

ReDim T(1 To nb, 1 To 5)

For i = lg To lg + nb - 1

If IsNumeric(.Cells(i, "E").Value) And Len(.Cells(i, "F").Value) = 0 Then

Set DataSet = oRecordSet(BASE_SIRENE & .Cells(i, "E").Value)

Set Rcd = VBA.CallByName(DataSet, "records", VbGet)

For Each Rc In Rcd

Set Fld = VBA.CallByName(Rc, "fields", VbGet)

T(i - lg + 1, 1) = VBA.CallByName(Fld, "siretsiegeunitelegale", VbGet)

T(i - lg + 1, 2) = VBA.CallByName(Fld, "denominationunitelegale", VbGet)

T(i - lg + 1, 3) = VBA.CallByName(Fld, "adresseetablissement", VbGet)

T(i - lg + 1, 4) = VBA.CallByName(Fld, "codepostaletablissement", VbGet)

T(i - lg + 1, 5) = VBA.CallByName(Fld, "libellecommuneetablissement", VbGet)

Next Rc

End If

Next i

.Range("F" & lg).Resize(UBound(T, 1), UBound(T, 2)) = T

End With

Set DataSet = Nothing

Set Rcd = Nothing

Set Fld = Nothing

End Sub

Bonne journée.

pierrep56,

Je viens de voir votre nouveau message, je vais regarder cette documentation et peut-être vais-je y trouver la réponse à ma question précédente.

Bonne journée.

Bonjour TheRusse,

Voici ci-après la liste complète des mots-clé disponibles dans ce jeu de données.

Dans cette liste il y a "nomunitelegale" et "prenomusuelunitelegale".

En revanche je n'y vois pas le terme "denominationunitelegale"

Pierre

activiteprincipaleetablissement

activiteprincipaleunitelegale

adresseetablissement

altitudemoyennecommuneetablissement

caractereemployeuretablissement

caractereemployeurunitelegale

categoriejuridiqueunitelegale

classeetablissement

classeunitelegale

codearrondissementetablissement

codecommuneetablissement

codedepartementetablissement

codeepcietablissement

codepostaletablissement

coderegionetablissement

datecreationunitelegale

datedebutetablissement

datefermetureetablissement

datefermetureunitelegale

departementetablissement

divisionetablissement

divisionunitelegale

epcietablissement

etablissementsiege

etatadministratifetablissement

etatadministratifunitelegale

geolocetablissement

groupeetablissement

groupeunitelegale

libellecommuneetablissement

libellevoieetablissement

naturejuridiqueunitelegale

nic

nicsiegeunitelegale

nombreperiodesetablissement

nomenclatureactiviteprincipaleetablissement

nomenclatureactiviteprincipaleunitelegale

nomunitelegale

populationcommuneetablissement

prenom1unitelegale

prenomusuelunitelegale

regionetablissement

sectionetablissement

sectionunitelegale

sexeunitelegale

siren

siret

siretsiegeunitelegale

soussectionetablissement

soussectionunitelegale

statutdiffusionetablissement

statutdiffusionunitelegale

superficiecommuneetablissement

typevoieetablissement

unitepurgeeunitelegale

pierrep56,

J'ai essayé avec "nomunitelegale" mais j'ai toujours cette erreur d'exécution 438 (Propriété ou méthode non gérée par cet objet).

En fait pour obtenir la liste des valeurs je suis allé sur la page

... %40public/ et j'ai fait un clic droit puis "afficher le code source de la page"... et enfin j'ai recherché ce qui pouvait ressemblé à ce que je cherchais.

Bonne journée.

MAIS OUI! Je suis un peu bête sur ce coup là!

J'aurai dû y penser avant, la structure d'un json est une structure souple (c'est même sa spécificité), donc tous les enregistrements ne contiennent pas forcément le même nombre de "colonnes" (du coup je ne connais même pas la liste exhaustive des mots-clés de ce jeu de données).

Donc pour certains, on obtient une valeur pour le mot clé "denominationunitelegale", pour d'autre une valeur à "nomunitelegale"

Pour prendre en compte ces 2 éléments, je propose une variante qui récupère potentiellement la valeur de ces 2 mots-clés.

J'en ai profité pour améliorer le code de requête qui me semble un peu plus rapide, sinon en tout cas plus facile à lire.

Désolé d'avoir dit des âneries!

Pierre

Ps : juste pour info =>

https://static.data.gouv.fr/resources/base-sirene-des-entreprises-et-de-leurs-etablissements-siren-siret-page-en-cours-de-construction/20181001-193555/description-fichier-stockunitelegale.pdf

Bonsoir pierrep56,

Cette fois c'est parfait, je dirai même mieux, le résultat est bien au-dessus de mes espérances et votre code va me permettre de gagner un temps fou car sinon j'avais tout un travail de vérification à faire manuellement.... de la folie douce !

Je vais voir pour investir un peu de temps en formation et tutoriels car je connais bien Excel pour un usage courant et basique d'entreprise, j'arrive à faire quelques macros en bidouillant et en rajoutant quelques lignes de codes piochées par ci par là, mais là c'est du très haut niveau et je vous dit bravo.

Je vous renouvelle mes remerciements pour l'aide apportée et je vous souhaite une bonne soirée.

PS : J'avais également posé la question sur un autre forum et deux contributeurs m'avaient suggéré entre autres solutions d'utiliser les API du site de l'INSEE mais sans plus de détail, voyez-vous un inconvénient à ce que je leur communique votre code ?

Bonjour TheRusse,

Content que ça convienne.

Pas de soucis pour partager le dernier fichier - le plus fonctionnel

(avec un lien vers cette page peut être? ça explique la démarche suivie)

Merci

Pierre

Bonjour pierrep56,

Si vous le voulez bien j'ai encore quelques questions sur mon sujet :

J'ai lu dans les commentaires des utilisateurs de cette base SIRENE ce message "L'API v3 a été repassée à 3000 appels par jour comme l'API v1. Les modalités sont globalement les mêmes que pour l'API v1 -> on adapte en fonction de la consommation globale de l'API gratuite afin que tout le monde puisse en profiter. Pour plus de stabilité nous donnons accès à une offre Prime pour laquelle les quotas d'appels à l'API peuvent être fixés contractuellement."

A quoi correspond "3000 appels / Jour", est-ce que c'est le nombre de requêtes qu'il est possible de faire et si oui une requête est égale à une ligne dans un tableau ?

Dans mon fichier de base la recherche s'effectue sur la valeur contenue dans la colonne F qui correspond en principe au SIRET de l'entreprise à vérifier mais il ce peut que nous n'ayons que le SIRENE comme valeur pour certains de nos fournisseurs et dans ce cas la recherche renvoie la valeur nulle, est-ce qu'il est possible de faire en sorte que si la valeur dans la colonne F est un SIRENE la recherche se fasse sur ce critère ?

Si je remplace "siret" par "siren" dans la ligne de code :

Public Const BASE_SIRENE = "https://data.opendatasoft.com/api/records/1.0/search/?dataset=sirene_v3%40public&q=siren%3D" je récupère bien le SIRENE mais plus le SIRET.

Bonne journée.

Bonjour TheRusse,

* "3000 appels / Jour" => je pense aussi que 1 ligne = 1 appel = 1 requête

Est-ce un facteur limitant pour la "vraie" utilisation?

* Siret/Siren =>

1/ Par principe, il n'est jamais bon de mélanger torchons et serviettes.

Je suggère plutôt (si c'est possible pour le vrai fichier) d'ajouter une colonne Siren à côté, pour pouvoir pointer facilement sur l'une ou l'autre de ces 2 colonnes (voir fichier démo).

A défaut, on pourra s'arranger en "bricolant".

2/ La recherche par Siren est un peu différente puisqu'elle peut renvoyer plusieurs enregistrements (pour un même n° siretsiegeunitelegale). Du coup le code doit être modifié en conséquence.

Voici une démo:

* 2 colonnes distinctes SIRET / SIREN.

* L'url s'écrit en fonction de l'une au l'autre de ces données.

* Si recherche sur SIREN => on récupère autant de "lignes" que d'enregistrements existants (multilignes dans une même cellule)

=> ainsi avec l'exemple (pris au hasard) Siren=6044564 on obtient 3 "lignes" de résultat (3 adresses différentes).

Est-ce que ça convient?

Pierre

Pierre,

En ce qui concerne les 3000 appels, nous avons des fichiers qui comportent 5.000 lignes voir plus et je me posais la question car hier en travaillant sur un de ces fichiers je n'avais plus de résultats au delà de 3.000 et quelques lignes mais je pense qu'en faisant les appels depuis différents PC pour un même fichier enregistré en réseau il est possible d'aller jusqu'à la dernière ligne de celui-ci.

Sinon, pas de soucis pour votre solution d'une colonne pour les SIRET et une autre pour les SIREN qui me convient tout à fait mais par contre j'ai fait un test et si en effet je récupère bien les trois adresses relatives à ce SIREN je n'ai pas la valeur du SIRET pour chacune d'elles, pensez-vous qu'il soit possible d'obtenir autant de SIRET que d'adresses ?

Merci beaucoup pour votre aide depuis le début de ce sujet ainsi que pour vos réponses à mes nombreuses questions.

Bonne journée.

Re,

A priori je pense que la limite des 3000 du site doit se baser sur l'IP réseau de l'appelant. Si tous les ordi dépendent du même réseau, ce sera 3000 quelque soit l'ordi ... pour 5000 ce sera plutôt une tâche sur 2 jours? (ou alors trichouiller via un VPN?)

Pour la recherche sur Siren : le 'siretsiegeunitelegale' est unique, en revanche le 'siret' peut être multiple (il me semble) => modif dans la démo5 avec 2 colonnes de résultat pour 'siretsiegeunitelegale' et 'siret' (multiple)

Bon aprèm

Pierre

Bonsoir Pierre,

J'ai pu finaliser tous mes fichiers largement dans les temps grâce à votre code et je vous en remercie encore.

Avant de mettre ce sujet comme résolu, j'aurai une dernière petite requête concernant ce fichier (c'est simplement esthétique), lorsque la recherche pointe sur un numéro de SIREN il y a plusieurs lignes de réponses dans la même cellule et une ligne vide (un retour chariot peut-être), est-ce qu'il y a moyen de supprimer cette ligne sans information ?

Et également une question concernant l'url qui permet l'accès aux informations, comment l'avez-vous trouvée ? J'ai beau naviguer sur le site opensatasoft et aller sur tous les onglets, je ne la trouve pas.

Bonne soirée.

Bonjour TheRusse,

Pour l'adresse :

* aller sur la page : https://data.opendatasoft.com/explore/dataset/sirene_v3%40public

* cliquer sur le logo API (en haut à droite de la page)

En bas de la page de l'API, il y a une adresse à rallonge (!)

En fait seul le début de cette adresse est à utiliser, en ajoutant le codage pour la requête

&q=SIRET%3D ... (ici %3D est le codage en hexa pour le signe égal)

Pour la doc complète => https://help.opendatasoft.com/apis/ods-search-v1/#search-api-v1

Pour la "ligne" vide c'est simple. Dans le code de la procédure Sub Lire_sirene au début de la boucle

For j = 0 To Rcd.Nhits - 1 on ajoute une ligne :

For j = 0 To Rcd.Nhits - 1
    If j = Rcd.Nhits - 1 Then rtl = ""
    ' etc ...

en gros c'est : "pour la dernière occurrence de j, pas de retour ligne".

(rtl c'est le diminutif de retour ligne, rien à voir avec la chaine radio)

En espérant avoir répondu à la question

Pierre

Bonjour Pierre,

Nous avons échangé il y a environ un an sur ce sujet et actuellement j'ai le même travail de contrôle des SIRET à réaliser, j'ai donc voulu réutilisé le dernier fichier (Recup_SIRET_json5.xlsm) avec la macro que vous aviez élaboré l'année dernière mais ça ne fonctionne plus...

En effet, lorsque je clique sur le bouton "Recherche" le curseur de la souris se transforme en sablier quelques instants puis redevient normal et c'est tout, aucune information n'apparaît dans la feuille Excel.

Pour information, j'ai vu que le sujet avait été repris dans un autre post (Vba interrogation critères multiples base SIRENE) par ERIC S et j'ai testé les fichiers qui étaient mis en exemple dans ce post mais je n'ai pas non plus le résultat escompté, par exemple avec le fichier "Interrogation SIRENE.xlsm", si je change quelque chose dans le formulaire de recherche et que je clique sur le bouton "Envoyer la requête", les informations déjà présentes dans la partie "Résultat de l'interrogation" sont effacées et j'ai un message de Microsoft Excel qui m'indique "Il y a trop d'enregistrement, voici les 100 premiers" mais rien n'apparaît non plus dans la feuille.

J'ai testé les fichiers sur deux PC avec des versions de Windows Différentes mais le résultat est le même...

Je fais une nouvelle fois appel à votre savoir et à votre temps, avez-vous une idée de ce qui peut "coincer" s'il vous plaît ?

PS : Le fichier "Recup_SIRET_json5.xlsm" est en pièce jointe.

Bonne journée.

Edit : erreur dans le fichier

Bonjour Pierre,

Merci pour votre réponse mais je ne comprends pas car de mon côté ça ne fonctionne toujours pas en faisant ceci :

- Mettre les valeurs de la colonne F (Siret) dans la colonne K ou uniquement les 9 premiers caractères de cette colonne, aucun de message d'erreur mais rien ne se passe à part le curseur de la souris qui change d'apparence quelques instants.

- Mettre les valeurs de la colonne F (Siret) dans la colonne A et en modifiant "K" par "A" dans la macro mais toujours rien.

J'ai également repris les fichiers antérieurs à (Recup_SIRET_json5.xlsm) un par un mais je n'ai pas de résultat non plus.

Bonne journée.

Cette version jointe fonctionne parfaitement

Pierre,

J'essaie actuellement avec le PC que j'ai au bureau et ça ne donne rien du tout, peu-être que le service IT de l'entreprise a mis des blocages sur certaines connexions.

J'essaierai ce soir de chez moi avec un autre PC pour voir mais ce week-end ça ne fonctionnait pas sur un PC équipé d'une ancienne version de Windows (Vista).

Sinon, est-ce que vous pensez que la version d'Excel utilisé pourrait avoir une incidence sur le fonctionnement de cette macro ?

Cordialement.

Testé et fonctionnel sur :

* PC "ordinaire" + Windows 10 64 bits + Office 2016 32 bits

* PC "très bas de gamme" + Windows 10 32 bits + Office 2007 32 bits

Bonsoir Pierre,

Je viens de relire tous les post au cas où j'aurai loupé quelque chose et j'ai essayé à nouveau tous les fichiers un par un chez moi mais aucune information ne s'affiche, c'est incompréhensible.

J'ai aussi essayé de modifier la sécurité des macros, désactivé le pare-feu Windows et l'antivirus mais rien de rien, c'est le néant.

Dernière tentative en mode pas à pas (F8) où la macro s'exécute sans problème ni blocage mais pas plus de résultat.

Il paraît que la nuit porte conseil, je me remettrai dessus demain.

Bonne soirée.

Rechercher des sujets similaires à "extraire donnees fichier ferme recherchev equivalent"