Importer en json dans excel Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
s
stepaustras
Membre fidèle
Membre fidèle
Messages : 157
Inscrit le : 12 mai 2015
Version d'Excel : 2003

Message par stepaustras » 17 février 2017, 15:00

Bonjour à toutes et a tous, :D

Voilà j'aimerais importer des données depuis un fichier .js (jason) dans excel.
J'ai fait un fichier test en js a cette adresse

http://simple.gagnant.place.free.fr/test.js

et j'aimerais avoir le résultat comme dans le fichier exemple en PJ, qui a été fait a partir d'une page internet qui converti le js en csv mais j'aimerais le faire directement depuis excel sans passer par ce convertisseur.

Merci de vôtre aide :D
test.xls
(32 Kio) Téléchargé 178 fois
Avatar du membre
BrunoM45
Membre impliqué
Membre impliqué
Messages : 2'847
Appréciations reçues : 81
Inscrit le : 29 octobre 2011
Version d'Excel : 2016 FR, O365 FR
Contact :

Message par BrunoM45 » 17 février 2017, 17:29

Bonjour,

Menu Données -> A partir du web et mettre ton lien
[F1] est une touche qui appelle l'aide : Essayez, c'est assez performant et on trouve plein de choses

Il n'y a ni bon ni mauvais usage de la liberté d'expression, il n'en existe qu'un usage insuffisant.
s
stepaustras
Membre fidèle
Membre fidèle
Messages : 157
Inscrit le : 12 mai 2015
Version d'Excel : 2003

Message par stepaustras » 17 février 2017, 17:41

Merci,
Le problème avec cette méthode c'est que un fichier json tu te retrouve avec tous dans la cellule A1 et ça donne pas du tout le même résultat que mon fichier exemple. :evil: Il faut convertir je ne sais comment, j'avais lu a un endroit peu être il faut ajouter un module de classe qu'on peu trouver sur le net "jsconverter.bas" et activer la ref microsoft script runtime mais j'ai jamais su comment faire.

D'ailleurs je vais mettre ce lien pour le json car mon exemple test c'est pas bon

https://www.pmu.fr/services/turfInfo/cl ... rticipants

et sur ce lien c'est ce que je me suis servi pour convertir mon js en collant le lien ci dessus.
https://json-csv.com/

J'avais vu un tuto avec Office 2016 mais moi j'ai que excel 2003 :mrgreen:
Avatar du membre
BrunoM45
Membre impliqué
Membre impliqué
Messages : 2'847
Appréciations reçues : 81
Inscrit le : 29 octobre 2011
Version d'Excel : 2016 FR, O365 FR
Contact :

Message par BrunoM45 » 17 février 2017, 18:56

Re,

Alors bonne chance :roll:
personnellement je n'aime pas travailler sur des projets ou il s'agit de pari que ce soit PMU ou autre :evil:
[F1] est une touche qui appelle l'aide : Essayez, c'est assez performant et on trouve plein de choses

Il n'y a ni bon ni mauvais usage de la liberté d'expression, il n'en existe qu'un usage insuffisant.
Avatar du membre
pierrep56
Membre dévoué
Membre dévoué
Messages : 933
Appréciations reçues : 124
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 17 février 2017, 19:56

Bonjour à tous,

Essaye ce code pour voir :
Sub Turf()
Dim ScriptControl As Object, PMU As Object
Dim Ecurie As Object, Cheval As Object
Dim Site As String, i As Long

    Set ScriptControl = CreateObject("MSScriptControl.ScriptControl")
    ScriptControl.Language = "JScript"

    Site = "https://www.pmu.fr/services/turfInfo/client/1/programme/18012016/R1/C1/participants"
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", Site, False
        .send
        Set PMU = ScriptControl.Eval("(" + .responseText + ")")
        .abort
    End With
    
    i = 2
    Set Ecurie = PMU.participants
    For Each Cheval In Ecurie
        With ActiveSheet
            .Cells(i, 1).Value = Cheval.nom
            .Cells(i, 2).Value = Cheval.numPmu
            .Cells(i, 3).Value = Cheval.age
            .Cells(i, 4).Value = Cheval.sexe
            .Cells(i, 5).Value = Cheval.race
            .Cells(i, 6).Value = Cheval.statut
            .Cells(i, 7).Value = Cheval.oeilleres
            .Cells(i, 8).Value = Cheval.proprietaire
            .Cells(i, 9).Value = Cheval.entraineur
            .Cells(i, 10).Value = Cheval.driver
            
            '... etc ...
        
            i = i + 1
        End With
    Next Cheval
        
    Set Ecurie = Nothing
    Set PMU = Nothing
    Set ScriptControl = Nothing
