Aide importation fichier depuis navigateur

Bonjour,

Je souhaite intégrer à mon classeur des données qui viennent d'un site internet. Ce site met un disposition un bouton "export" permettant de télécharger un fichier csv avec les données.

J'aimerais avoir un coup de main pour simuler le click sur ce bouton export et enregistrer le fichier sur mon PC.

Pour le reste je devrais pouvoir me débrouiller (ouverture url, import dans classeur, traitement)

Voici mon lien :

le bouton export se trouve en entête du premier tableau a côté du menu déroulant

A dispo

Bonjour,

Avec PowerQuery tu peux récupérer ceci.

Peux-tu confirmer ta version d'excel ? si c'est bien 2007 cela va être beaucoup plus complexe !!

12thuglife.xlsx (18.24 Ko)

Bonjour,

J'ai excel 2013, si tu pouvais m'expliquer comment cela fonctionne, je ne vois rien dans le code VBA ?

Si tu as excel 2013, tu peux charger le plug-inn "PowerQuery" gratuit de microsoft. Il permet de charger directement à partir d'une adresse web (url) un tableau de données sans qu'il y ait besoin de macro.

capture d ecran 10

La structure de la page web est quand même un peu "spéciale", volontairement pour éviter justement des chargements automatiques. J'ai essayé d'autres voies ... la seul qui me donne quelque chose d'intéressant est la suivante (avec macro, compatible versions excel2013 voir en deçà)

Sub recuperer_page()

    Sheets("data").Select

    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .Navigate Sheets("url").Range("A1").Value
        Do Until .ReadyState = 4 And .Busy = False:  DoEvents:  Loop
        With .Document
            Do: Loop Until .ReadyState = "complete"
            Debug.Print "ok"
        End With
        SendKeys "^a"
        SendKeys "^c"
        Application.Wait Now + TimeValue("0:00:01")
        .Quit
    End With

    Sheets("data").Paste

    EffaceImages

End Sub

Sub EffaceImages()
Dim x As Shape
    For Each x In ActiveSheet.Shapes
        x.Delete
    Next x
End Sub

oui c'est compliqué, en fait j'ai essayé de trouver une astuce pour lancer le javascript du bouton "export" du site (comme cela ensuite je l'enregistre sur le PC et l'importe dans le classeur) mais je trouve pas.

Ta 2ème méthode pourrait fonctionner mais il faudrait également ensuite que je copie les données des différents onglets alors que dans l'export tout est présent...

oui c'est compliqué, en fait j'ai essayé de trouver une astuce pour lancer le javascript du bouton "export" du site (comme cela ensuite je l'enregistre sur le PC et l'importe dans le classeur) mais je trouve pas.

Hé oui, j'ai essayé, mais il faut adjoindre à l'URL le contenu d'un cookie (orderby) ... qui en fait contient le numéro de session php ! donc c'est pas gagné du tout !!

        function exportKeyStat2CSV(){
            var orderby = SRT_keyStuts.getOrderFromCookie("order");
            var urlstr = "//financials.morningstar.com/finan/ajax/exportKR2CSV.html?&callback=?&t=XPAR:RI&region=fra&culture=en-US&cur=&order="+orderby;
            document.location = urlstr;
        }

Ta 2ème méthode pourrait fonctionner mais il faudrait également ensuite que je copie les données des différents onglets alors que dans l'export tout est présent...

C'est plus facile à capter ensuite les valeurs.

Mais en effet, ils sont trop fort et pour le moment je n'ai pas pu capter le second tableau ... je vais essayer demain avec un sheel.execute sur google chrome ou firefox par exemple !

Après de multiples recherches, impossible de trouver ce fameux bouton dans les 24 scripts de la page !!

En revanche, après affichage de la page dans un navigateur, le remplacement de l'url par

javascript:exportKeyStat2CSV()

lance la procédure de téléchargement.

C'est peut-être une piste à creuser... sachant que le raccourci Alt + D permet d'accéder à la barre d'adresse, ce qui permettrait de remplacer l'url par cette commande javascript.

Bonjour,

Un essai assez concluant mais perfectible très certainement.

Attention ... quelques conditions

  • le navigateur doit accepter la commande javascript dans la barre d'adresse
  • j'ai réglé des tempos, c'est à ajuster en fonction de l'environnement (PC, connexion web, ...)
  • les fichiers sont chargés dans le répertoire défini par défaut
  • laisser faire jusqu'ici :
capture d ecran 11
Private Declare Function ShellExecute _
                            Lib "shell32.dll" _
                            Alias "ShellExecuteA" ( _
                            ByVal hwnd As Long, _
                            ByVal lpOperation As String, _
                            ByVal lpFile As String, _
                            ByVal lpParameters As String, _
                            ByVal lpDirectory As String, _
                            ByVal nShowCmd As Long) _
                            As Long

