IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Disséquer un fichier json avec un scriptcontrolobject


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut Disséquer un fichier json avec un scriptcontrolobject
    bonjour a tous

    la question ayant été posé aujourd'hui et travaillant en string habituellement j'ai decidé de me mettre un peu a exploiter le scriptcontrol
    voila je voudrais diséquer un fichier JSON
    (alors oui il y a des sources partout sur le net mais il manque un e peu de pédagogie dans ces exemples bref je patoge


    voila ce que j'ai réussi a comprendre jusque la :ce qu'il me manque c'est l'exploitation de l'arrays des keys

    si quelqu'un a des exemples avec explication je suis preneur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub decodejson()
        Dim sc As Object, obj As Variant
     'ouverture du fichier
        Dim laChaine As String, x, fichier As String
        fichier = "C:\Users\polux\Downloads\objective_names.json"
        x = FreeFile
        Open fichier For Input As #x
        laChaine = Input(LOF(x), #x)
        Close #x
     
    'partie scriptcontrol en javascript
        Set sc = CreateObject("ScriptControl")
        sc.Language = "JScript"
         sc.AddCode "function getProperty(jsonObj, propertyName) { return jsonObj[propertyName]; } "
        sc.AddCode "function getKeys(jsonObj) { var keys = new Array(); for (var i in jsonObj) { keys.push(i); } return keys; } "
     
    'exploitation
    Set tabl = sc.Eval("(" + laChaine + ")")'on exécute la commande native javascript "eval" sans passer par une fonction 
     
       Set Keys = sc.Run("getKeys", tabl)
      ' je voudrais lister mes élément ici avec leur id et leur Name dans une boucle
    End Sub
    un exemple de json raccourci en longueur mais valide
    [{"id":"1099-99","name":"Laboratoire de Hamm"},{"id":"1143-99","name":"Laboratoire de Zakk"},{"id":"1102-99","name":"Laboratoire de Lesh"},{"id":"1099-100","name":"Ferme Bauer"},{"id":"1143-100","name":"Ferme Gee"},{"id":"1102-100","name":"Ferme Barrett"},{"id":"1099-101","name":"Campement de McLain"},{"id":"1143-101","name":"Campement d'Habib"},{"id":"1102-101","name":"Campement de Patrick"},{"id":"1099-102","name":"Académie de O'del"},{"id":"1143-102","name":"Académie de Kay'li"},{"id":"1102-102","name":"Académie de Y'lan"},{"id":"1099-104","name":"Nécropole éternelle"},{"id":"1143-104","name":"Nécropole impérissable"},{"id":"1102-104","name":"Nécropole immortelle"},{"id":"1099-105","name":"Dépôt Vilebrequin"},{"id":"1143-105","name":"Dépôt Engrenage"},{"id":"1102-105","name":"Dépôt Bougie"},{"id":"1099-106","name":"Crypte embrasée"},{"id":"1143-106","name":"Crypte torride"},{"id":"1102-106","name":"Crypte cuisante"},{"id":"1099-107","name":"- Frontière"},{"id":"1143-107","name":"- Frontière"},{"id":"1102-107","name":"- Frontière"},{"id":"1099-108","name":"- Frontière"},{"id":"1143-108","name":"- Frontière"},{"id":"1102-108","name":"- Frontière"},{"id":"1099-109","name":"Refuge de Roy"},{"id":"1143-109","name":"Refuge d'Olivier"},{"id":"1102-109","name":"Refuge de Norfolk"},{"id":"1099-110","name":"Avant-poste dévasté"},{"id":"1143-110","name":"Avant-poste délabré"},{"id":"1102-110","name":"Avant-poste ravagé"},{"id":"1099-113","name":"Rempart stoïque"},{"id":"1143-113","name":"Rempart durci"},{"id":"1102-113","name":"Rempart impassible"},{"id":"1099-114","name":"Palais du balbuzard"},{"id":"1143-114","name":"Palais de la pie-grièche"},{"id":"1102-114","name":"Palais du circaète"},{"id":"1099-115","name":"Antre de Boettiger"},{"id":"1143-115","name":"Antre de Berdrow"},{"id":"1102-115","name":"Antre de Hughe"},{"id":"1099-116","name":"Puits du Souffle-poussière"},{"id":"1143-116","name":"Puits du Dernier-soupir"},{"id":"1102-116","name":"Puits du Rêve-brisé"},{"id":"1099-117","name":"- Citadelle"},{"id":"1143-117","name":"- Citadelle"},{"id":"1102-117","name":"- Citadelle"},{"id":"94-62","name":"Temple des prières perdues"}]

    merci pour les retours
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Bonjour Patrick

    Je sais pas si ca pourras t'aider mais ils en parlent pas mal sur Stackoverflow :
    http://stackoverflow.com/questions/6...n-in-excel-vba
    http://stackoverflow.com/questions/1...y-in-excel-vba
    http://stackoverflow.com/questions/5...on-object-loop

    Et sinon il y a ashutosh qui en parle sur son blog (et que je trouve plutôt pertinent) :
    http://ashuvba.blogspot.fr/2014/09/j...rough-net.html

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour Al_22
    oui je l'ai ai tous vu ces liens mais aucun n'explique celui de truc machinsoch est un exemple mais avec des fonction concernant un treeview si bien que l'on détermine plus quoi sert a quoi

    pertinent je sais pas mais en tou cas je ne veux pas une usine a gaz sachant que "eval" que l'on pourrait comparer a "évaluate" en vba est sensé découper le code du json

    parti de la il me faut juste l'exploitation du tableau

    les fonction getproperty. sont intéressantes mais si on ne peut pas manipuler le tableau par vba c'est pas la peine
    en l'occurrence son code en entier adapter au json que j'ai donné en exemple plante sur plusieurs ligne si bien que j'ai abandonner l'idée de me servir de son code
    la fonction getkeys est sensé me retourner le tableau
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    Bonjour Al_22
    oui je l'ai ai tous vu ces liens mais aucun n'explique celui de truc machinsoch est un exemple mais avec des fonction concernant un treeview si bien que l'on détermine plus quoi sert a quoi

    pertinent je sais pas mais en tou cas je ne veux pas une usine a gaz sachant que "eval" que l'on pourrait comparer a "évaluate" en vba est sensé découper le code du json
    Il m'avait semblé comprendre en lisant en diagonale que l'exemple de soch permet de mettre chacune des données du JSON dans un treeview. Donc en remplaçant les bouts de treeview par du vieux VBA tu pourrais retomber sur tes pattes non ?

    Enfin je m'avance peut être un peu vu que je peux pas vérifier ceci (pas de fichier JSON sous la main)

  5. #5
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Salut,
    un JSON c'est une base de donnée dans un string.

    Moi j'utilise ce parser là adapté au vba

    https://github.com/samgerene/VBJSOND...ource/JSON.bas
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  6. #6
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Tu peux utiliser cet outil en ligne aussi
    https://jsonformatter.curiousconcept.com/

    je vais t'envoyer un descriptif bien fait dès que je l'aurai retrouvé
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    salut oliv ca faisait longtemps

    oui des solution il y en a foison je veux juste apprendre a exploiter ce script control pour cet exercice
    après ton exemple est peut être parfait mais il fait un peu usine a gaz d'ailleurs je me suis perdu entre les tuyaux de butane et de propane
    après des converters en ligne il y en a pas mal aussi

    perso je voudrais réussir a métriser le script control en vba pour les json

    sinon c'st pas marrant de prendre quelque chose de tout fait

    c'est pas la destination mais le chemin qui est intéressant
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    @AL_22
    Il m'avait semblé comprendre en lisant en diagonale que l'exemple de soch permet de mettre chacune des données du JSON dans un treeview. Donc en remplaçant les bouts de treeview par du vieux VBA tu pourrais retomber sur tes pattes non ?

    Enfin je m'avance peut être un peu vu que je peux pas vérifier ceci (pas de fichier JSON sous la main)
    d'après ce que j ai lu c'est le contraire il prend s d'un tree view pour changer le json et vise et versa ce qui me complique beaucoup la compréhension de son code

    et moi quand il n'y a pas d'explication je zappe

    perso quand je partage j'explique du mieux que je peux le pourquoi du comment sinon on tombe dans du tout fait maison et ca m'intéresse pas

    je veux comprendre avant tout
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Salut !

    Patrick, j'ai deux voies :

    • une automatique extrayant l'intégralité des données du fichier pour peu qu'il respecte la norme;

    • une voie où dans le code sont indiqués les titres des colonnes ou sinon est directement codée chaque propriété …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Citation Envoyé par Marc-L Voir le message
    Salut !

    Patrick, j'ai deux voies :

    • une automatique extrayant l'intégralité des données du fichier pour peu qu'il respecte la norme;

    • une voie où dans le code sont indiqués les titres des colonnes ou sinon est directement codée chaque propriété …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    re oui tu peux developper??

    après la norme(voir format) ben c'est balo il y en a 6 dont 4 sont exploités dans le lien du converter de oliv dans son post plus haut

    mais tous travaille avec "[]" pour le parent et "{.....}" les éléments

    donc eval devrait me donner le tableau et c'est pas le cas pourquoi pourquoi

    merci des retours les gards
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Joins le fichier complet et dis-moi si tu veux tout extraire automatiquement
    ou garder le contrôle en extrayant une partie des données selon les en-têtes
    ou en codant directement les propriétés comme on l'a déjà réalisé
    lors d'une discussion sur la musique de canassons

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Citation Envoyé par Marc-L Voir le message

    Joins le fichier complet et dis-moi si tu veux tout extraire automatiquement
    ou garder le contrôle en extrayant une partie des données selon les en-têtes
    ou en codant directement les propriétés comme on l'a déjà réalisé
    lors d'une discussion sur la musique de canassons
    ah!!! je savais bien que l'on avais fait un truc du genre avec les bourricots c'était toi d'ailleurs qui avais fait cette proposition
    je le trouve plus je ne sais même plus sur quelle discussion ca avait été évoqué

    ou mon but c'est soit d'obtenir un tableau
    soit effectivement avoir aussi les propriétés via une boucle sur les items
    item(1).id
    item(1).name
    etc....
    en gros la base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Function lachaine(chemin) As String
        x = FreeFile
        Open chemin For Input As #x
        lachaine = Input(LOF(x), #x)
        Close #x
    End Function
     
     
    Sub test5()
        Dim fichier As String, sc As Object
        fichier = "C:\Users\polux\Downloads\objective_names.json"
        Dim o
        json = lachaine(fichier)
        Set sc = CreateObject("scriptcontrol")
        sc.Language = "JScript"
        'javascript dans le scriptcontrol
        sc.AddCode "function getProperty(jsonObj, propertyName) { return jsonObj[propertyName]; } "
        sc.AddCode "function getKeys(tabl) { var keys = new Array(); for (var i in tabl) { keys.push(i); } return keys; } "
        'VBA
        Set tabl = sc.Eval("(" + json + ")")    'ceci est sensé couper
        Set Keys = sc.Run("getKeys", tabl)
    Debug.Print Keys(1) 'methode non géré par cet object j'ai tout essayé 
    End Sub
    le json pour les essais c'est

    [{"id":"1099-99","name":"Laboratoire de Hamm"},{"id":"1143-99","name":"Laboratoire de Zakk"},{"id":"1102-99","name":"Laboratoire de Lesh"},{"id":"1099-100","name":"Ferme Bauer"},{"id":"1143-100","name":"Ferme Gee"},{"id":"1102-100","name":"Ferme Barrett"},{"id":"1099-101","name":"Campement de McLain"},{"id":"1143-101","name":"Campement d'Habib"},{"id":"1102-101","name":"Campement de Patrick"},{"id":"1099-102","name":"Académie de O'del"},{"id":"1143-102","name":"Académie de Kay'li"},{"id":"1102-102","name":"Académie de Y'lan"},{"id":"1099-104","name":"Nécropole éternelle"},{"id":"1143-104","name":"Nécropole impérissable"},{"id":"1102-104","name":"Nécropole immortelle"},{"id":"1099-105","name":"Dépôt Vilebrequin"},{"id":"1143-105","name":"Dépôt Engrenage"},{"id":"1102-105","name":"Dépôt Bougie"},{"id":"1099-106","name":"Crypte embrasée"},{"id":"1143-106","name":"Crypte torride"},{"id":"1102-106","name":"Crypte cuisante"},{"id":"1099-107","name":"- Frontière"},{"id":"1143-107","name":"- Frontière"},{"id":"1102-107","name":"- Frontière"},{"id":"1099-108","name":"- Frontière"},{"id":"1143-108","name":"- Frontière"},{"id":"1102-108","name":"- Frontière"},{"id":"1099-109","name":"Refuge de Roy"},{"id":"1143-109","name":"Refuge d'Olivier"},{"id":"1102-109","name":"Refuge de Norfolk"},{"id":"1099-110","name":"Avant-poste dévasté"},{"id":"1143-110","name":"Avant-poste délabré"},{"id":"1102-110","name":"Avant-poste ravagé"},{"id":"1099-113","name":"Rempart stoïque"},{"id":"1143-113","name":"Rempart durci"},{"id":"1102-113","name":"Rempart impassible"},{"id":"1099-114","name":"Palais du balbuzard"},{"id":"1143-114","name":"Palais de la pie-grièche"},{"id":"1102-114","name":"Palais du circaète"},{"id":"1099-115","name":"Antre de Boettiger"},{"id":"1143-115","name":"Antre de Berdrow"},{"id":"1102-115","name":"Antre de Hughe"},{"id":"1099-116","name":"Puits du Souffle-poussière"},{"id":"1143-116","name":"Puits du Dernier-soupir"},{"id":"1102-116","name":"Puits du Rêve-brisé"},{"id":"1099-117","name":"- Citadelle"},{"id":"1143-117","name":"- Citadelle"},{"id":"1102-117","name":"- Citadelle"},{"id":"94-62","name":"Temple des prières perdues"},{"id":"96-62","name":"Temple des prières perdues"},{"id":"95-62","name":"Temple des prières perdues"},{"id":"94-35","name":"Vert-bruyère"},{"id":"96-35","name":"Bruyerouge"},{"id":"95-35","name":"Bruyazur"},{"id":"94-103","name":"- Frontière"},{"id":"96-103","name":"- Frontière"},{"id":"95-103","name":"- Frontière"},{"id":"94-32","name":"Collines d'Etheron"},{"id":"96-32","name":"Collines d'Askalion"},{"id":"95-32","name":"Collines Shadaran"},{"id":"94-33","name":"Baie des rêves"},{"id":"96-33","name":"Baie de l'Ascension"},{"id":"95-33","name":"Baie du Noir déclin"},{"id":"94-65","name":"Belvédère du Verger"},{"id":"96-65","name":"Belvédère du Verger"},{"id":"95-65","name":"Belvédère du Verger"},{"id":"94-38","name":"Longuevue"},{"id":"96-38","name":"Boisrefuge"},{"id":"95-38","name":"Colline ensoleillée"},{"id":"94-39","name":"L'Epée divine"},{"id":"96-39","name":"Le Heaume spirituel"},{"id":"95-39","name":"Bras du Titan"},{"id":"94-64","name":"Domaine de Bauer"},{"id":"96-64","name":"Domaine de Bauer"},{"id":"95-64","name":"Domaine de Bauer"},{"id":"94-37","name":"- Garnison"},{"id":"96-37","name":"- Garnison"},{"id":"95-37","name":"- Garnison"},{"id":"94-53","name":"Refuge de Valvert"},{"id":"96-53","name":"Refuge de Valrouge"},{"id":"95-53","name":"Refuge de Bleuval"},{"id":"94-111","name":"- Citadelle"},{"id":"96-111","name":"- Citadelle"},{"id":"95-111","name":"- Citadelle"},{"id":"94-112","name":"- Frontière"},{"id":"96-112","name":"- Frontière"},{"id":"95-112","name":"- Frontière"},{"id":"94-52","name":"Espoir d'Arah"},{"id":"96-52","name":"Savoir divin"},{"id":"95-52","name":"Saut de la Foi"},{"id":"94-51","name":"Heaume astral"},{"id":"96-51","name":"Bosquet étoilé"},{"id":"95-51","name":"Havre gris"},{"id":"94-66","name":"Côte du couteau"},{"id":"96-66","name":"Côte du couteau"},{"id":"95-66","name":"Côte du couteau"},{"id":"94-34","name":"Pavillon du Vainqueur"},{"id":"96-34","name":"Fief du Champion"},{"id":"95-34","name":"Pavillon du Héros"},{"id":"94-36","name":"Lac bleu"},{"id":"96-36","name":"Lac vert"},{"id":"95-36","name":"Lac rouge"},{"id":"94-50","name":"Basses terres d'Eau-Azur"},{"id":"96-50","name":"Basses terres d'Eau-Verdoyante"},{"id":"95-50","name":"Basses terres de Rubicon"},{"id":"94-63","name":"Vallon de bataille"},{"id":"96-63","name":"Vallon de bataille"},{"id":"95-63","name":"Vallon de bataille"},{"id":"94-40","name":"Flanc de falaise"},{"id":"96-40","name":"Repaire de l'aube"},{"id":"95-40","name":"Sommet de Hautcrag"},{"id":"968-98","name":"Tunnel de guivre"},{"id":"968-96","name":"Aéroport"},{"id":"968-82","name":"Réacteur de Tonnecrevasse"},{"id":"968-93","name":"Forge"},{"id":"968-80","name":"Réacteur du Temple surdimensionné"},{"id":"968-94","name":"Sanctuaire"},{"id":"968-90","name":"Autel"},{"id":"968-97","name":"Atelier"},{"id":"968-81","name":"Réacteur de la Forteresse aride"},{"id":"968-83","name":"Réacteur du Pic de Pierregard"},{"id":"968-95","name":"Clocher"},{"id":"968-91","name":"Observatoire"},{"id":"968-78","name":"Temple surdimensionné"},{"id":"968-88","name":"Forteresse aride"},{"id":"968-89","name":"Perchoir de Tytone"},{"id":"968-79","name":"Tonnecrevasse"},{"id":"968-85","name":"Réacteur du Perchoir de Tytone"},{"id":"968-77","name":"Aiguille infernale"},{"id":"968-87","name":"Pic de Pierregard"},{"id":"968-84","name":"Réacteur de l'Aiguille infernale"},{"id":"968-92","name":"Statue"},{"id":"38-11","name":"Corniche d'Aldon"},{"id":"38-1","name":"- Belvédère"},{"id":"38-15","name":"Ravin de Langor"},{"id":"38-3","name":"- Basses terres"},{"id":"38-17","name":"Faille de Mendon"},{"id":"38-7","name":"Passage Danelon"},{"id":"38-9","name":"Château Brumepierre"},{"id":"38-5","name":"Montée de Pangloss"},{"id":"38-21","name":"Ravin de Durios"},{"id":"38-20","name":"Flanc de Veloka"},{"id":"38-14","name":"Petit ravin de Klovan"},{"id":"38-13","name":"Bourbier de Jerrifer"},{"id":"38-6","name":"Forêt rasée de Speldan"},{"id":"38-2","name":"- Vallée"},{"id":"38-12","name":"Piste du ruisseau sauvage"},{"id":"38-16","name":"Lac Quentin"},{"id":"38-22","name":"Falaise de Bravost"},{"id":"38-19","name":"Percée de Gardogre"},{"id":"38-4","name":"Clairière de Golanta"},{"id":"38-8","name":"Bois d'Ombreclair"},{"id":"38-10","name":"Carrière du voleur"},{"id":"38-18","name":"Col d'Anzalias"}]
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    oui merci oliv pour la base
    ca confirme ce que je disais
    a l'exception "[]" qui peut etre le parent ou un array

    dans tout les cas sur l'exemple de json que j'ai donné plus haut c'est un array contenant tout les élément
    j'en conclu donc que si je fait un eval il me donnera la totale puisqu'il y en a qu'un et c'est donc le parent de tout les "{.....}"
    dans ce cas la c'est les enfants que je voudrais pourvoir boucler
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Dans l'exemple suivant que j'ai publié sur un forum étranger - l'URL source n'étant plus valide … - mais
    je me rappelle que le format n'était pas tout à fait à la norme comme tu peux le constater
    dans la ligne de code n°47 pour l'appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Dim JSc As Object
     
    Function TextRequest$(URL$)
        With CreateObject("MSXML2.XMLHttp")
            .Open "GET", URL, False
            .setRequestHeader "DNT", "1"
             On Error Resume Next
            .send
             If .Status = 200 Then TextRequest = .responseText Else Beep
        End With
    End Function
     
    Function jsonEval(jsonTXT$) As Object
     If JSc Is Nothing Then
    Set JSc = CreateObject("ScriptControl")
        JSc.Language = "JScript"
        JSc.AddCode "function getKeys(jsonObj) { var keys = []; for (var i in jsonObj) { keys.push(i); } return keys; }"
    End If
          Set jsonEval = JSc.Eval("(" & jsonTXT & ")")
    End Function
     
    Function jsonAllColumns(TXT$)
              Dim oKeys As Object, oRoot As Object, SP$()
              Set oRoot = jsonEval(TXT)
              Set oKeys = JSc.Run("getKeys", oRoot)
    If CallByName(oKeys, 0, VbGet) = "0" Then
        L& = CallByName(oKeys, "length", VbGet) + 1
        SP = Split(JSc.Run("getKeys", CallByName(oRoot, 0, VbGet)), ",")
        D& = UBound(SP) + 1
        ReDim VT(1 To L, 1 To D)
        For C& = 1 To D:  VT(1, C) = SP(C - 1):  Next
            On Error Resume Next
        For R& = 2 To L
               Set oKeys = CallByName(oRoot, R - 2, VbGet)
            For C = 1 To D
                VT(R, C) = CallByName(oKeys, VT(1, C), VbGet)
            Next
        Next
             jsonAllColumns = VT
    End If
        Set JSc = Nothing:  Set oKeys = Nothing:  Set oRoot = Nothing
    End Function
     
    Sub Demo()
        T$ = TextRequest("http://casadopaodequeijo.com.br/resource/scripts/custom-map-default.js")
        If T = "" Then Exit Sub
        VA = jsonAllColumns("[" & Split(Split(T, "[")(1), "]")(0) & "]")
        If Not IsArray(VA) Then Beep: Exit Sub
             ActiveSheet.UsedRange.Clear
        With Cells(1).Resize(UBound(VA), UBound(VA, 2))
            .Value = VA
            .Columns.AutoFit
        End With
    End Sub
    _________________________________________________________________________________________________________

    Merci de cliquer sur si vous appréciez ce code …

Discussions similaires

  1. [AJAX] Ecriture dans un fichier json avec une requête AJAX
    Par DarkPoster14 dans le forum jQuery
    Réponses: 1
    Dernier message: 10/07/2012, 09h45
  2. Problème d'encodage fichier JSON avec WCF REST Service
    Par Spikuria dans le forum Services Web
    Réponses: 0
    Dernier message: 09/03/2012, 10h24
  3. Création de fichier json avec PHP
    Par versus68 dans le forum Langage
    Réponses: 1
    Dernier message: 02/06/2008, 11h56
  4. [AJAX] Récupération d'un fichier JSON avec javaScript
    Par guerin dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/11/2006, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo