Page 1 sur 5

Importer en json dans excel

Posté : 17 février 2017, 15:00
par stepaustras
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

Re: Importer en json dans excel

Posté : 17 février 2017, 17:29
par BrunoM45
Bonjour,

Menu Données -> A partir du web et mettre ton lien

Re: Importer en json dans excel

Posté : 17 février 2017, 17:41
par stepaustras
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:

Re: Importer en json dans excel

Posté : 17 février 2017, 18:56
par BrunoM45
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:

Re: Importer en json dans excel

Posté : 17 février 2017, 19:56
par pierrep56
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

Re: Importer en json dans excel

Posté : 17 février 2017, 19:59
par stepaustras
Bah merci bcp ça marche :mrgreen:

Re: Importer en json dans excel

Posté : 17 février 2017, 20:27
par pierrep56
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

Re: Importer en json dans excel

Posté : 17 février 2017, 20:54
par stepaustras
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 ?

Re: Importer en json dans excel

Posté : 17 février 2017, 21:24
par pierrep56
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

Re: Importer en json dans excel

Posté : 17 février 2017, 21:30
par stepaustras
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