Bonjour,
Je reviens sur ce sujet !
J'ai entrepris de reprendre certains fondamentaux, en commençant par le décryptage d'un json. Pas facile même si le web donne beaucoup d'exemples (incomplets ou inachevés).
Dans ton cas que je rappelle ici , au prix d'une petite semaine d'efforts ... :
For Each Elem In Json.rows
For Each Elem1 In Elem.elements
ok = Not (Elem1.status = "ZERO_RESULTS")
AversB.dist = Elem1.distance.Value / 1000
AversB.duree = Elem1.duration.Value / 24 / 60 / 60
Next Elem1
Next Elem
ScriptControl.AddCode "Object.prototype.item=function( i ) { return this[i] } ; "
AversB.ptA = Json.origin_addresses.item(0)
AversB.ptB = Json.destination_addresses.item(0)
D'abord il eut été judicieux de mettre le script de prototypage AVANT la recherche de la distance et de la durée.
Ensuite la structuration des données est un peu plus complexe que celle que tu explores.
La solution est la suivante :
ScriptControl.AddCode "Object.prototype.item=function( i ) { return this[i] } ; "
AversB.ptA = Json.origin_addresses.item(0)
AversB.ptB = Json.destination_addresses.item(0)
AversB.dist = Json.depuis.item(0).jusque.item(0).distance.valeur
AversB.duree = Json.depuis.item(0).jusque.item(0).duree.valeur
sachant que, difficulté supplémentaire !, le prototypage est sensible à la casse et VBA corrige rows, elements, status, duration, text et value en y mettant une majuscule, bigre ...
j'ai donc corrigé aussi S = .responsetext en modifiant les keys
S = Replace(S, "rows", "depuis")
S = Replace(S, "elements", "jusque")
S = Replace(S, "duration", "duree")
S = Replace(S, "status", "ok")
S = Replace(S, "value", "valeur")
S = Replace(S, "text", "texte")
Nota : j'avais conservé cet exemple pour le re-travailler.
Et puis je suis retombé ici où la réponse (par traitement de texte) avait bien été donnée ... par moi-même oups !
En tous cas voici la solution "pro" même si je continue souvent d'utiliser des solutions texte dans le web, les json et les xml.