[VBA] Récupérer la data d'un csv depuis son lien de téléchargement
Bonjour à tous !
J'ai un fichier excel qui traite de la donnée que je récupère via un fichier CSV que je télécharge sur un dashboard en ligne.
Je dois régulièrement retélécharger ce fichier et actualiser la donnée sur mon excel pour avoir certains inputs à jour.
Seulement, c'est fastidieux de devoir télécharger à la main le csv, l'ouvrir, convertir les données, copy paste et actualiser à chaque fois que j'ai besoin de travailler dessus.
Je dispose de l'url qui execute le téléchargement direct de mon CSV, j'aimerais pouvoir faire une fonction VBA qui récupère les données de ce CSV et les colle sur la Feuille1 de mon classeur.
J'ai essayé de bidouiller du code (ci-dessous) que j'ai pris d'un collègue, qui fait quelque chose de similaire à ce que je souhaite obtenir, sans succès (le message d'erreur étant "nous ne trouvons pas "C:\Users\xxxx\Desktop\test.csv" alors que si je lis bien le code, mon CSV téléchargé est censé s'enregistrer temporairement au même emplacement que mon excel.
Le problème ne semble pas si compliqué mais je cale, j'aurais besoin de vos lumières
Un grand merci par avance !
<br>
Sub test()
Dim link As String
link = "www monliendetelechargementdirect com/path?reportFormat=CSV"
Call getdata2(link)
End Sub
Sub getdata2(link)
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
Dim myurl As String
Dim sh As Object
Dim wb As Object
'disattiva alert e modifiche schermo
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'codice per scaricare csv (preso da internet)
WinHttpReq.Open "GET", link, False
WinHttpReq.send
myurl = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.responseBody
oStream.SaveToFile ThisWorkbook.Path & "\test.csv", 2
oStream.Close
End If
Set sh = ActiveWorkbook
Set wb = Workbooks.Open(ThisWorkbook.Path & "\test.csv")
'copia scarico
wb.Sheets(1).UsedRange.Copy
'incolla scarico
sh.Worksheets("Feuille 1").Cells(1, 1).PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
wb.Close savechanges:=False
Kill ThisWorkbook.Path & "\test.csv"
End SubEssayez cette macro et modifiez son URL (le classeur n'est pas protégé par .htaccess/htpasswd sinon il y aura des identifiants à passer).
Pour l'URL, pas de souci, vous êtes sur mon site perso.
Re,
Hello !
J'avais essayé de les récupérer dans power query via la foncionnalité "Données => Obtenir des données => A partir du web" et mettre mon lien,
Sauf j'ai un message d'erreur car excel essaye d'accéder au site comme un utilisateur classique et qu'il faut une connexion via token
![]()
Je ne sais pas ou vous allez chercher vos données, mais ce n'est pas un lien valide tout simplement
Hello, merci pour vos retours,
@Bruno Le lien est valide, quand je le rentre dans mon navigateur j'ai le fichier qui se télécharge directement si je me suis authentifié dans les 10h
En revanche si je ne suis pas encore authentifié je serai d'abord redirigé sur une page où je dois rentrer un token.
Le lien à ralonge du précédent screen est la page de redirection d'où l'échec du téléchargement.
@Optimix merci pour le fichier !
Ce message d'erreur m'est renvoyé en ouvrant mon url avec" Application.Workbooks.Open (url) "
J'ai essayé de m'authentifier sur Edge au préalable, pensant qu'excel allait utiliser ce navigateur pour télécharger le fichier, mais ça ne fonctionne pas
Vous écrivez :
si je me suis authentifié dans les 10hVotre fichier est donc dans un dossier protégé par des identifiants. Je regarde ça de plus près.
.
Re,
Juste pour info https://learn.microsoft.com/fr-fr/power-query/connector-authentication
Il faut juste donner le lien https:// sans le token
PQ vous demandera alors le type de connexion
C'est juste à titre d'info, je ne sais pas si ça marchera avec votre site
