VBA : Décompresser en masse des fichiers Zip

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.

DCSnet FEC ZIP

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 :

Fenêtre FileDialog

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

Share Button
DEZIPPEUR FEC DCSnet
DEZIPPEUR FEC DCSnet
DEZIPPEUR-FEC-DCSnet.xlsm
20 KiB
225 téléchargements
Détails...
The following two tabs change content below.
Après seize années passées en cabinet d’expertise-comptable et de commissariat aux comptes (où j’ai exercé comme expert-comptable et chef de mission audit), j’ai pris le poste de directeur comptable d’un groupe de distribution automobile en novembre 2014. Au cours de ma carrière, j’ai acquis une expérience significative en audit et en exploitation des systèmes d’information (analyse de données, automatisation des tâches, programmation informatique) au service de la production des comptes annuels et consolidés. C’est cette expérience personnelle et ma passion pour l’informatique que je partage sur ce blog. Mon CV / Réalisations personnelles et projets informatiques / Ma collection / Me contacter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.