Former un tableau venant d'une requête

Bonsoir à tous,

J'aurai besoin de vos conseils sur la manière de faire

Je fais une requete par winhttprequest,

Dim sh1 As Worksheet
Dim req As Object
Dim retry As Integer
Dim url As String, request As String
Dim rep As String

Set sh1 = Worksheets("Map2")

Set req = CreateObject("WinHTTP.WinHTTPRequest.5.1")

Je lui envoie ma requête et je lui demande de me coller ça dans un sheet :

req.Open "POST", url, False
req.SetAutoLogonPolicy 0
req.setRequestHeader "Accept", "text/plain, */*; q=0.01"
req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
req.setRequestHeader "Content-Length", Len(request)
req.send request

rep = req.responseText
sh1.Range("A1") = rep

Il me renvoie une reponsetext. Je découvre un peu cette méthode de requête et voici la réponse qu'il me donne sur ma feuille

{"success":true,"lastRefreshTime":"Mon Jan 13 14:49:17 UTC 2020","Report":"{\"metrics\":{\"4-10-A\":{\"Utilization\":64.69211489420572,\"Count\":331,\"usableSpace\":56.30796430505448,\"linearCapacity\":0.0,\"usableSpaceInPercentage\":35.282649805737506,\"Limit\":99,\"totalCount\":9042,\"Wasted\":0.04027328963806235,\"Volume\":3.8383150594666144,\"netVolume\":159.59108688003906,\"totalUnits\":123966},\"4-10-B\":{\"Utilization\":57.4410094135648,\"Count\":519,\"usableSpace\":60.91268730635544,\"linearCapacity\":0.0,\"usableSpaceInPercentage\":42.37914423226387,\"Limit\":99,\"totalCount\":8160,\"Wasted\":0.25849801673167955,\"Volume\":5.925395128619116,\"netVolume\":143.73269779237708,\"totalUnits\":100919},\"1-11-C\":{\"Utilization\":81.12720115759437,\"Count\":77,\"usableSpace\":16.12477284542217,\"linearCapacity\":0.0,\"usableSpaceInPercentage\":18.823492955472652,\"Limit\":99,\"totalCount\":4596,\"Wasted\":0.0422369125973088,\"Volume\":1.043627095141397,\"netVolume\":85.66302164834998,\"totalUnits\":93898},\"1-11-D\":{\"Utilization\":81.71146336847107,\"Count\":81,\"usableSpace\":18.581713594158483,\"linearCapacity\":0.0,\"usableSpaceInPercentage\":18.20291603733719,\"Limit\":99,\"totalCount\":5436,\"Wasted\":0.08740233464623053,\"Volume\":0.9189658148593256,\"netVolume\":102.08097184013988,\"totalUnits\":106564},\"1-11-A\":{\"Utilization\":72.971962105162,\"Count\":1027,\"usableSpace\":21.646145404884265,\"linearCapacity\":0.0,\"usableSpaceInPercentage\":26.98883811258868,\"Limit\":99,\"totalCount\":6586,\"Wasted\":0.03143981904181051,\"Volume\":5.474554903961727,\"netVolume\":80.2040655273249,\"totalUnits\":83371},

Je souhaiterai former un tableau de tout ces résultats par colonne du genre

25

Pouvez vous me donner des conseils sur comment vous feriez ? car c'est une réponse texte donc je pas dire à excel de chercher selon des lignes ou des colonnes une chaine de caractère, mais dans un document texte

Je suis entrain de tester la fonction InStr( x,x) et voir ce que sa donne

Merci pour votre aide,

Bonjour,

La réponse obtenue est au format json. Pas toujours facile de décoder mais il y des méthodes. Par contre, pour pouvoir lire correctement les données, il faut que le json soit absolument entier. Peux-tu produire le reste de la réponse ?

Bonjour,

Peux-tu joindre un fichier type ?

Sinon, regarde du côté de Récupérer et transformer (Power Query).

Cdlt.

Bonjour,

Merci pour votre aide, j'ai essayé au mieux de rendre le doc anonyme, par contre le site est en intranet vous ne pourrai mettre a jour le fichier en cliquant sur le bouton sa renvoie des balises html disant accès refuser

J'avais justement penser à PowerQuery car passer par Vba au bout d'un moment sa devient lourd et sa prends du temps, mais au m'a dis que c'était pas possible, j'avais penser acheter un livre pour m'initier a powerquery

Pour faire simple voila ce que fais le site

1 - On peut choisir dans la liste deroulante, mais pour nous il reste en default

2 - On click sur le allchekboxes

3 - On click sur les choix des types et des usages que l'on veut

4 - On click sur submit

01

5 - Une fois cliquer sa nous donnes une pages sur le même onglet avec un tableau, on peut cliquer sur exporter le doc en csv ou format excel ou copier pour le coller sur excel

02

Je pensais passer par une methode get pour les click mais il y a plus de 30 chekboxes dans les choix des types et d'usage donc sa sert a rien.

Le site offre pas mal de possibilité d'exportation, mais il faut l'automatiser via excel, j'avais déjà programmer une extension mozilla pour ça, mais vba je ne maitrise pas encore a 100% ni powerquery, mais power query me séduit beaucoup si c'est faisable avec ça se serait super

Je regarde de ce coter ce que sa peux donner et visionner quelques video sur powerquery

J'ai commencé à regarder la réponse ... mais j'ai un doute sur sa complétude car le décrypteur me dit qu'il manque un }

capture d ecran 274

je vais tenter d'en prendre un extrait sans rompre la cohérence !

je pense sérieusement qu'il y a une erreur ici avec un guillemet en trop (surligné) ...

{"success":true,"lastRefreshTime":"Mon Jan 13 14:49:17 UTC 2020","report":"{"metrics":...

{"success":true,"lastRefreshTime":"Mon Jan 13 14:49:17 UTC 2020","report":"{"metrics":...

mais qui a bien son pendant à la fin ... mystère !

Quand j'enlève les \ ainsi que les " qui encadrent le contenu de report (ce qui est dans l'ensemble cohérent)

ET que je réduit les valeurs aux premières et dernières, j'arrive à décoder ... ce qui me permettra d'avancer ! mais le code butte toujours sur la cohérence globale ... il faut que je cherche de où cela vient !

capture d ecran 275

ce qui va me prendre un certain temps (et me prendre la tête )

Je suis au travail dans une heure, je vais refaire la requête avec des trucs que j'ai bidouiller mais ton résultat ressemble et bien meilleur

En gros l'astuce c'est de décrypter la réponsetext par un autre code mis dans un autre module c'est ça ?

Je vous enverrai une image de ce que sa donne quand on copie colle le tableau

Ah bah voila maintenant que la reponsetext veut plus se coller dans le sheets map2 sa reste vide

De mon côté, j'ai mis en pause, mais je reprendrai ce soir.

J'ai mieux compris le contenu ... il s'agit d'un json gigogne ! jamais vu cela, un json qui contient un autre json, d'où les " et les \ qui me perturbaient !! Très intelligent, je n'avais jamais imaginé faire un truc pareil, maintenant il faut être encore plus intelligent pour décoder.

Une des difficultés est de supprimer par VBA les \ !!

Autre difficulté : la responsetext est longue et le fait de la copier dans excel a rompu la ligne ... c'est pour cela que le décodage est perturbé car le json semble correct après l'avoir manipulé pendant 1/2 heure. Il faut donc que je renvoie le contenu sur un serveur pour me mettre dans les conditions adhoc.

J'ai mis en pause aussi sa m'a rendu dingue

il veut plus fonctionner j'ai modifier quelques trucs pour ressayer

capture

Je crois le serveur en a eu marre

sans titre

J'avoue c'est intelligent, j'ai encore pas mal d'amélioraton a faire sur d'autres projets qui vont plairont

Voici une réponse, pas aussi nette que je voulais faire !!

Malheureusement excel n'apprécie pas trop ce json gigogne notamment les \" et les data avec des tirets !

Donc, à condition de recopier dans le cadre le json

  • en enlevant tous les \
  • en supprimant le dernier guillemet de "report":" qui se trouve au début
  • et le tout dernier guillemet

J'ai ceci ...

Je te propose plutôt que de coller en A1 de coller responsetext dans le presse-papier.

signé Jean Peuplus !

7shenzar-json.zip (8.82 Ko)
11shenzar-json.xlsm (41.47 Ko)

Bonjour,

Ton travail est super, mon niveau est très loin

Ce qui est marrant que le site propose de copier coller sur excel, sa marche bien en copiant collant

sh1 sh6

sur excel sa donne ça :

sh4

Ensuite lui dire cells(i,i) truc va chercher ça donne moi ça

Le probleme vient du fait du choix qui est fais en amont et qui change le tableau de valeur ce qui fais que je suis obliger de faire la manip 40 fois dans la journée

sheet2

l'idée etait de dire va chercher les infos en fonction de ce que je veux et colle le sur le site et un autre code recupérer les infos

sh3

J'ai fais quelques recherches et j'ai trouvé ce genre de chose qu'en pense tu ?

la conversion de Json en vba

en passant par as dictionnary ou collection en declarant une variable dim dict as dico ou collection par exemple faut que je test

Si power query est capable de faire ça en dix fois plus simple j'aimerai connaitre la technique

Ce qui est marrant que le site propose de copier coller sur excel, sa marche bien en copiant collant

Et donc ?? est-ce que cela résout le sujet ? sinon quel est le problème résiduel ?

J'ai fais quelques recherches et j'ai trouvé ce genre de chose qu'en pense tu ?

Intéressant, mais la démarche est la même que la mienne écrit en plus professionnel encore ! Je remarque aussi que la suppression des \ est une vraie galère et qu'il faut passer par une lecture caractère par caractère pour les supprimer.

Je vis poursuivre un peu de mon côté pour automatiser complètement le traitement de la réponse du serveur.

Je suis parti d'un json que j'ai mis sur serveur et j'arrive au résultat directement ...

10shenzar-json.xlsm (94.10 Ko)

Le probleme vient du fait que le resultat du tableau change en fontion du choix qui est fait exemple

Chekboxes all :

chekboxes 1 : banane - la tableau donne le stock de banane

chekboxes 2 : pommes - le tableau donne le stock de pomme

chekboxes 3 : livres - le tableau donne le stock de livres

chekboxes 4 : petits articles - le tableau donne le stock de petits articles

chekboxes 5 : palettes - le tableau donne le stock de palettes

chekboxes 6 : epicerie - le tableau donne le stock de epiceries

chekboxes 7 : poire - le tableau donne le stock de poire

chekboxes 8 : raisin - le tableau donne le stock de raisin

ainsi de suite , 10, 11, 12, 13.....

tous les request = resquest & , true (chekboxes) viennent de la

au cour de la journée il faut cliquer en fonction de ce qu'on veut ce qui fait que tu fais trop de manipulation, la perte de temps et énorme et de copier coller sur excel, le but étant de chercher les infos a notre place depuis excel

Bouton 1 = chekboxes 4 + 6 + 8 = reponses tableau coller sur map2

Bouton 2 = chelboxes 7 + 8 + 1 = reponses tableau coller sur map2

bouton 3 = chekbowes 5 = reponses tableau coller sur map2

comme le tableau donne la possibilite de copier coller, je me disais si passer par un getelementbyclassname serait bon mais il y a pas moins de 50 chekboxes et liste deroulante, donc pas d'intéret a passer par la

Je me suis diriger vers la requets https qui marche bien juste ce foutu json qui m'enmer..... avec les caractère spéciaux

J'ai pensé aussi a powerquery mais je le connais pas faut queje teste aussi, mais je sais pas si power query permet de naviguer sur le site avec son affichage web interne pour cliquer les chekboxes, car l'affichage reste figer

mon niveau et pas parfait encore il va me falloir 1 ou 2 ans pour avoir un bon niveau sur excel, je vient du monde de la programmation d'automatisme, jamais utiliser excel, j'aurai du

Le probleme vient du fait que le resultat du tableau change en fontion du choix qui est fait exemple

Normalement, ma page "data" s'adapte à tous les cas dès lors que le json a été épuré des caractères tels que \ et " pour ne pas avoir de json imbriqués ... mais même cela peut se résoudre par un split.

Néanmoins, json c'est plus du domaine du javascript et il faudrait presque créer une "simple" page html qui prendrait en compte le json et le transformerait en tableau.

Il y a aussi d'autres voies possibles, notamment récupérer directement le tableau que tu indiquais ici avec une simple interrogation.

sh6

Exemple d'un json editeur ... mais la sortie ne ma plait pas ! j'aurais souhaité un tableau pour ensuite le récupérer en excel. Je vais finir par le faire ! Du reste la sortie est quasiment la même que celle que je propose en onglet data.

La sortie du json gigogne avec l'outil ... il n'y a pas grand chose !

capture d ecran 277

Après transformation du json ... c'est beaucoup mieux !

capture d ecran 278
Rechercher des sujets similaires à "former tableau venant requete"