VBA manipulation d'objets suite à réception fichier JSON

ERIC S

XLDnaute Barbatruc
Bonjour le forum

pas habitué à manipuler JSON et les objets, je cherche, à partir d'infos trouvées sur un autre forum, à interroger la base SIREN (siret des entreprises) à partir d'Excel.

J'ai reçu de l'aide sur une première méthode mais je veux implémenter la seconde. Explication fonctionnement et pb rencontré
le fichier joint contient les 2 méthodes.
Feuille SIRENE = 1ère méthode, la feuille Brut visualise la réponse reçue en format Json.
en vba, le module API1 contient le code : une fonction qui récupère le JSON et une macro qui entre autres récupères les enregistrements (champs fields de l'objet records, appelé par VBACALLBYNAME
Feuille SIRENE V2 = utilisation d'une autre API d'Opendatasoft, la réponse est en BrutV2, le vba en module API2.
mon problème : les enregistrements sont dans le champs fields, qui se retouve dans record, lui-même dans records
il y a donc un étage de plus et je n'arrive pas à le franchir (en plus le debug sur les objets est null en vba), seul constat cela commence déjà à la ligne
Set Fld = VBA.CallByName(Rcd, "record", VbGet) où en survolant Fld je vois "nothing", donc j en'arrive pas à passer d'objet en objet pour arriver aux champs fields.
Quelqu'un peut-il m'expliquer le mécanisme à adopter pour cette seconde méthode pour utiliser vbacallbyname (je pourrais évidemment en vba analyser le texte affiché en brutv2 pour retrouver les enregistrements, mais comment procéder avec les objets
Merci
 

Pièces jointes

  • SIRENE (2).xlsm
    38.8 KB · Affichages: 13
Dernière édition:

ERIC S

XLDnaute Barbatruc
Bonjour Staple
je n'avais pas trouvé le sujet sur Excel-downloads et je sui s passé par Excel-pratique où j'ai été en contact avec pierrep56 (tatiak).
Je n'ai pas pu obtenir d'explication sur pourquoi mon itération sur les vbacallbyname n efonctionne pas
Sinon, il m'a super aidé dans le début de ma recherche
 

ERIC S

XLDnaute Barbatruc
Bonjour tatiak
non je n'ai pas eu l'explication réelle sur le code qui ne fonctionne pas et je ne comprend pas pourquoi tu es resté sur "ma première méthode fonctionne".
C'est tout
de toute façon encore merci pour les premières infos reçues
 

ERIC S

XLDnaute Barbatruc
Désolé Tatiak

non tu n'es pas invisible mais je n'étais plus chez moi à ton dernier post et sur mon mobile et gérant d'autres soucis non excel, j'ai mal analysé ta dernière réponse.

Je regarde tout cela et je vous tiens au courant sur les 2 forum
 

ERIC S

XLDnaute Barbatruc
RE-bonjour Staple, Tatiak, le forum

comme annoncé voici le fichier réalisé pour consulter la base SIRENE V3 (Siret des entreprises - 30 millions d'enregistrements) à partir d'Excel, en mode multicritères.
- interrogation via API V1 d'opendatasoft
- interrogation via API V2 d'opendatasoft
Donc c'est faisable, reste à chacun de fouiller dans les champs pour aller plus loin (lien site dans fichier)

Merci aux plus que contributeurs de ce site, car je partais de très loin.
 

Pièces jointes

  • SIRENE (3).xlsm
    61.2 KB · Affichages: 60

crocrocro

XLDnaute Impliqué
Bonjour à tous,
je viens de télécharger le fichier du post 9 (merci Eric et tous les contributeurs) qui date de 2020 qui doit être adapté pour fonctionner correctement aujourd'hui.
Même s'il s'agit ici simplement d'un exemple d'utilisation d'OpenDataSoft ...
Je n'ai corrigé que le code correspondant à la méthode 2.
Feuille SireneV2,
remplacer la valeur en B2 par
Code:
https://data.opendatasoft.com/api/explore/v2.1/catalog/datasets/economicref-france-sirene-v3@public/records?start=0&rows=40&timezone=UTC&where=

Module APIV2
Voici le code de la macro Lire_sirene1 concernée

VB:
Sub Lire_sirene1()
Dim Url As String, Nb As Integer, idx As Integer
Dim Brut As Object
Dim Results As Object, Result As Object
Dim T As Variant
    ' Valeur obsolète
    '         https://data.opendatasoft.com/api/v2/catalog/datasets/sirene_v3%40public/records?start=0&rows=40&timezone=UTC&where=
    ' Valeur correcte
    '         https://data.opendatasoft.com/api/explore/v2.1/catalog/datasets/economicref-france-sirene-v3@public/records?start=0&rows=40&timezone=UTC&where=
    BASE_SIRENE = Sheets("SireneV2").Range("B3").Value
    On Error Resume Next
    With Sheets("SireneV2")
        .Range("B5").ClearContents
        .Range("A7:L47").ClearContents
        Url = BASE_SIRENE & .Range("B4").Value & .Range("F4").Value
        'envoi demande
        Set Brut = Obj_Rcdst1(Url)
        'lecture nombre enregistrements
        Nb = VBA.CallByName(Brut, "total_count", VbGet)
        .Range("B5").Value = Nb
        ReDim T(1 To Nb, 1 To 10)
        'afectation objet results
        Set Results = VBA.CallByName(Brut, "results", VbGet)
        idx = 1
        For Each Result In Results
            T(idx, 1) = VBA.CallByName(Result, "enseigne1etablissement", VbGet)
            T(idx, 2) = VBA.CallByName(Result, "adresseetablissement", VbGet)
            T(idx, 3) = VBA.CallByName(Result, "denominationunitelegale", VbGet)
            T(idx, 4) = VBA.CallByName(Result, "regionetablissement", VbGet)
            T(idx, 5) = VBA.CallByName(Result, "siren", VbGet)
            ' T(idx, 6) = VBA.CallByName(Result, ... etc ...
            idx = idx + 1
        Next Result
        .Range("B7").Resize(UBound(T, 1), UBound(T, 2)) = T
 
    End With
    Set Result = Nothing
    Set Results = Nothing
    Set Brut = Nothing
End Sub
 
Dernière édition:

ERIC S

XLDnaute Barbatruc
Bonjour Crocrocro et le forum
je sais que le sujet intéresse toujours, j'ai reçu quelques demandes depuis la création et fin d'année dernière j'en étais resté sur le fait que la base SIRENE évoluait, qu'elle était passée sous la gestion INSEE.
J'avais alors regardé mais côté INSEE il faut être inscrit, demander un jeton pour pouvoir accéder ... donc, n'ayant pas de besoin perso j'ai tout lâché.
Je suis surpris que l'on puisse accéder à une base à jour via opendatasoft mais si c'est le cas tant mieux. peux-tu le confirmer?
Cordialement
 

crocrocro

XLDnaute Impliqué
Bonjour Eric,
apparemment, la base est à jour.
A partir de ce lien https://data.opendatasoft.com/explo...queunitelegale&sort=datecreationetablissement
tu peux voir que la dernière maj date du 31 mai 2024 et que la source d'informations est bien l'INSEE.

Je me suis pris au jeu et, j'ai adapté ton fichier pour en faire une version plus générique pour interroger n'importe quelle base accessible du catalogue OpenDataSoft (que je ne connaissais pas, merci pour la découverte et le moyen d'y accéder par Excel) : simplement 4 constantes à déclarer dans le module VBA.


1717794189803.png
 

Discussions similaires

Statistiques des forums

Discussions
315 095
Messages
2 116 159
Membres
112 673
dernier inscrit
ìntellisoft