Télécharger fichier zip sur disque dur et décompression
Bonsoir à toutes et tous
je suis tombé sans me faire mal sur ce vieux code (2017) qui semblait correspondre à mon besoin, (récupérer le prix des carburants pour avoir un historique des pleins et des prix sur les stations
mais j'ai un gros warning de mes logiciels antivirus et autre me criant à l'exploit excel
le fichier zip en question fait quand meme 26Mo à télécharger
Option Explicit
#If VBA7 Then
Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As LongPtr, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As Long
#Else
Declare 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
#End If
Sub Unzip()
Dim WS As Object, ShApp As Object
Dim répertoire_zip As String, répertoire_unzip As Variant, URL As String, nom_fichier As Variant
Dim code_retour As Integer
'// Assignation répertoires
Set WS = CreateObject("WScript.Shell")
répertoire_zip = WS.SpecialFolders("E:\VBA")
répertoire_unzip = WS.SpecialFolders("E:\VBA")
'// Téléchargement fichier
URL = "https://donnees.roulez-eco.fr/opendata/annee/2022"
nom_fichier = répertoire_zip & "\" & "PrixCarburants_annuel_2022.zip"
code_retour = URLDownloadToFile(0, URL, nom_fichier, 0, 0)
If code_retour = 0 Then MsgBox "Téléchargement effectué" Else Exit Sub
'// Dézippage fichier
Set ShApp = CreateObject("Shell.Application")
ShApp.Namespace(répertoire_unzip).CopyHere ShApp.Namespace(nom_fichier).items
End Subsinon pour la partie décompression cela fonctionne grâce à un autre code ancien
Sub ArchiveCarburantE85()
'---------------------------------------------------------
'gestion des erreurs
On Error GoTo ErreurDecompression
'définition des variables
Dim ApplicationArchivage As Object
Dim FichierArchive As Variant
Dim DossierDestination As Variant
'informations sur l'archive et le dossier pour les fichiers décompressés
FichierArchive = "E:\VBA\PrixCarburants_annuel_2022.zip" 'l'archive à décompresser
DossierDestination = "E:\VBA\" 'le dossier dans lequel les fichiers seront décompressés
'vérification du format du chemin du dossier de destination
If Right(DossierDestination, 1) <> "\" Then DossierDestination = DossierDestination & "\"
'Décompression
Set ApplicationArchivage = CreateObject("Shell.Application")
ApplicationArchivage.Namespace(DossierDestination).CopyHere ApplicationArchivage.Namespace(FichierArchive).items
Set ApplicationArchivage = Nothing
'Message final
MsgBox "La décompression a été lancée.."
Exit Sub
ErreurDecompression:
MsgBox "Une erreur s'est produite..."
End Subauriez vous une piste pour le téléchargement de mon fichier via excel ?
Merci beaucoup
Bonjour Cfrancky77
Une piste pour le téléchargement, oui, changer d'antivirus
Il te fait un faux positif...
Sinon pour le code, je ferais ceci (fonctionne parfaitement chez moi)
Sub Unzip()
Dim ShApp As Object
Dim répertoire_zip As String, répertoire_unzip As Variant, URL As String, nom_fichier As Variant
Dim code_retour As Integer
'// Assignation répertoires
répertoire_zip = "E:\VBA\"
répertoire_unzip = "E:\VBA\"
'// Téléchargement fichier
URL = "https://donnees.roulez-eco.fr/opendata/annee/2022"
nom_fichier = répertoire_zip & "PrixCarburants_annuel_2022.zip"
code_retour = URLDownloadToFile(0, URL, nom_fichier, 0, 0)
If code_retour = 0 Then MsgBox "Téléchargement effectué" Else Exit Sub
'// Dézippage fichier
Set ShApp = CreateObject("Shell.Application")
ShApp.Namespace(répertoire_unzip).CopyHere ShApp.Namespace(nom_fichier).items
End SubA+
oui en effet c'est mon antimalware qui est fautif , cela marche en effet super
par contre j'ai une question concernant le code précédent que je ne comprends pas
Option Explicit
#If VBA7 Then
Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As LongPtr, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As Long
#Else
Declare 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
#End IfPourriez vous m'éclairer ?
Re,
C'est pour pouvoir utiliser l'API Windows de téléchargement, avec Excel en version 64 ou 32 bits
A+