End Sub
Pierre
s
stepaustras
Membre fidèle
Membre fidèle
Messages : 157
Inscrit le : 12 mai 2015
Version d'Excel : 2003

Message par stepaustras » 17 février 2017, 19:59

Bah merci bcp ça marche :mrgreen:
Avatar du membre
pierrep56
Membre dévoué
Membre dévoué
Messages : 933
Appréciations reçues : 124
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 17 février 2017, 20:27

Ok,
Il y a un traitement spécial pour les données encapsulées cf robe, gainsParticipant, et autre :
Sub Turf()
Dim ScriptControl As Object, PMU As Object
Dim Ecurie As Object, Cheval As Object, Rb As Object, Gp As Object
Dim Site As String, i As Long

    Set ScriptControl = CreateObject("MSScriptControl.ScriptControl")
    ScriptControl.Language = "JScript"

    Site = "https://www.pmu.fr/services/turfInfo/client/1/programme/18012016/R1/C1/participants"
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", Site, False
        .send
        Set PMU = ScriptControl.Eval("(" + .responseText + ")")
        .abort
    End With
    
    i = 2
    Set Ecurie = PMU.participants
    On Error Resume Next
    For Each Cheval In Ecurie
        With ActiveSheet
            .Cells(i, 1).Value = Cheval.nom
            .Cells(i, 2).Value = Cheval.numPmu
            .Cells(i, 3).Value = Cheval.age
            .Cells(i, 4).Value = Cheval.sexe
            .Cells(i, 5).Value = Cheval.race
            .Cells(i, 6).Value = Cheval.statut
            .Cells(i, 7).Value = Cheval.oeilleres
            .Cells(i, 8).Value = Cheval.proprietaire
            .Cells(i, 9).Value = Cheval.entraineur
            .Cells(i, 10).Value = Cheval.deferre
            .Cells(i, 11).Value = Cheval.driver
            .Cells(i, 12).Value = Cheval.driverChange
            
            Set Rb = Cheval.robe
            .Cells(i, 13).Value = Rb.code 'libelleCourt
            .Cells(i, 14).Value = Rb.libelleLong
            
            .Cells(i, 15).Value = Cheval.indicateurInedit
            .Cells(i, 16).Value = Cheval.musique
            .Cells(i, 17).Value = Cheval.nombreCourses
            .Cells(i, 18).Value = Cheval.nombreVictoires
            .Cells(i, 19).Value = Cheval.nombrePlaces
            
            Set Gp = Cheval.gainsParticipant
            .Cells(i, 20).Value = Gp.gainsCarriere
            .Cells(i, 21).Value = Gp.gainsVictoires
            
            '... etc ...
        
            i = i + 1
        End With
    Next Cheval
        
    Set Rb = Nothing
    Set Gp = Nothing
    Set Ecurie = Nothing
    Set PMU = Nothing
    Set ScriptControl = Nothing
End Sub
sans oublier le On Error Resume Next pour les cases vides du json
s
stepaustras
Membre fidèle
Membre fidèle
Messages : 157
Inscrit le : 12 mai 2015
Version d'Excel : 2003

Message par stepaustras » 17 février 2017, 20:54

Ok merci par contre comment tu fais pour les valeurs par exemple la colonne 20 celle ou c'est écrit gain carrière il y a dans le js deux zéro de trop par exemple, tous comme dans la colonne participants__poidsCondition il faudrait une virgule et aussi si je met la colonne participants__handicapValeur il y a un nombre avec un point, il va me la compter comme un texte ?
Avatar du membre
pierrep56
Membre dévoué
Membre dévoué
Messages : 933
Appréciations reçues : 124
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 17 février 2017, 21:24

Si les valeurs des gains sont en centimes, il suffit de les diviser par 100 pour avoir des euros :
Set Gp = Cheval.gainsParticipant
.Cells(i, 20).Value = Gp.gainsCarriere / 100
.Cells(i, 21).Value = Gp.gainsVictoires / 100

Pour les valeurs avec décimales il suffit de dire par exemple:
Set Gp = Cheval.dernierRapportDirect
.Cells(i, 23).Value = Gp.nombreIndicateurTendance

0.66 sera lu comme 0,66
s
stepaustras
Membre fidèle
Membre fidèle
Messages : 157
Inscrit le : 12 mai 2015
Version d'Excel : 2003

Message par stepaustras » 17 février 2017, 21:30

Ok merci bcp je vais tester tout ça et compléter le code car je ne vais pas garder toutes les lignes :D très gentils de ta part
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message