Résolu 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
 

Fichiers joints

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
 

Staple1600

XLDnaute Barbatruc
Re

Puisque tatiak est dans parages, il te le dira.
Je sais qu'il y a fil (voir plusieurs sur XLD) où tatiak danse avec la petite SIREN ;)
 

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
 

tatiak

XLDnaute Barbatruc
? Je suis invisible ?
Alors je remets le code proposé ici
VB:
Sub demo_pour__Eric_S()
Dim Url As String
Dim Brut As Object, Rcd_S As Object, Rcd As Object, elem As Object, Fld As Object

    Url = "https://data.opendatasoft.com/api/v2/catalog/datasets/sirene_v3%40public/records?start=0&rows=10&timezone=UTC&where=siret=41359863200011&select=siren,%20siret"
    Set Brut = Obj_Rcdst(Url)
    Set Rcd_S = VBA.CallByName(Brut, "records", VbGet)
    For Each elem In Rcd_S
        Set Rcd = VBA.CallByName(elem, "record", VbGet)
        Set Fld = VBA.CallByName(Rcd, "fields", VbGet)
        MsgBox "Siret=" & Fld.siret & vbCrLf & "Siren=" & Fld.siren
    Next elem
      
    Set elem = Nothing
    Set Fld = Nothing
    Set Rcd = Nothing
    Set Rcd_S = Nothing
    Set Brut = Nothing
End Sub


Function Obj_Rcdst(Url As String) As Object
Dim ScrC As Object

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", Url, False
        .send
        Set ScrC = CreateObject("MSScriptControl.ScriptControl")
        ScrC.Language = "JScript"
        Set Obj_Rcdst = ScrC.Eval("(" & .responseText & ")")
    End With
End Function
Salut l’agrafe!;)
 

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.
 

Fichiers joints

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas