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 :

Export de données différentes avec chaine url de requete identique et url variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Femme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Par défaut Export de données différentes avec chaine url de requete identique et url variable
    Hello,

    Voici mon souci : je dois extraire des données puis les copier sur un classeur. L'extract est un .csv et voici le 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
    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
     Sub test()
    Dim IE As Object, Choix As Object
    Dim S As String
    Dim i As Integer
    Dim nbnoms As Integer
    Dim InputISDABouton As HTMLInputElement
     
     
     
     
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
     
     
     
    nbnoms = Cells(3, 5).Rows.Count
     
    For i = 4 To 5
     
    DoEvents
    IE.navigate "http://www.swapsinfo.org/charts/swaps/market-risk-activity?date_start=2015-01-01&date_end=2017-02-15&products=snre%2Cindex&suggest=&search=" & Workbooks("cds liquidity.xlsm").Sheets(7).Cells(i + 2, 6) & "&type=&submit=Update+Data"
    Do Until IE.readyState = 4
    DoEvents
    Loop
     
    Set IEdoc = IE.document
     
    Set InputISDABouton = IEdoc.all("export-data")
    InputISDABouton.Click
     
    IEdoc.Focus
     
    Application.Wait Now + TimeValue("0:0:2")
    Application.SendKeys "%{O}"
     
     
     
    For Each Wb In Workbooks
     If Right(Wb.Name, 4) = ".csv" Then
     Wb.Activate
     End If
     Next
     
     
    Sheets(1).Select
     
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
    :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
     
    Columns("A:C").Select
    Selection.Copy
     
    Application.DisplayAlerts = False
    ActiveWorkbook.Close Save = False
     
    Workbooks("cds liquidity.xlsm").Activate
    Sheets("calculs").Select
    Columns("A:C").Clear
    Range("A1").Select
     
    ActiveSheet.Paste
     
     
    Range("K2:Y2").Select
    Selection.Copy
     
    Sheets("main").Select
    Cells(2 + i, 3).Select
    ActiveSheet.Paste
     
     
     
    Next i
     
    Set IE = Nothing
    Set IEdoc = Nothing
     
     
     
     
    End Sub
    Je n'arrive pas a comprendre pourquoi juste après la demande d'export (et donc l'ouverture supposée du CSV) le csv s'ouvre apres le debug. Mais si je mets un point d'arrêt juste apres la commande Application.SendKeys "%{O}" et que je relance le reste de la macro ensuite tout se passe bien...

    J'ai essayé les sleep, wait now + .. et tout ce qui peut me faire gagner du temps, ça n'a aucun effet. je suis vraiment perdu sur ce coup... j'imagine que c'est la commande sendkey qui provoque ça mais je n'arrive pas à résoudre ce souci.

    Si quelqu'un voit une solution il est le bienvenu

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Le csv est le dernier classeur dans la collection workbooks

    Il faudra laisser une tempo de téléchargement du csv


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Application.Wait Now + TimeValue("0:0:2")
    Application.SendKeys "%{O}"
    Application.Wait Now + TimeValue("0:0:5")
     
    Set Wbk = Workbooks(Workbooks.Count)

  3. #3
    Membre habitué
    Femme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Par défaut
    Salut mercatog, merci pour la réponse mais même avec 10sec ca ne change rien (et ca m'enlève aussi le verr num je ne sais pas pourquoi).

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour verr num c'est connu à cause des sendkeys

    Sinon une alternative en gymnastique ( je ne sais pas si c'est une question de cookies)
    J'ouvre la page correspondant à l'action X dans Internet Explorer, ensuite je fais une requête par xmlhttp

    J'attendrai entre autre Qwazerty, Marc-L ouPatricktoulon pour une piste du pourquoi


    Fais des tests chez toi
    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
    Option Explicit
     
    Sub MesTelechargements()
    Dim DD As String, DF As String, Url As String
    Dim i As Integer, N As Integer
    Dim IE As Object
     
    N = 6
    DD = Format(DateSerial(2015, 1, 1), "yyyy-mm-dd")
    DF = Format(Now, "yyyy-mm-dd")
     
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
     
    For i = 1 To N
        DoEvents
        Url = "http://www.swapsinfo.org/charts/swaps/market-risk-activity?date_start=" & DD
        Url = Url & "&date_end=" & DF & "&products=snre%2Cindex&suggest=&search="& i
        Url = Url & "&type=&submit=Update+Data"
     
        IE.navigate Url
        Do Until IE.readyState = 4
            DoEvents
        Loop
        Telecharge i
    Next i
     
    IE.Quit
    Set IE = Nothing
    End Sub
     
    Private Sub Telecharge(ByVal Action As Integer)
    Dim S As String, UrlTmp As String, MonFichier As String
    Dim Req As Object
     
    UrlTmp = "http://www.swapsinfo.org/download/index/cdaf3d57f0bc68356ecf58c4235a8311c10f5d91/CDS%20Market%20Risk%20Activity"
    Set Req = CreateObject("microsoft.xmlhttp")
    With Req
        .Open "GET", UrlTmp, False
        .Send
        S = .Responsetext
    End With
    Set Req = Nothing
     
    MonFichier = ThisWorkbook.Path & "\Data_" & Action & ".csv"
    Open MonFichier For Output As #1
    Print #1, S
    Close #1
    End Sub

  5. #5
    Membre habitué
    Femme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Le csv est le dernier classeur dans la collection workbooks

    Il faudra laisser une tempo de téléchargement du csv


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Application.Wait Now + TimeValue("0:0:2")
    Application.SendKeys "%{O}"
    Application.Wait Now + TimeValue("0:0:5")
     
    Set Wbk = Workbooks(Workbooks.Count)
    Ok je vais essayer de tester ça


    En revanche je réalise que j'ai mal formulé mon problème : En fait le classeur csv ne s'ouvre que si il y a debuggage (car avant il sélectionne mon classeur natif et me demande s'il peut écraser certaines valeurs, j'appuie alors sur annuler puis débogage et à ce moment la le csv se lance. Si je n'appuie pas sur annuler le code continue mais trop tard le code travaille sur l'autre classeur) ou, si je mets un point d'arrêt ligne 38, je lance (le csv se lance) et puis je lance apres la suite ligne 38 et la bizarrement le travail est fait sur le csv.

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour directement insérer les données dans le fichier en cours en ajoutant une feuille par action

    J'ai ajouté un test car même si une requête aucune donnée n'est disponible pour une action donnée, le fichier de la dernière action est téléchargé

    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
    Option Explicit
     
    Sub ImportAllData()
    Dim DD As String, DF As String, S As String, ReqUrl As String, IeUrl As String
    Dim IE As Object, Req As Object
    Dim i As Integer, N As Integer
    Dim Tb
     
    Application.ScreenUpdating = False
    N = 6
    DD = Format(DateSerial(2015, 1, 1), "yyyy-mm-dd")
    DF = Format(Now, "yyyy-mm-dd")
     
    ReqUrl = "http://www.swapsinfo.org/download/index/cdaf3d57f0bc68356ecf58c4235a8311c10f5d91/CDS%20Market%20Risk%20Activity"
     
    Set Req = CreateObject("microsoft.xmlhttp")
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
     
    For i = 1 To N
        DoEvents
        IeUrl = "http://www.swapsinfo.org/charts/swaps/market-risk-activity?date_start=" & DD
        IeUrl = IeUrl & "&date_end=" & DF & "&products=snre%2Cindex&suggest=&search=" & i
        IeUrl = IeUrl & "&type=&submit=Update+Data"
     
        IE.navigate IeUrl
        Do Until IE.readyState = 4:
            DoEvents
        Loop
     
        If InStr(IE.document.body.innertext, "No data was returned. Please modify your filter parameters.") = 0 Then
            With Req
                .Open "GET", ReqUrl, False
                .Send
                S = .Responsetext
            End With
     
            Tb = Split(S, vbLf)
     
            With ThisWorkbook
                With .Sheets.Add(After:=.Sheets(.Sheets.Count)).Cells(1, 1).Resize(UBound(Tb) + 1)
                    .Value = Application.Transpose(Tb)
                    .TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(1, 5), Array(2, 1), Array(3, 1))
                End With
            End With
        End If
    Next i
     
    IE.Quit
    Set IE = Nothing
    Set Req = Nothing
    End Sub

  7. #7
    Membre habitué
    Femme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Par défaut
    Citation Envoyé par mercatog Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    ReqUrl = "http://www.swapsinfo.org/download/index/cdaf3d57f0bc68356ecf58c4235a8311c10f5d91/CDS%20Market%20Risk%20Activity"
    Juste les adresses générées par les csv export sont différentes et comportent des combinaisons de chiffres et de lettres, comment faire une boucle dessus ?

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    As-tu testé?

    Je n'ai pas encore d'explication mais la chaine cdaf3d57f0bc68356ecf58c4235a8311c10f5d91 est identique partout et en fonction de l'action X injectée dans l'url de IE le fichier téléchargé par la requête xmlhttp correspond bien à l'action X avec la même url de la requête.

    Regarde le code source correspondant au bouton d'extraction
    <span class="button subdued none" id="export-data" style="display: inline;" data-title="CDS Market Risk Activity" data-export="cdaf3d57f0bc68356ecf58c4235a8311c10f5d91">Export Data</span>


  9. #9
    Membre habitué
    Femme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Par défaut
    Le code marche super, un grand merci à toi j'aimerais juste comprendre comment on obtient a chaque fois de nouvelles data alors que requrl est constant... Une fois la page IE chargée, l'adresse du bouton export est toujours la même ?

    Je n'avais pas vu ta réponse, oui oui tout fonctionne c'est très pratique ces requetes XMLHTTP. D'accord donc requrl est la même partout.

    Génial !


    Dernière question : comment obtiens-tu cette adresse dans le code source de la page (html/js ?) ?

    Oups désolé de ma question, je viens de voir que tu m'avais répondu. Tout est parfait, mille merci, pour le temps que tu as pu me consacrer, et ce que tu as pu m'apprendre, c'est très pratique.

    Encore merci à toi :-)

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Je n'ai pas encore d'explication mais la chaine cdaf3d57f0bc68356ecf58c4235a8311c10f5d91 est identique partout et en fonction de l'action X injectée dans l'url de IE le fichier téléchargé par la requête xmlhttp correspond bien à l'action X avec la même url de la requête.
    Surtout ne ferme pas le sujet car je n'ai pas encore compris le pourquoi
    Et si tu peux changer le titre du sujet pour qu'il soit plus explicit

  11. #11
    Membre habitué
    Femme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Par défaut
    Ca marche, je suis également intéressé de savoir pourquoi. Et cette fonction .reponsetext est vraiment intéressante.

  12. #12
    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
    Bonjour !

    Citation Envoyé par mercatog Voir le message
    J'ai ajouté un test car même si une requête aucune donnée n'est disponible pour une action donnée, le fichier de la dernière action est téléchargé
    Windows utilise le cache pour les requêtes de type "GET" …
    Pour forcer une nouvelle lecture, il faut passer par du "POST" si le site le permet …

    Exemple :
    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
    Sub Demo()
        With CreateObject("Msxml2.XMLHTTP")
            .Open "POST", "http://www.swapsinfo.org/download/index/cdaf3d57f0bc68356ecf58c4235a8311c10f5d91/CDS%20Market%20Risk%20Activity", False
            .setRequestHeader "DNT", "1"
             On Error Resume Next
            .send
             On Error GoTo 0
             If .Status <> 200 Then Beep: Debug.Print .Status; " " & .StatusText: Exit Sub
             VA = Split(.responseText, vbCrLf)
        End With
             ActiveSheet.UsedRange.Clear
        With Cells(1).Resize(UBound(VA) + 1)
            .Value = Application.Transpose(VA)
            .TextToColumns Comma:=True
        End With
    End Sub
    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  13. #13
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir Marc.
    As tu une explication à la reponse différente de la requête xmlhttp d'une même url lancée juste après lancement d'IE sur le même site?

  14. #14
    Membre émérite
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Par défaut
    Bonjour,

    de mon côté je ne peux récupérer cette adresse qu'en passant par Internet Explorer ou Microsoft Edge, mais quand je passe par Chrome ou Firefox l'outil de développement ne me l'affiche pas.
    Est-ce pareil de votre côté ?

    @Mercatog :
    As tu une explication à la reponse différente de la requête xmlhttp d'une même url lancée juste après lancement d'IE sur le même site?
    Je n'ai pas tout suivi mais je ne comprends pas ta question. Peux-tu développer ?
    A+

  15. #15
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bon

    Le même résultat est obtenu en faisant 2 requêtes xmlhttp successives:
    • La première en utilisant l'url de l'action (entreprise) désirée (url variable en fonction de l'entreprise)
    • La seconde en utilisant l'url fixe du bouton de téléchargement du fichier csv

    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
    Sub ImportAllData()
    Dim DD As String, DF As String, S As String, CsvUrl As String, ActionUrl As String
    Dim i As Integer, N As Integer
    Dim Req As Object
    Dim Tb
     
    Application.ScreenUpdating = False
    N = 20
    DD = Format(DateSerial(2015, 1, 1), "yyyy-mm-dd")
    DF = Format(Now, "yyyy-mm-dd")
     
    CsvUrl = "http://www.swapsinfo.org/download/index/cdaf3d57f0bc68356ecf58c4235a8311c10f5d91/CDS%20Market%20Risk%20Activity"
    Set Req = CreateObject("microsoft.xmlhttp")
     
    For i = 1 To N
        DoEvents
        ActionUrl = "http://www.swapsinfo.org/charts/swaps/market-risk-activity?date_start=" & DD
        ActionUrl = ActionUrl & "&date_end=" & DF & "&products=snre%2Cindex&suggest=&search=" & i
        ActionUrl = ActionUrl & "&type=&submit=Update+Data"
     
        With Req
            .Open "GET", ActionUrl, False
            .Send
            S = .Responsetext
        End With
     
        If InStr(S, "No data was returned. Please modify your filter parameters.") = 0 Then
            With Req
                .Open "GET", CsvUrl, False
                .Send
                S = .Responsetext
            End With
     
            Tb = Split(S, vbLf)
     
            With ThisWorkbook
                With .Sheets.Add(After:=.Sheets(.Sheets.Count)).Cells(1, 1).Resize(UBound(Tb) + 1)
                    .Value = Application.Transpose(Tb)
                    .TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(1, 5), Array(2, 1), Array(3, 1))
                End With
            End With
        End If
    Next i
    Set Req = Nothing
    End Sub

  16. #16
    Membre émérite
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Par défaut
    Pourquoi
    &search=" & i
    dans ActionUrl ?
    Quand tu appuies plusieurs fois sur le bouton Update Data et que tu regardes la requête récupérée dans les outils de développement search reste non renseigné
    donc pourquoi vouloir le faire ?
    Si tu enlèves cela ta requête ramène les mêmes résultats 20 fois de suite.

    A+

    Edit : Search correspond à la zone de texte située juste au-dessus de Update Data. Je ne sais d'ailleurs pas avec quel type d'information la renseigner mais :
    1) dans le cas présent il n'est pas utile de la renseigner
    2) il me semble logique de penser que si tu la renseignes via la valeur de i ta requête n'est donc plus la même.
    Donc je dirais a priori que ta requête fonctionne correctement et qu'à partir du moment ou la valeur de i n'est plus la même les résultats ramenés sont logiquement différents.

  17. #17
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Davido
    Tu m'explique ce qui est clair.
    Ma demande
    - Quelle est la relation entre IE et la requête xmlhttp dans le 1er code?
    - Quelle est la relation entre les 2 requêtes xmlhttp du dernier code (car elles sont à priori indépendantes)?

    Dans les 2 cas, il y a transmission d'information entre IE et la requête de téléchargement et entre la requête de l'action i et la requête de téléchargement.

    Marc a parlé d'une question de cache windows mais sans argumenter

  18. #18
    Membre émérite
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Par défaut
    Tu m'explique ce qui est clair
    Ah désolé mais comme je ne comprenais pas pourquoi tu utilisais
    &search=" & i
    dans ta requête je pensais que ce n'était pas clair.

    Quelle est la relation entre les 2 requêtes xmlhttp du dernier code (car elles sont à priori indépendantes)?
    Ben oui elles le sont puisque la première met à jour les données en fonction des dates de début et de fin et la seconde télécharge le fichier...qu'est-ce qui n'est pas clair pour toi ?

    Quand j'effectue 3 tests successifs en n'utilisant que la requête liée au bouton:
    1) je lance une 1ère requête => je télécharge les données de la requête par défaut du site.
    2) je change les dates sans mettre à jour les données et je lance une 2ème requête => je télécharge les mêmes données que la requête précédente.
    3) je mets à jour les données et je lance une 3ème requête => je télécharge les données actualisées.

    Donc les deux requêtes sont bien indépendantes.

    Si tu veux être sûr de télécharger les données correspondant à ta demande (dates de début et de fin particulières) il te faut donc les deux.

    Mais peut-être n'ai-je pas à nouveau compris ta demande...

    A+

  19. #19
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    davido
    Mais peut-être n'ai-je pas à nouveau compris ta demande...
    Tout à fait

    Pour te simplifier la compréhension, oubli internet explorer et teste ce 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    Sub ImportAllData()
    Dim DD As String, DF As String, S1 As String, S2 As String, CsvUrl As String, ActionUrl As String
    Dim i As Integer, N As Integer
    Dim Req1 As Object, Req2 As Object
    Dim Tb
     
    Application.ScreenUpdating = False
    N = 3
    DD = Format(DateSerial(2015, 1, 1), "yyyy-mm-dd")
    DF = Format(Now, "yyyy-mm-dd")
     
    CsvUrl = "http://www.swapsinfo.org/download/index/cdaf3d57f0bc68356ecf58c4235a8311c10f5d91/CDS%20Market%20Risk%20Activity"
    Set Req2 = CreateObject("microsoft.xmlhttp")
     
    Set Req1 = CreateObject("microsoft.xmlhttp")
     
    For i = 1 To N
        DoEvents
        ActionUrl = "http://www.swapsinfo.org/charts/swaps/market-risk-activity?date_start=" & DD
        ActionUrl = ActionUrl & "&date_end=" & DF & "&products=snre%2Cindex&suggest=&search=" & i
        ActionUrl = ActionUrl & "&type=&submit=Update+Data"
     
        With Req1
            .Open "GET", ActionUrl, False    'ActionUrl: URL variable en fonction des dates DD et DF et de l'action i
            .Send
            S1 = .Responsetext
        End With
     
        If InStr(S1, "No data was returned. Please modify your filter parameters.") = 0 Then
            With Req2
                .Open "GET", CsvUrl, False    'CsvUrl: URL fixe de téléchargement du fichier csv
                .Send
                S2 = .Responsetext
            End With
     
            Tb = Split(S2, vbLf)
     
            With ThisWorkbook
                With .Sheets.Add(After:=.Sheets(.Sheets.Count)).Cells(1, 1).Resize(UBound(Tb) + 1)
                    .Value = Application.Transpose(Tb)
                    .TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(1, 5), Array(2, 1), Array(3, 1))
                End With
            End With
        End If
    Next i
    Set Req1 = Nothing
    Set Req2 = Nothing
    End Sub
    Req1 et Req2 sont indépendantes (dans le code en apparence) mais Req2 télécharge LE fichier correspondant à l'action injectée dans Req1. Dans l'url de Req2 aucunement il n 'y à de référence à une action particulière

    Voilà et merci de ne pas essayer d'expliquer des évidences

  20. #20
    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
    Citation Envoyé par Marc-L Voir le message
    Windows utilise le cache pour les requêtes de type "GET" …
    Pour forcer une nouvelle lecture, il faut passer par du "POST" si le site le permet …
    Ceci concernait uniquement Msxml2 !     Pas ce souci avec WinHttp en "GET" donc vaut mieux utiliser WinHttp …


    Citation Envoyé par mercatog Voir le message
    As tu une explication à la reponse différente de la requête xmlhttp d'une même url lancée juste après lancement d'IE sur le même site?
    Si j'ai bien compris la question :
    lorsqu'une session IE est ouverte, il y a certainement des cookies et des headers validant le "bien fondé" de la demande.
    Lorsqu'une requête est codée en VBA si certains imposés sont oubliés le résultat peut être nul ou différent …

Discussions similaires

  1. [AC-2003] Ré-importer un fichier csv généré par une application intranet
    Par Just_Jon dans le forum VBA Access
    Réponses: 2
    Dernier message: 14/10/2013, 14h11
  2. Nom de fichier CSV généré par BIRT
    Par ala1986 dans le forum BIRT
    Réponses: 2
    Dernier message: 16/04/2012, 10h49
  3. récupérer xml généré par seveur web
    Par KRis dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2010, 16h30
  4. Réponses: 5
    Dernier message: 25/11/2008, 02h27
  5. Réponses: 2
    Dernier message: 11/09/2008, 13h49

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