Supprimer des fichiers et des dossiers en VBA



Il est possible, et même facile de travailler avec des fichiers en VBA. Après le tutoriel Manipulation basique des fichiers en VBA , je vous propose une nouvelle série des codes VBA, cette fois-ci axés sur la suppression des fichiers et des dossiers en VBA.

Cette article s'inspire du tutoriel (en anglais)  Delete files and folders de Ron de Bruin.

Les codes sources VBA qui suivent servent à supprimer de différentes manières des fichiers, des dossiers ou les deux en même temps. C'est une fonctionnalité très pratique de VBA mais…

Attention: Les fichiers/dossiers ainsi supprimés ne sont plus récupérables. Ils ne sont pas déplacés dans la Corbeille non plus. Ils sont tout simplement supprimés pour de bon!

 

Supprimer un fichier en VBA

Ceci est le cas le plus simple – nous voulons supprimer un fichier particulier. C'est la fonction VBA Kill qui permet de supprimer un fichier. Voici le code VBA:

Sub SupprimerFichier()

    Kill "C:\Exemple\TestsVBA\Rapport_annuel.xlsx"
    
End Sub

Pour éviter les erreurs, il est utile de vérifier d'abord si le fichier en question existe. Pour cela, on utilisera les fonctions VBA Len et Dir (plus d'informations dans le tutoriel dédié à ce sujet)

Sub SupprimerFichier()
    Dim FichierASupprimer As String
    
    FichierASupprimer = "C:\Exemple\TestsVBA\Rapport_annuel.xlsx" '<- le nom du fichier à supprimer
    If Len(Dir(FichierASupprimer)) > 0 Then Kill FichierASupprimer
    
End Sub

Supprimer tous les fichiers dans un dossier en VBA

Le code VBA suivant vous permettra de supprimer définitivement tous les fichiers dans un dossier:

Sub SupprimerTousLesFichiersDansDossier()
    
    Kill "C:\Users\Ron\Test\*.*"

End Sub

Vous pouvez constater le *.*  dans le code qui correspond à l'expression en métacaractèresune astérisque remplace une chaîne de caractères de n'importe quelle longueur (ici, cela signifie donc que l'on va supprimer des fichiers avec n'importe quel nom et n'importe quelle suffixe)

Et même ici, il est préférable de vérifier d'abord si le dossier existe:

Sub SupprimerTousLesFichiersDansDossier()
    Dim DossierANettoyer As String
    
    If Len(Dir("C:\Exemple\TestsVBA\", vbDirectory)) > 0 Then
        Kill "C:\Exemple\TestsVBA\*.*"
    Else
    End If
    
End Sub

Supprimer tous les fichiers remplissant un critère dans un dossier

Maintenant, imaginons que vous souhaitez supprimer tous les fichiers qui remplissent un critère particulier (exemple: tous les fichiers Excel, tous les fichiers PDF ou tous les fichiers dont le nom contient "test"). Voici le code VBA à utiliser dans ce cas-ci:

Sub SupprimerCertainsFichiersDansDossier_1()
'supprime tous les fichiers PDF
    Dim DossierANettoyer As String
    
    If Len(Dir("C:\Exemple\TestsVBA\", vbDirectory)) > 0 Then
        Kill "C:\Exemple\TestsVBA\*.pdf"
    Else
    End If
    
End Sub

Sub SupprimerCertainsFichiersDansDossier_2()
'supprime tous les fichiers dont le nom contient "test"
    Dim DossierANettoyer As String
    
    If Len(Dir("C:\Exemple\TestsVBA\", vbDirectory)) > 0 Then
        Kill "C:\Exemple\TestsVBA\*test*.*"
    Else
    End If
    
End Sub

Sub SupprimerCertainsFichiersDansDossier_3()
'supprime tous les fichiers Word, que ce soit les .DOCX ou les .DOCM etc.
    Dim DossierANettoyer As String
    
    If Len(Dir("C:\Exemple\TestsVBA\", vbDirectory)) > 0 Then
        Kill "C:\Exemple\TestsVBA\*.doc*"
    Else
    End If
    
End Sub

Supprimer un dossier et tous les sous-dossiers et fichiers qu'il contient

Et pour finir, vous pouvez aussi, grâce à un seul code, supprimer un dossier avec tout ce qu'il contient (fichiers, sous-dossiers)…
Mais je répète l'avertissement: soyez prudents car ce qui est effacé de cette manière est irrécupérable.

Sub SupprimerDossierAvecTouLeContenu()
'Assurez-vous qu'aucun fichier de ce dossier n'est pasouvert...

    Dim FSO As Object
    Dim DossierASupprimer As String

    Set FSO = CreateObject("Scripting.FileSystemObject")

    DossierASupprimer = "C:\Exemple\TestsVBA"  '<- remplacez par votre dossier

    If Right(DossierASupprimer, 1) <> "\" Then DossierASupprimer = DossierASupprimer & "\"

    If Len(Dir(DossierASupprimer, vbDirectory)) = 0 Then
        MsgBox "Le dossier: " & DossierASupprimer & " n'existe pas..."
        Exit Sub
    End If

    On Error Resume Next
    
    'Supprimer les fichiers
    FSO.DeleteFile DossierASupprimer & "*.*", True
    
    'Supprime les sous-dossiers
    FSO.DeleteFolder DossierASupprimer & "*.*", True
    
    'Supprime le dossier principal
    RmDir DossierASupprimer
    On Error GoTo 0

End Sub

 

Conclusion

Avec ces codes VBA, vous pouvez pousser encore plus loin les possibilités de VBA – on est déjà bien loin de "ajout des bordures dans un tableau Excel"… Ces codes constituent des exemples pour montrer de manière la plus simple le principe de suppression de fichiers et dossiers en VBA. Vous pouvez facilement les transformer en fonctions qui qui auront pour argument le nom du fichier ou du dossier à supprimer. Ainsi, vous aurez des fonctions facilement réutilisables pour vos projets.

 

Exclusion de responsabilité: Ces codes VBA suppriment définitivement des fichiers et/ou des dossiers. Chaque utilisateur est seul  responsable d’utilisation de ces codes. Excel-Malin.com ne peut pas être tenu responsable d’une perte des données ou de quelconque dommage que l’utilisateur pourrait subir en utilisant ces codes.

Pour aller plus loin en VBA

Si ce tutoriel vous a été utile, n'hésitez pas à parcourir ce site car vous y trouverez sans doute d'autres informations pratiques qui vont vous servir dans votre utilisation de VBA. En voici quelques exemples…

 

2 0

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.