VBA et Zip: compresser et décompresser des fichiers 1


Le VBA, en tant que langage de script de Windows nous permet d'utiliser d'autres applications (qui ne font pas partie de la suite Microsoft Office) ce qui ouvre toute une gamme de possibilités supplémentaires à la programmation en VBA.

Les codes VBA qui suivent permettent de compresser et décompresser les fichiers via le WinZip (le programme d'archivage par défaut dans Windows). Vous pouvez donc utiliser Excel comme interface pour automatiser l'archivage (et désarchivage) de tout type de fichier – fichiers texte, fichiers Word, etc.

Je vous propose quatre codes VBA différents, tous les quatre prêts à l'utilisation – il suffit simplement de les copier/coller dans votre macro et changer les noms de fichiers à utiliser.

Archiver/compresser un fichier avec VBA

Ceci est le code VAB de base qui vous permet d'archiver un fichier. Il suffit d'indiquer le nom du fichier à archiver et le nom de l'archive. Par défaut, si l'archive mentionné existe déjà, la macro va l'effacer avant de le recréer.

Sub ArchiverUnFichier()
'par Excel-Malin.com ( http://excel-malin.com )
'---------------------------------------------------------
'gestion des erreurs
    On Error GoTo ErreurCompression

'définition des variables
    Dim ApplicationArchivage As Object
    Dim FichierAArchiver, FichierZip
       
'informations sur les fichiers (chemins & noms)
    FichierAArchiver = "C:\Test\MonFichierWord.docx"
    FichierZip = "C:\Test\Archives\MonArchive_1.zip"
     
'créer un nouveau archive
    If Len(Dir(FichierZip)) > 0 Then Kill FichierZip 'supprime l'archive s'il existe déjà
    Open FichierZip For Output As #1
        Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
    Close #1
      
'copier le fichier à archiver dans l'archive
    Set ApplicationArchivage = CreateObject("Shell.Application")
    ApplicationArchivage.Namespace(FichierZip).CopyHere FichierAArchiver

'Message final
    MsgBox "L'archivage est terminé..."

Exit Sub
ErreurCompression:
    MsgBox "Une erreur s'est produite..."
End Sub

 

Copier un fichier vers un archive existant

Le code suivant vous permet de copier un fichier (par exemple un document Word ou un PDF) dans un archive existant. Cela implique que le fichier original sera ajouté à l'archive mais restera également dans sa forme originale (non-compressée) à l'endroit d'origine.

Sub CopierFichierDansArchiveExistant()
'par Excel-Malin.com ( http://excel-malin.com )
'---------------------------------------------------------
'gestion des erreurs
    On Error GoTo ErreurCompression

'définition des variables
    Dim ApplicationArchivage As Object
    Dim FichierAArchiver, FichierZip
    
'informations sur les fichiers (chemins & noms)
    FichierAArchiver = "C:\Test\MonFichierWord.docx"
    FichierZip = "C:\Test\Archives\MonArchive_1.zip"
     
'copier le fichier à archiver dans l'archive
    Set ApplicationArchivage = CreateObject("Shell.Application")
    ApplicationArchivage.Namespace(FichierZip).CopyHere FichierAArchiver
         
'Message final
    MsgBox "L'archivage est terminé..."

Exit Sub
ErreurCompression:
    MsgBox "Une erreur s'est produite..."
End Sub

 

Déplacer un fichier vers un archive existant

Il s'agit de la modification du code précédent. Cette fois-ci, le fichier d'origine est déplacé dans l'archive existant. Cela veut donc dire que le fichier d'origine (le fichier non-compressé) ne restera pas à sa place initiale – le seul exemplaire de ce fichier se trouvera compressé dans l'archive mentionné.

Sub DeplacerFichierDansArchiveExistant()
'par Excel-Malin.com ( http://excel-malin.com )
'---------------------------------------------------------
'gestion des erreurs
    On Error GoTo ErreurCompression

'définition des variables
    Dim ApplicationArchivage As Object
    Dim FichierAArchiver, FichierZip
     
'informations sur les fichiers (chemins & noms)
    FichierAArchiver = "C:\Test\MonFichierWord.docx"
    FichierZip = "C:\Test\Archives\MonArchive_1.zip"
     
'copier le fichier à archiver dans l'archive
    Set ApplicationArchivage = CreateObject("Shell.Application")
    ApplicationArchivage.Namespace(FichierZip).MoveHere FichierAArchiver
         
'Message final
    MsgBox "L'archivage est terminé..."

Exit Sub
ErreurCompression:
    MsgBox "Une erreur s'est produite..."
End Sub

 

Décompresser le contenu d'un archive

Après la compression (archivage), voici le code VBA qui vous permettra d'extraire le contenu d'un archive. Il suffit d'indiquer le nom et l'emplacement de l'archive ainsi que le dossier dans lequel le contenu doit être décompressé…

Ce code ne supprime pas l'archive de départ. Vous aurez donc toujours votre archive + une copie décompressée de tout son contenu qui se trouvera dans le dossier de votre choix.

Sub DecompresserArchiveZip()
'par Excel-Malin.com ( http://excel-malin.com )
'---------------------------------------------------------
'gestion des erreurs
    On Error GoTo ErreurDecompression

'définition des variables
    Dim FSO As Object
    Dim ApplicationArchivage As Object
    Dim FichierArchive As Variant
    Dim DossierDestination As String

'informations sur l'archive et le dossier pour les fichiers décompressés
    FichierArchive = "C:\Test\MonArchive.zip" 'l'archive à décompresser
    DossierDestination = "C:\Test\Decompresse\" '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 "L'archive a été décompressé..."
Exit Sub

ErreurDecompression:
MsgBox "Une erreur s'est produite..."
End Sub

 

Utilisation avancée de compression et décompression en VBA

Les codes que vous venez de voir constituent la base – il est possible de les développer et combiner pour en faire une solution tout à fait automatisée. Voici quelques indications pour vous permettre de "personnaliser" le code:

 

Vous trouverez d'autres informations intéressantes sur l'archivage en VBA sur le site de Ron de Bruin (par exemple archivage avec le logiciel 7-Zip). Le site est en anglais.

 

13 0




Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

Commentaire sur “VBA et Zip: compresser et décompresser des fichiers