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 :

Requête HTTP : acquisition de données


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Requête HTTP : acquisition de données
    Bonjour à tous,


    Je me permets de créer ce nouveau topic, j'ai cherché sur les forums et autres tutoriels mais impossible de trouver une solution à un problème qui me bloque depuis quelques jours. (c'est à en devenir fou !)

    J'ai une macro qui va chercher des données (indices boursiers) sur différents sites (MSCI, STOXX, ...), automatiquement pour chaque jour. Mes colonnes sont donc mes indices et les lignes relatives à chaque date de cotation (jours ouvrés). Lorsque la requête se ballade sur les différents sites, elle doit détecter la date dans la page source, copier la valeur recherchée et l'insérer dans sa cellule respective.

    Cependant, j'essaie d'intégrer une nouvelle source dans ma macro (ino.com), et les pages sources d'où je peux extraire mes données sont par exemple : http://club.ino.com/quotes/data/?q=1...15.E&w=d&f=csv (ici en l'occurence pour les cours de l'Or)

    J'ai donc 3 fonctions pour cette manipulation, mais ça coince au niveau de la troisième... mais je ne sais pourquoi ... Le seul indice que j'ai est "Incompatibilité de type", au niveau de la variable "testarray183(1)"

    Ci-dessous mon code (uniquement les lignes qui concernent cette nouvelle source):

    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
    Private Sub CommandButton1_Click()
    cell = Lastcell
     
    'adjust the amount of new data you need here
     
    For cell = Lastcell To Lastcell + 1
    Insertdate = Searchdate(GetXMLMSCIWORLD, Getcorrectdate(cell))
    Insertdate = Replace(Insertdate, " ", "")
    ‘…
    Insertvalue183 = Searchvalue183(GetGoldINO, Getcorrectdate(cell))
    ‘…
    Cells(cell + 1, 183) = Insertvalue183
    Next cell
    End Sub
     
    Private Function GetGoldINO()
     
    'EVERYTHING OF GOLD
    Dim objReq As WinHttp.WinHttpRequest
    Set objReq = New WinHttp.WinHttpRequest
    objReq.Option(WinHttpRequestOption_EnableRedirects) = True
    objReq.Open "GET", "http://club.ino.com/quotes/data/?q=1&ticket=7b6bbcc69bg06a08e074068078068&s=NYMEX_GC.U15.E&w=d&f=tab", False
    objReq.setRequestHeader "Cookie", "abcd=cookie:containing:colons"
    objReq.send
    GetGoldINO = objReq.ResponseText
    End Function
     
     
    Private Function Searchvalue183(GetGoldINO As String, getcorrectDateINO As String)
     
    Dim Correctdate183 As String
    Correctdate183 = Format(getcorrectDateINO, "mm/dd/yyyy")
     
    Dim CorrectDateINO As String
    CorrectDateINO = Format(Correctdate183, "yyyymmdd")
     
    Dim testarray183(1) As String ''
    testarray183(1) = Split(GetGoldINO, Correctdate183)   ---> c'est ici que ma variable pose problème
     
    Dim zy183 As String
    zy183 = Replace(testarray183(1), ",, "")
     
    Dim secondArray183(1) As String
    secondArray183 = Split(zy183, ",")
     
    Searchvalue183 = secondArray183(1)
     
    End Function

    Voilà, j'espère que mon intervention n'est pas stupide ou inaproppriée, je suis novice en la matière et essaie d'apprendre tout en travaillant sur ces codes.

    Je vous remercie d'ores et déjà et vous souhaite une bonne semaine !


    OlivierVE90

  2. #2
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour, bonjour !

    Comme beaucoup d'autres, j'ai failli ne pas répondre vu le code incomplet !
    Tout ce que l'on peut affirmer dès lors, c'est qu'une telle erreur se produit en mélangeant torchons & serviettes
    Ce n'est vraiment pas difficile de vérifier les types et les variables dans la fenêtre des Variables locales !

    Sinon vis à vis du pourtant simple fichier texte du lien (via une simple QueryTable ou ouverture directe par Excel),
    il aurait été vraiment opportun d'expliquer exhaustivement le but …

    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu...
    Bnsoir
    je rejoint marc quand au fait que tu t'es un peu emmeler les pinceaux sur le type de variable
    d'autant plus que tu demande leur valeur alors qu'elles sont instruites juste apres
    et il manque des fonctions que tu utilise dans ton post
    la ou je ne rejoins pas Marc c'est l'utilisation du query je l'ai en horreur ce truc la enfin c'est un autre debat excuse Marc

    d'autant plus qu'aussi si on essaie de faire un split par les saut de ligne on se rend compte que la 1 ere ligne comporte les entetes et la 1 ere valeur
    a savoir pourquoi je n'est pas la reponse
    j'ai donc remanier le texte et tansformer en html basique en memoire pour le coller dans le sheet
    on obtient ainsi le tableau entier avec chaque colonne bie placées dans le sheets
    ca donne ceci:
    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
    Sub test()
        Dim textebrut As String, lign As Variant
        textebrut = Replace(GetGoldINO, "Date", "<TR><TD>Date")
        textebrut = Replace(textebrut, "OpenInt", "OpenInt</TD></TR>" & vbCrLf & "<TR><TD>")
        textebrut = Replace(Replace(textebrut, vbTab, "</TD><TD>"), vbCrLf, "</TD></TR>" & vbCrLf)
            ligne = Split(textebrut, vbCrLf)
        For i = 0 To UBound(ligne)
            textebrut = Replace(textebrut, ligne(i), "<TR><TD>" & ligne(i))
        Next
        With CreateObject("htmlfile")
            If .parentWindow.clipboardData.setData("Text", "<table>" & textebrut & "</table>") Then
                Application.ScreenUpdating = False
                With Sheets(1): .Activate: .Cells.Clear: Cells(1, 1).Select: .Paste: End With
                .parentWindow.clipboardData.clearData "Text"
            End If
        End With
    End Sub
     
    Private Function GetGoldINO()
    'EVERYTHING OF GOLD
        Dim objReq As Object
        Set objReq = CreateObject("microsoft.xmlhttp")
        objReq.Open "GET", "http://club.ino.com/quotes/data/?q=1&ticket=7b6bbcc69bg06a08e074068078068&s=NYMEX_GC.U15.E&w=d&f=tab", False
        objReq.send
        GetGoldINO = objReq.ResponseText
    End Function
    somme toute rien d bien compliqué
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci poru vos premières réponses !

    Je vais essayer de préciser et de compléter ma demande.

    En fait ma macro est censée entrer ligne par ligne les valeurs de chaque indice en fonction des jours. Ex: si ma sheet est à jour jusqu'au 9 septembre, et que nous sommes le 25, la macro est censée aller chercher les données relatives à partir du 10 jusqu'à aujourd'hui. J'ai mis le code complet, avec deux indices par exemple. Pour l'indice venant du site MSCI ça marche mais c'est pour l'indice INO que je ne vois pas...


    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    Private Sub CommandButton1_Click()
    cell = Lastcell
     
    'adjust the amount of new data you need here
     
    For cell = Lastcell To Lastcell + 1
     
    Insertdate = Searchdate(GetXMLMSCIWORLD, Getcorrectdate(cell))
    Insertdate = Replace(Insertdate, " ", "")
    Insertvalue = Searchvalue(GetXMLMSCIWORLD, Getcorrectdate(cell))
    insertvalue3 = Searchvalue3(GetGoldINO, getcorrectdateINO(cell))
     
    Cells(cell + 1, 1) = Insertdate
    Cells(cell + 1, 2) = Insertvalue
    Cells(cell + 1, 3) = insertvalue3
     
    Next cell
    End sub
     
    '--------------EVERYTHING OF MSCI DATABASE--------------
     
     
     
    Private Function Lastcell()
     
    'EVERYTHING OF MSCI WORLD
     
    Dim lRow As Long
    lRow = ActiveWorkbook.Worksheets("DBDLY").Cells(Rows.Count, 1).End(xlUp).Row
    Lastcell = lRow
     
    End Function
     
    Private Function GetXMLMSCIWORLD()
    Dim objReq As WinHttp.WinHttpRequest
    Set objReq = New WinHttp.WinHttpRequest
    objReq.Option(WinHttpRequestOption_EnableRedirects) = True
    objReq.Open "GET", "http://www.msci.com/webapp/indexperf/charts?baseValue=false&format=XML&frequency=D&endDate=03%20Nov%2C%202080&indices=106%2CC%2C36&scope=R&startDate=03%20Nov%2C%202013&site=gimi&currency=15&priceLevel=41", False
    objReq.setRequestHeader "Cookie", "abcd=cookie:containing:colons"
    objReq.send
    GetXMLMSCIWORLD = objReq.ResponseText
     
     
    End Function
     
    Private Function Getcorrectdate(lRow)
    date1 = Format(ActiveWorkbook.Worksheets("DBDLY").Cells(lRow, 1).Value, "mm-dd-yyyy")
    Dim datum As String
    datum = Format(date1, "mm-dd-yyyy")
    Getcorrectdate = Replace(datum, "-", "/")
     
    End Function
     
    Private Function Searchdate(GetXMLMSCIWORLD As String, Getcorrectdate As String)
    Dim CorrectDate As String
    CorrectDate = Getcorrectdate
    TestArray = Split(GetXMLMSCIWORLD, CorrectDate)
    Dim wy As String
    wy = Replace(TestArray(1), "<date>", "")
    wy = Replace(wy, "</date>", "")
    wy = Replace(wy, "<value>", "")
    wy = Replace(wy, "</value>", "")
    wy = Replace(wy, "</asOf>", "")
    Dim secondArray() As String
    secondArray = Split(wy, "<asOf>")
    Dim py As Variant
    py = Split(secondArray(1), vbLf)
    Dim SearchdateBijna As String
    SearchdateBijna = Format(py(1), "mm-dd-yyyy")
    Searchdate = Format(SearchdateBijna, "mm-dd-yy")
     
     
    End Function
     
    Private Function Searchvalue(GetXMLMSCIWORLD As String, Getcorrectdate As String)
    Dim CorrectDate2 As String
    CorrectDate2 = Getcorrectdate
    TestArray2 = Split(GetXMLMSCIWORLD, CorrectDate2)
    Dim zy As String
    zy = Replace(TestArray2(1), "<date>", "")
    zy = Replace(zy, "</date>", "")
    zy = Replace(zy, "<value>", "")
    zy = Replace(zy, "</value>", "")
    zy = Replace(zy, "</asOf>", "")
    Dim secondArray2() As String
    secondArray2 = Split(zy, "<asOf>")
    Dim xy As Variant
    xy = Split(secondArray2(1), vbLf)
    Searchvalue = xy(2)
     
    End Function
     
     
    'EVERITHING OF INO DATABASE
     
    Private Function GetGoldINO()
     
    'EVERYTHING OF GOLD
    Dim objReq As WinHttp.WinHttpRequest
    Set objReq = New WinHttp.WinHttpRequest
    objReq.Option(WinHttpRequestOption_EnableRedirects) = True
    objReq.Open "GET", "http://club.ino.com/quotes/data/?q=1&ticket=7b6c8bd89bg06a08e074068078068&s=NYMEX_GC.Z15.E&w=d&f=meta", False
    objReq.setRequestHeader "Cookie", "abcd=cookie:containing:colons"
    objReq.send
    GetGoldINO = objReq.ResponseText
    End Function
     
    Private Function getcorrectdateINO(lRow)
     
    dateINO2 = ActiveWorkbook.Worksheets("DBDLY").Cells(lRow, 1).Value
    dateINO3 = Format(dateINO2, "dd/mm/yyyy")
    getcorrectdateINO = dateINO3
     
    End Function
     
    Private Function Searchvalue3(GetGoldINO As String, getcorrectdateINO As String)
     
    Dim Correctdate3 As String
    Correctdate3 = getcorrectdateINO
    testarray3 = Split(GetGoldINO, Correctdate3)
    Dim zy3 As String
    zy3 = Replace(testarray3(1), "", "")
    Dim secondArray3() As String
    secondArray3 = Split(zy3, ";")
    Searchvalue3 = secondArray3(5)
     
    End Function

    Sur la dernière fonction, je ne vois pas comment bien splitter la valeur qui se trouve en 5ème colonne... ?? J'ai encore cherché, commencé à étudier du VBA, navigué sur tout type de forum ou tuto mais rien n'y fait...

    Merci à ceux qui sauront m'éclairer

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut bonjour
    bonjour
    ta demande au sujet de demarrer la retranscription a partir da la derniere date presente sur le sheet est un cas d'école
    si tu te sert de mon exemple qui te donne une table html en bon et du forme il te sera facile de trouver la bonne date en distilant les balises "TR" sur le 1 er enfant
    c'est bien pour ca que je te l'ai transformer ainsi
    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

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    D'accord merci, je vais regarder ça de plus près alors et essayer de voir ce que je peux modifier !


    Une bonne soirée d'ici là !

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    tiens voila un exemplaire

    met ca dans un fichier vierge
    lance une premiere fois la sub test
    et regarde la grille excel
    ensuite suprime quelque ligne a la main dans le sheet
    ensuite relance la sub test
    ca devrazit te rajouter les manquant
    et cela a chaque fois que tu relancera la sub test
    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
    Sub test()
        nextdate = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Value
        nexdate = IIf(IsDate(nextdate), nextdate, 0)
        Dim textebrut As String, lign As Variant
        textebrut = Replace(GetGoldINO, "Date", "<TR><TD>Date")
        textebrut = Replace(textebrut, "OpenInt", "OpenInt</TD></TR>" & vbCrLf & "<TR><TD>")
        textebrut = Replace(Replace(textebrut, vbTab, "</TD><TD>"), vbCrLf, "</TD></TR>" & vbCrLf)
        ligne = Split(textebrut, vbCrLf)
        For i = 0 To UBound(ligne)
            textebrut = Replace(textebrut, ligne(i), "<TR><TD>" & ligne(i))
        Next
        With CreateObject("htmlfile")
            .body.innerhtml = "<table>" & textebrut & "</table>"
            Set mesTRS = .getelementsbytagname("TR")
            For i = 4 To mesTRS.Length - 1
                If Val(mesTRS(i).Children(0).innertext) > Val(nextdate) Then texte = texte & mesTRS(i).outerhtml
            Next
            .write "<table>" & texte & "</table>"
            Debug.Print "<table>" & texte & "</table>"
            If .parentWindow.clipboardData.setData("Text", .body.innerhtml) Then
                Application.ScreenUpdating = False
                With Sheets(1): .Activate: Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select: .Paste: End With
                .parentWindow.clipboardData.clearData "Text"
            End If
        End With
    End Sub
    Private Function GetGoldINO()
    'EVERYTHING OF GOLD
        Dim objReq As Object
        Set objReq = CreateObject("microsoft.xmlhttp")
        objReq.Open "GET", "http://club.ino.com/quotes/data/?q=1&ticket=7b6bbcc69bg06a08e074068078068&s=NYMEX_GC.U15.E&w=d&f=tab", False
        objReq.send
        GetGoldINO = objReq.ResponseText
    End Function
    voila et la marmotte elle met le chocolat dans le papier Alu
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci Patrick pour ton aide, je vois ton fichier je l'ai bien essayé et ça marche effectivement.

    Cependant ça n'est pas exactement ce que je recherche, je n'ai en fait besoin que des valeurs de la colonne "Last". Je ne suis pas assez calé pour comprendre tout ton code, j'ai bien essayé quelques manoeuvres mais rien n'y fait.. donc j'ai remanié le mien...

    J'ai maintenant ceci:

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    Private Sub CommandButton1_Click()
    cell = Lastcell
     
    'adjust the amount of new data you need here
     
    For cell = Lastcell To Lastcell + 1
     
    Insertdate = Searchdate(GetXMLMSCIWORLD, Getcorrectdate(cell))
    Insertdate = Replace(Insertdate, " ", "")
    Insertvalue = Searchvalue(GetXMLMSCIWORLD, Getcorrectdate(cell))
    insertvalue3 = Searchvalue3(GetGoldINO, getcorrectdateINO(cell))
     
    Cells(cell + 1, 1) = Insertdate
    Cells(cell + 1, 2) = Insertvalue
    Cells(cell + 1, 3) = insertvalue3
     
    Next cell
    End sub
     
    '--------------EVERYTHING OF MSCI DATABASE--------------
     
     
     
    Private Function Lastcell()
     
    'EVERYTHING OF MSCI WORLD
     
    Dim lRow As Long
    lRow = ActiveWorkbook.Worksheets("DBDLY").Cells(Rows.Count, 1).End(xlUp).Row
    Lastcell = lRow
     
    End Function
     
    Private Function GetXMLMSCIWORLD()
    Dim objReq As WinHttp.WinHttpRequest
    Set objReq = New WinHttp.WinHttpRequest
    objReq.Option(WinHttpRequestOption_EnableRedirects) = True
    objReq.Open "GET", "http://www.msci.com/webapp/indexperf/charts?baseValue=false&format=XML&frequency=D&endDate=03%20Nov%2C%202080&indices=106%2CC%2C36&scope=R&startDate=03%20Nov%2C%202013&site=gimi&currency=15&priceLevel=41", False
    objReq.setRequestHeader "Cookie", "abcd=cookie:containing:colons"
    objReq.send
    GetXMLMSCIWORLD = objReq.ResponseText
     
     
    End Function
     
    Private Function Getcorrectdate(lRow)
    date1 = Format(ActiveWorkbook.Worksheets("DBDLY").Cells(lRow, 1).Value, "mm-dd-yyyy")
    Dim datum As String
    datum = Format(date1, "mm-dd-yyyy")
    Getcorrectdate = Replace(datum, "-", "/")
     
    End Function
     
    Private Function Searchdate(GetXMLMSCIWORLD As String, Getcorrectdate As String)
    Dim CorrectDate As String
    CorrectDate = Getcorrectdate
    TestArray = Split(GetXMLMSCIWORLD, CorrectDate)
    Dim wy As String
    wy = Replace(TestArray(1), "<date>", "")
    wy = Replace(wy, "</date>", "")
    wy = Replace(wy, "<value>", "")
    wy = Replace(wy, "</value>", "")
    wy = Replace(wy, "</asOf>", "")
    Dim secondArray() As String
    secondArray = Split(wy, "<asOf>")
    Dim py As Variant
    py = Split(secondArray(1), vbLf)
    Dim SearchdateBijna As String
    SearchdateBijna = Format(py(1), "mm-dd-yyyy")
    Searchdate = Format(SearchdateBijna, "mm-dd-yy")
     
     
    End Function
     
    Private Function Searchvalue(GetXMLMSCIWORLD As String, Getcorrectdate As String)
    Dim CorrectDate2 As String
    CorrectDate2 = Getcorrectdate
    TestArray2 = Split(GetXMLMSCIWORLD, CorrectDate2)
    Dim zy As String
    zy = Replace(TestArray2(1), "<date>", "")
    zy = Replace(zy, "</date>", "")
    zy = Replace(zy, "<value>", "")
    zy = Replace(zy, "</value>", "")
    zy = Replace(zy, "</asOf>", "")
    Dim secondArray2() As String
    secondArray2 = Split(zy, "<asOf>")
    Dim xy As Variant
    xy = Split(secondArray2(1), vbLf)
    Searchvalue = xy(2)
     
    End Function
     
     
    'EVERITHING OF INO DATABASE
     
    Private Function GetGoldINO()
     
    'EVERYTHING OF GOLD
    Dim objReq As WinHttp.WinHttpRequest
    Set objReq = New WinHttp.WinHttpRequest
    objReq.Option(WinHttpRequestOption_EnableRedirects) = True
    objReq.Open "GET", "http://club.ino.com/quotes/data/?q=1&ticket=7b6cc6d8bbg06a08e074068078068&s=FOREX_XAUUSDO&w=d&f=csv", False
    objReq.setRequestHeader "Cookie", "abcd=cookie:containing:colons"
    objReq.send
    GetGoldINO = objReq.ResponseText
    End Function
     
     
    Private Function Searchvalue3(GetGoldINO As String, getcorrectdateINO As String)
     
    Dim Correctdate3 As String
    Correctdate3 = Format(getcorrectdateINO, "yyyymmdd")
    testarray3 = Split(GetGoldINO, Correctdate3)
     
    Dim zy3 As String
    zy3 = testarray3(1)
    zy3 = Replace(testarray183(1), ",,", "")
    zy3 = Replace(zy183, ",0,0", "")
     
    Searchvalue3= zy3
    End Function

    Ce qui me donne bien dans ma cellule requise le champ de données que je veux. Le seul bémol est que je n'ai besoin que de la valeur "Last" et non toute la ligne, j'ai essayé d'épurer cette ligne en enlevant les ",," et les ",0,0" avant et après les valeurs mais je ne sais comment viser juste la colonne "Last"...


    Là je cale.. y a-t-il une fonction pour séparer les cellules d'une ligne ? avec un Split en visant la virgule ? Mmmmh je vois l'idée mais n'arrive pas à l'implémenter en codes


    Merci !

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    tu veux donc la colonne date et last c'est bien ca ?
    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

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    En fait dans ma sheet excel j'ai déjà la colonne date, et la macro reconnait cette date dans ma sheet, je n'ai besoin que de la colonne "Last" où les valeurs doivent être entrées en fonction de ça.

    Comme ça, si jamais ma database est à jour jusqu'au 10 septembre et que nous sommes le 28, la macro reconnaitra les dates manquantes et introduira les valeurs de la colonne "Last" dans les cellules concernées dans ma sheet

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    OK et si il y a une date dans ta sheet qui n'existe pas dans la page elle restera toujours vide c'est ca?
    je peut te modifier mon code pour avoir que les dates et last sans qu'il y es deja les dates dans la sheets rien de plus simple
    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

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    En principe les dates sont bonnes, elles sont relatives au jours de cotation qui sont les mêmes pour tous les indices (mis à part parfois des jours fériés ci et là mais ça je peux rectifier manuellement ce n'est pas un souci)


    Sinon je n'ai besoin que des "Last" oui


    Ok merci j'ai hâte de voir ce que ça va donner

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    voila quelques caracteres en plus dans une ligne du code
    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
    Sub testreq()
        nextdate = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Value
        nexdate = IIf(IsDate(nextdate), nextdate, 0)
        Dim textebrut As String, lign As Variant
        textebrut = Replace(GetGoldINO, "Date", "<TR><TD>Date")
        textebrut = Replace(textebrut, "OpenInt", "OpenInt</TD></TR>" & vbCrLf & "<TR><TD>")
        textebrut = Replace(Replace(textebrut, vbTab, "</TD><TD>"), vbCrLf, "</TD></TR>" & vbCrLf)
        ligne = Split(textebrut, vbCrLf)
        For i = 0 To UBound(ligne)
            textebrut = Replace(textebrut, ligne(i), "<TR><TD>" & ligne(i))
        Next
        With CreateObject("htmlfile")
            .body.innerhtml = "<table>" & textebrut & "</table>"
            Set mesTRS = .getelementsbytagname("TR")
            For i = 3 To mesTRS.Length - 1
                If Val(mesTRS(i).Children(0).innertext) > Val(nextdate) Then texte = texte & "<TR>" & mesTRS(i).Children(0).outerhtml & mesTRS(i).Children(4).outerhtml & "</TR>"
            Next
            .write "<table>" & texte & "</table>"
            Debug.Print "<table>" & texte & "</table>"
            If .parentWindow.clipboardData.setData("Text", .body.innerhtml) Then
                Application.ScreenUpdating = False
                With Sheets(1): .Activate: Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select: .Paste: End With
                .parentWindow.clipboardData.clearData "Text"
            End If
        End With
    End Sub
    Private Function GetGoldINO()
    'EVERYTHING OF GOLD
        Dim objReq As Object
        Set objReq = CreateObject("microsoft.xmlhttp")
        objReq.Open "GET", "http://club.ino.com/quotes/data/?q=1&ticket=7b6bbcc69bg06a08e074068078068&s=NYMEX_GC.U15.E&w=d&f=tab", False
        objReq.send
        GetGoldINO = objReq.ResponseText
    End Function
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Ok je vois c'est quelque chose dans ce type là que je cherche ! Merci

    Mais étant donné que dans ma sheet la date est déjà entrée par le biais d'une macro sur le site MSCI, comment faire pour ne mettre que les valeurs "Last" ? Quelle partie du code exactement est liée à prendre uniquement cette colonne ?

    Comme ça je peux l'implémenter dans ma sheet.

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut exemple avec ta methode
    voila
    si la date est trouver ca met le last et si la date n'existe pas ca l'ajoute a la fin
    mieux je peut pas hein
    purré t'es dur en affaire
    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
    Sub testreq()
        nextdate = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Value
        nexdate = IIf(IsDate(nextdate), nextdate, 0)
        Dim textebrut As String, lign As Variant
        textebrut = Replace(GetGoldINO, "Date", "<TR><TD>Date")
        textebrut = Replace(textebrut, "OpenInt", "OpenInt</TD></TR>" & vbCrLf & "<TR><TD>")
        textebrut = Replace(Replace(textebrut, vbTab, "</TD><TD>"), vbCrLf, "</TD></TR>" & vbCrLf)
        ligne = Split(textebrut, vbCrLf)
        For i = 0 To UBound(ligne)
            textebrut = Replace(textebrut, ligne(i), "<TR><TD>" & ligne(i))
        Next
        With CreateObject("htmlfile")
            .body.innerhtml = "<table>" & textebrut & "</table>"
            Set mesTRS = .getelementsbytagname("TR")
            ReDim tablo(mesTRS.Length - 1, 2)
            For i = 3 To mesTRS.Length - 1
                tablo(i, 1) = mesTRS(i).Children(0).innertext: tablo(i, 2) = mesTRS(i).Children(4).innertext
            Next
            For i = 3 To UBound(tablo)
                Set cel = Sheets(1).Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp)).Find(tablo(i, 1))
                If Not cel Is Nothing Then
                    cel.Offset(0, 1) = tablo(i, 2)
                Else
                   With Cells(Rows.Count, 1).End(xlUp)
                   .Offset(1, 0) = tablo(i, 1)
                   .Offset(1, 1) = tablo(i, 2)
                   End With
                   Debug.Print tablo(i, 1) & "   " & tablo(i, 2)
                End If
            Next
        End With
    End Sub
    Private Function GetGoldINO()
    'EVERYTHING OF GOLD
        Dim objReq As Object
        Set objReq = CreateObject("microsoft.xmlhttp")
        objReq.Open "GET", "http://club.ino.com/quotes/data/?q=1&ticket=7b6bbcc69bg06a08e074068078068&s=NYMEX_GC.U15.E&w=d&f=tab", False
        objReq.send
        GetGoldINO = objReq.ResponseText
    End Function
    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

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Ok ! merci, c'est top dans une sheet sans rien d'autre, mais ça ne fit pas dans ma sheet que j'avais expliqué :s C'est pour ça que j'avais mis mes codes

    Je vais essayer de comprendre ces codes pour intégrer ce dont j'ai besoin. Merci

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Arf... je n'arrive pas à implémenter correctement tes codes dans mon module .. :s

    Comment fais-tu pour ne sélectionner que les valeurs "Last" du tableau ? Ca correspond à quelle partie de ton code ?


    Désolé d'être si barbant :s j'essaie de trouver des tutos et autres mais ça n'est pas évident

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    donne moi un exemple de sheet fini je te l'adapterais
    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

Discussions similaires

  1. [Débuter] Récupérer des données sur un site Web via une requête HTTP
    Par sauvezmoi dans le forum Réseau
    Réponses: 1
    Dernier message: 29/04/2015, 16h03
  2. [PHP 5.3] Récupérer des données issues d'une requête http GET
    Par Pierrea4564 dans le forum Langage
    Réponses: 2
    Dernier message: 24/09/2013, 08h15
  3. Envoyer requête HTTP avec données POST
    Par Dominique49 dans le forum Services Web
    Réponses: 1
    Dernier message: 20/12/2011, 11h11
  4. [HTTP]Créer une requête http multipart/related
    Par jothi35 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/04/2005, 15h32
  5. [CrystalReport]Requête comme source de données
    Par audreyb dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/02/2005, 09h12

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