Sub telecharger()
Dim nav As Long
    nav = ShellExecute(0, "open", [_URL], 0, 0, 1)
    Application.Wait (Now + TimeValue("00:00:05"))

    On Error Resume Next
    Kill Environ("USERPROFILE") & "\Downloads\" & [_FICHIER]
    On Error GoTo 0

    SendKeys "%d"
    Application.Wait (Now + TimeValue("00:00:01"))
    SendKeys "javascript:" & [_SCRIPT] & "{(}{)}"
    SendKeys "{ENTER}"
    Application.Wait (Now + TimeValue("00:00:05"))
    SendKeys "%{F4}"

    MsgBox "Chargement terminé !"

    Workbooks.OpenText Filename:=Environ("USERPROFILE") & "\Downloads\" & [_FICHIER], Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=False, Comma:=True

End Sub

Alors si j'arrive à faire cela se sera idéal.

Par contre chez moi cela ne fonctionne pas.

Pour mon poste en 64 bits j'ai changé le code par celui-ci :

Private Declare Function ShellExecute _
Private Declare PtrSafe Function ShellExecute _

Ensuite quand je click sur le bouton, ouverture de firefox, tempo ensuite sélection de la barre URL, ensuite écriture de "javascript..." ensuite "enter" ensuite fermeture du navigateur puis message box.

Le problème viens je pense du enter qui ne fait rien.

En allant manuellement sur le lien et en écrivant manuellement "javascript..." puis entrée, rien ne se passe dans mon navigateur.

je cherche pourquoi... sinon c'est ça

After updating Firefox I can no longer use JavaScript in address bar.

Ah punaise ... avec chrome cela fonctionne nickel. Pour firefox, en effet, il y a une petite complication ... je suis en train de me documenter ici :

https://www.ghacks.net/2018/10/24/firefox-63-blocks-javascript-in-address-bar-by-default/

https://askubuntu.com/questions/376839/how-to-run-javascript-in-mozilla-url-bar

http://forums.mozillazine.org/viewtopic.php?f=38&t=3042818

Re,

voici pour moi le code qui fonctionne :

Dim nav As Long
    nav = ShellExecute(0, "open", "C:\Program Files\Internet Explorer\iexplore.exe", [_URL], 0, 1)
    Application.Wait (Now + TimeValue("00:00:05"))

    On Error Resume Next
    Kill Environ("USERPROFILE") & "\Downloads\" & [_FICHIER]
    On Error GoTo 0

    SendKeys "%d"
    Application.Wait (Now + TimeValue("00:00:01"))
    SendKeys "javascript:" & [_SCRIPT] & "{(}{)}"
    SendKeys "{ENTER}"
    Application.Wait (Now + TimeValue("00:00:05"))
    SendKeys "+{TAB}"
    SendKeys "+{TAB}"
    SendKeys "+{TAB}"
    SendKeys "{ENTER}"
    Application.Wait (Now + TimeValue("00:00:05"))
    SendKeys "%{F4}"

    MsgBox Environ("USERPROFILE") & "\Downloads\" & [_FICHIER]

    Workbooks.OpenText Filename:=Environ("USERPROFILE") & "\Downloads\" & [_FICHIER], Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=False, Comma:=True

End Sub

Je force l'ouverture avec IE, et les SendKeys "+{TAB}" me permettent de sélectionner "enregistrer" dans la fenêtre de téléchargement.

Faut que je modifie les tempo maintenant

sinon ça peux faire le travail !

Peux tu simplement m'expliquer comment tu récupères l'url de la cellule B1 dans la variable [_URL] du code ? j'ai pas compris le passage de paramètre

Peux tu simplement m'expliquer comment tu récupères l'url de la cellule B1 dans la variable [_URL] du code ? j'ai pas compris le passage de paramètre

Il ne s'agit pas d'une variable ... [_URL] est en fait un "diminutif" de Range("_URL").Value puisque la cellule B1 est nommée _URL (je mets parfois des _ devant les noms de cellules servant à mes programmes).

C'est donc la même chose pour les 2 autres cellules nommées : _FICHIER et _SCRIPT.

Et pourquoi _FICHIER ... car je veux le supprimer avant de le recharger ... sinon il prendra un nom différent (a minima avec chrome).

ok cool.

Merci pour ton aide en tout cas

https://www.ghacks.net/2018/10/24/firefox-63-blocks-javascript-in-address-bar-by-default/

Firefox users who upgraded the web browser to version 63 released in October 2018 may notice that the browser does not accept JavaScript code anymore when entered in the address bar. ;;;

it is possible to undo the change by changing the value of a preference of the web browser. Here is how that is done:

Load about:config?filter=browser.urlbar.filter.javascript in the Firefox address bar.

You may get a warning page. Accept the warning to continue.

Double-click on browser.urlbar.filter.javascript to change the value of the preference.

A value of True is the default. It means that Firefox blocks JavaScript code in the address bar. A value of False disables the limitation and enables the execution of JavaScript code in the Firefox address bar again.

You can undo the change at any time by repeating the three steps outlined above.

capture d ecran 12 capture d ecran 13

J'ai fait la manip ... mais cela ne semble pas convainquant !

ok cool.

Merci pour ton aide en tout cas

Reste à charger "proprement" les données de ce csv, notamment parce que les nombres sont en anglais ! C'est un autre sujet, je ne me suis pas penché dessus.

En tous c'était un excellent challenge, jamais je n'avais fait cette manip auparavant !

Pour les nombres aucun soucis il suffit de remplacer les . par des ,

Merci encore !

Rechercher des sujets similaires à "aide importation fichier navigateur"