Un fichier ZIP est un fichier qui contient un ou plusieurs fichiers compressés ; la compression de fichiers permettant de réduire le volume des données avant leur transmission ou stockage. La décompression des fichiers ZIP est l’étape indispensable pour retrouver les fichiers dans leur forme originelle avant de pouvoir les exploiter.

En présence de nombreux fichiers ZIP (à l’image des FEC extraits à partir de la nouvelle version de DCSnet), leur décompression gagne à être automatisée. C’est ce que proposent les deux macros VBA ci-après. Le classeur Excel comprenant les deux macros est téléchargeable en bas de cet article.
Le première macro passe en revue tous les fichiers (à l’aide de la boucle Do While… Loop) d’un dossier (désigné par la variable Dossier_Source renvoyant ici vers le dossier Z:\ZIP FEC). Dès lors qu’un fichier ZIP est trouvé (identifié par le test conditionnel (If FSO.GetExtensionName(Dossier_Source & “\” & NomFichierZIP) = “ZIP” Then), il est décompressé grâce à la méthode .CopyHere de l’objet Namespace vers le dossier indiqué par la variable Dossier_Cible (ici : Z:\FEC).
Option Explicit
Sub Unzip()
'Définition des variables
Dim FSO As Object
Dim ShApp As Object
'---Chemin du dossier contenant les fichiers ZIP
Dim Dossier_Source As Variant
'---Chemin du dossier où transférer les fichiers dézippés
Dim Dossier_Cible As Variant
'---Nom du fichier ZIP
Dim NomFichierZIP As Variant
Set ShApp = CreateObject("shell.application")
Set FSO = CreateObject("scripting.filesystemobject")
'Définition du dossier contenant des fichiers ZIP
Dossier_Source = "Z:\ZIP FEC"
'Définition du dossier destination
Dossier_Cible = "Z:\FEC"
NomFichierZIP = Dir(Dossier_Source & "\")
Do While NomFichierZIP <> ""
If FSO.GetExtensionName(Dossier_Source & "\" & NomFichierZIP) = "ZIP" Then
ShApp.Namespace(Dossier_Cible & "\").CopyHere ShApp.Namespace(Dossier_Source & "\" & NomFichierZIP).Items
End If
NomFichierZIP = Dir
Loop
End Sub
Cette deuxième macro remplit la même fonction que la précédente à la différence près que le contenu des variables Dossier_Source et Dossier_Cible est défini en dur dans le code source de la première (Dossier_Source = “..”) et sur sélection de l’utilisateur dans la seconde.
Dans ce deuxième code source, la définition des sources et cibles s’opère avec la commande FileDialog. Celle-ci s’utilise en deux temps :
- Création de l’objet FDialog (nom au choix du programmeur) : Set FDialog = Application.FileDialog(msoFileDialogFolderPicker)
Le paramètre de FileDialog, ici msoFileDialogFolderPicker indique que l’utilisateur doit sélectionner un dossier (Folder en anglais). La valeur msoFileDialogFilePicker demanderait à l’utilisateur de sélectionner un fichier (File).
- Dossier_Source = FDialog.SelectedItems.
La variable Dossier_Source prend la valeur du dossier sélectionné par l’utilisateur.
La commande FileDialog ouvre la fenêtre suivante :

La fenêtre de dialogue est personnalisable. Exemples de personnalisation :
- FDialog.InitialFileName = “C:\” : le dossier par défaut est C:\
- FDialog.Title = “Sélectionnez le dossier cible où extraire le contenu du(des) fichier(s) ZIP” : définit le titre de la fenêtre de dialogue.
Code source :
Sub Unzip_FileDialog()
'Définition des variables
Dim FDialog As FileDialog
Dim FSO As Object
Dim ShApp As Object
'---Chemin du dossier contenant les fichiers ZIP
Dim Dossier_Source As Variant
'---Chemin du dossier où transférer les fichiers dézippés
Dim Dossier_Cible As Variant
'---Nom du fichier ZIP
Dim NomFichierZIP As Variant
Set ShApp = CreateObject("shell.application")
Set FSO = CreateObject("scripting.filesystemobject")
Set FDialog = Application.FileDialog(msoFileDialogFolderPicker)
'Définition du dossier contenant des fichiers ZIP
With FDialog
FDialog.InitialFileName = "C:\"
FDialog.Title = "Sélectionnez le dossier source contenant le(s) fichier(s) ZIP"
If FDialog.Show Then
Dossier_Source = FDialog.SelectedItems(1)
Else
Exit Sub
End If
End With
'Définition du dossier destination
With FDialog
FDialog.InitialFileName = "C:\"
FDialog.Title = "Sélectionnez le dossier cible où extraire le contenu du(des) fichier(s) ZIP"
If FDialog.Show Then
Dossier_Cible = FDialog.SelectedItems(1)
Else
Exit Sub
End If
End With
NomFichierZIP = Dir(Dossier_Source & "\")
Do While NomFichierZIP <> ""
If FSO.GetExtensionName(Dossier_Source & "\" & NomFichierZIP) = "ZIP" Then
ShApp.Namespace(Dossier_Cible & "\").CopyHere ShApp.Namespace(Dossier_Source & "\" & NomFichierZIP).Items
End If
NomFichierZIP = Dir
Loop
End Sub
___
Pour approfondir le sujet : Analyse de données / Automatisation & productivité / VBA
Derniers articles parBenoît RIVIERE (voir tous)
- Analyse des données comptables (FEC) : analyse de la conformité comptable des transactions et de leur dénouement - dimanche 23 novembre 2025
- L’AMF et l’AFA appellent à la vigilance sur le risque de corruption par des réseaux criminels de personnes ayant accès à des informations privilégiées - lundi 4 août 2025
- Détecter les inversions HT/TVA avec ANA-FEC2 - jeudi 31 juillet 2025
- Analyse de FEC en ligne avec ANA-FEC2 (manuel d’utilisation) - mardi 29 juillet 2025
- Rapport AFA 2024 : les contrôles comptables à ne pas négliger - samedi 5 juillet 2025



