Je dois télécharger un fichier CSV à partir d'un site Web à l'aide de VBA dans Excel. Le serveur devait également m'authentifier puisqu'il s'agissait de données provenant d'un service de sondage.
J'ai trouvé beaucoup d'exemples utilisant Internet Explorer contrôlés avec VBA pour cela. Cependant, il s’agissait principalement de solutions lentes et la plupart étaient également compliquées.
Mise à jour: Après un moment, j'ai trouvé une solution intéressante en utilisant un objet Microsoft.XMLHTTP dans Exceller. J'ai pensé partager la solution ci-dessous pour référence future.
Cette solution est basée sur ce site Web: http://social.msdn.Microsoft.com/Forums/en-US/bd0ee306-7bb5-4ce4-8341-edd9475f84ad/Excel-2007-use-vba-to- download-save-csv-from-url
Il est légèrement modifié pour écraser le fichier existant et pour transmettre les informations de connexion.
Sub DownloadFile()
Dim myURL As String
myURL = "https://YourWebSite.com/?your_query_parameters"
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False, "username", "password"
WinHttpReq.send
If WinHttpReq.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.responseBody
oStream.SaveToFile "C:\file.csv", 2 ' 1 = no overwrite, 2 = overwrite
oStream.Close
End If
End Sub
Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub Example()
DownloadFile$ = "someFile.ext" 'here the name with extension
URL$ = "http://some.web.address/" & DownloadFile 'Here is the web address
LocalFilename$ = "C:\Some\Path" & DownloadFile !OR! CurrentProject.Path & "\" & DownloadFile 'here the drive and download directory
MsgBox "Download Status : " & URLDownloadToFile(0, URL, LocalFilename, 0, 0) = 0
End Sub
J'ai trouvé ce qui précède lorsque vous recherchez un téléchargement via FTP avec un nom d'utilisateur et une adresse dans l'URL. Les utilisateurs fournissent des informations, puis passent les appels.
Cela a été utile car notre organisation utilise Kaspersky AV qui bloque active
FTP.exe, mais pas les connexions Web. Nous n'avons pas pu développer en interne avec ftp.exe et c'était notre solution. J'espère que cela aide les autres à la recherche d'informations!