VBA : Instruction extraire .csv Web

Bonjour à tous,

Voici mon souci :

Je dois extraire une feuille .csv d'un site web. Pour le moment j'arrive à me connecter au site. Le voici :

http://finviz.com/screener.ashx

Pour ce faire, je dois dire à VBA de cliquer sur le bouton 'export' (en bas à droite de la page).

N'étant pas franchement calé dans ce domaine, j'ai contourné légèrement ce premier problème en me connectant à la page

, ce qui semble être équivalent au clic sur le bouton extract.

Désormais, je fais face à un autre souci qui, il me semble, n'a pas été résolu sur le forum. Réalisant les actions web sur IE (l'application étant censée fonctionner sur tout ordinateur), une petite fenêtre s'ouvre me demandant si je veux ouvrir ou enregistrer le fichier. Là, je n'ai aucune idée de comment confirmer l'enregistrement.

Afin de mieux cerner de quoi il s'agit, voici le début de mon code pour cette action :

Sub IE2()

Dim IE As InternetExplorer
'Déclaration de la variable IE

    Set IE = CreateObject("InternetExplorer.Application")
'Affectation de l'objet à la variable IE
IE.Navigate ("http://finviz.com/export.ashx?v=111") 'permet de lancer le téléchargement
'insérer ici une commande afin de confirmer l'enregistrement (fenêtre s'ouvre; choix entre Open et Save).

End Sub

Peut être qu'une simple instruction pour simuler "entrer" sur le clavier permettrait d'enregistrer. Mais je pense qu'il y a plus propre et plus fiable comme solution.

Quelles seraient vos propositions ? (j'attends évidemment des explications, pas un code tout fait sinon je risque de revenir dans deux jours vous reposer une question similaire )

Merci par avance pour vous réponses,

Alex.

Up

bonjour,

à essayer

Sub importfilefrominternet()

fromURL = "http://finviz.com/export.ashx?v=111"

Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", fromURL, False
WinHttpReq.send

If WinHttpReq.Status = 200 Then
    Set dfile = CreateObject("ADODB.Stream")
    dfile.Open
    dfile.Type = 1
    dfile.Write WinHttpReq.responseBody
    dfile.SaveToFile "finviz.csv", 2 
    dfile.Close
End If

End Sub

Bonjour h2so4,

je vous remercie pour votre réponse.

Pourriez-vous s'il vous plaît commenter votre code ?

J'ai un peu de mal à comprendre le fonctionnement point par point (et donc adapter précisément ce code à ma situation).

Je suppose également qu'il faut que je l'intègre dans mon code précédent, car lorsque je lance seule l'instruction que vous m'avez fourni, il ne se passe à priori rien.

bonjour,

en principe le code fait le download et sauve le résulat dans un fichier finviz.csv dans le répertoire par défaut d'exccel.

Sub importfilefrominternet()

' url pour le download
fromURL = "http://finviz.com/export.ashx?v=111"

Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
'on ouvre un canal http et ou envoie l'URL
WinHttpReq.Open "GET", fromURL, False
WinHttpReq.send
' si on a reçu une réponse que tout est ok
If WinHttpReq.Status = 200 Then
 ' on crée un object fichier ADODB stream
    Set dfile = CreateObject("ADODB.Stream")
' on ouvre un nouveau fichier
    dfile.Open
    dfile.Type = 1
' on y écrit la réponse HTTP
    dfile.Write WinHttpReq.responseBody
' on sauve le fichier, option 2 on écrase le fichier s'il existe
    dfile.SaveToFile "finviz.csv", 2 
    dfile.Close
End If

End Sub

Effectivement, le code marche en réalité de lui même. Il sauvegarde le fichier dans le répertoire Documents.

Un grand merci à vous !

Donc, si je comprends bien l'instruction n'ouvre même pas de navigateur internet mais fait toutes les actions en "masqué" ?

Si tel est le cas, c'est vraiment pratique pour l'ergonomie de mon programme.

Dernier point : savez-vous comment définir un répertoire bien précis pour sauvegarder ce fichier ?

bonsoir,

il suffit d'adapter le nom de fichier pour y inclure le répertoire. par exemple :

dfile.SaveToFile "E:\monrépertoire\finviz.csv", 2

Parfait, cela fonctionne exactement comme je le souhaite !

En vous remerciant pour vos conseils, et en vous souhaitant un très bon dimanche.

Alex

Rechercher des sujets similaires à "vba instruction extraire csv web"