Médiaforma

VBA Excel – Manipuler des dossiers

Print Friendly, PDF & Email

Cet article va vous montrer comment manipuler des dossiers en utilisant des instructions VBA dans Excel. Vous verrez comment créer un dossier, supprimer un dossier, tester si un dossier existe et copier ou déplacer un dossier dans un autre.

Les instructions utilisées s’adresseront à un objet Scripting.FileSystemObject. Pour pouvoir créer un tel objet, vous devez définir une référence à la bibliothèque Microsoft Scripting Runtime. Lancez la commande Références dans le menu Outils. La boîte de dialogue Références s’affiche. Déplacez-vous dans la zone de liste des références disponibles et cochez la référence Microsoft Scripting Runtime :

Validez en cliquant sur OK. Vous êtes désormais prêt à manipuler des dossiers via un objet Scripting.FileSystemObject.

Créer un dossier

Pour créer un dossier, commencez par créer un objet Scripting.FileSystemObject :

Dim fs As New Scripting.FileSystemObject

Utilisez alors la méthode CreateFolder de l’objet Scripting.FileSystemObject pour créer un dossier en indiquant son chemin en argument :

fs.CreateFolder "chemin du dossier à créer"

Attention

Si le chemin comporte plusieurs niveaux, le niveau N ne pourra être créé que si le niveau N-1 existe.

Une fois le dossier créé, libérez la mémoire de l’objet fs :

Set fs = Nothing

Voici un exemple de code complet. Ici on suppose que le dossier c:\data existe et on crée le dossier c:\data\excel :

Dim fs As New Scripting.FileSystemObject

fs.CreateFolder "c:\data\excel"

Set fs = Nothing

Si le dossier spécifié en argument de la méthode CreateFolder existe, une erreur sera levée et une boîte de dialogue peu engageante s’affichera :

Pour améliorer les choses, vous pouvez mettre en place un gestionnaire d’erreurs :

On Error GoTo gestionErreurs

Dim fs As New Scripting.FileSystemObject

fs.CreateFolder "c:\data\excel"

Set fs = Nothing

End

gestionErreurs:

  MsgBox "Erreur n° " & Err.Number & vbLf & Err.Description

End Sub

Si vous essayez de créer un dossier qui existe, la boîte de dialogue suivante s’affichera :

Si vous le souhaitez, vous pouvez créer un dossier sans passer par un objet Scripting.FileSystemObject :

MkDir "c:\data\excel"

Ou encore, en intégrant la gestion d’erreurs :

On Error GoTo gestionErreurs

MkDir "c:\data\excel"

End

gestionErreurs:

  MsgBox "Erreur n° " & Err.Number & vbLf & Err.Description

Supprimer un dossier

Pour supprimer un dossier, commencez par créer un objet Scripting.FileSystemObject :

Dim fs As New Scripting.FileSystemObject

Indiquez alors le nom du dossier à supprimer à la méthode DeleteFolder de l’objet Scripting.FileSystemObject :

fs.DeleteFolder "F:\Atelier\Armoire"

Puis supprimez l’objet fs de la mémoire :

Set fs = Nothing

Voici le code complet, sans gestionnaire d’erreurs :

Dim fs As New Scripting.FileSystemObject

fs.DeleteFolder "F:\Atelier\Armoire"

Set GestionFichier = Nothing

Si vous essayez de supprimer un dossier inexistant, une erreur VBA est levée :

Pour améliorer les choses, définissez un gestionnaire d’erreurs :

On Error GoTo gestionErreurs

Dim fs As New Scripting.FileSystemObject

fs.DeleteFolder "c:\data\excel"

Set GestionFichier = Nothing

End

gestionErreurs:

  MsgBox "Erreur n° " & Err.Number & vbLf & Err.Description

End Sub

Voici la boîte de dialogue affichée si vous tentez de supprimer un dossier inexistant :

Vous voulez un code plus compact ? Essayez cette instruction :

RmDir "c:\data\excel"

Ou encore, en intégrant la gestion d’erreurs :

On Error GoTo gestionErreurs

RmDir "c:\data\excel"

End

gestionErreurs:

  MsgBox "Erreur n° " & Err.Number & vbLf & Err.Description

Tester si un dossier existe

Pour tester si un dossier existe, commencez par créer un objet Scripting.FileSystemObject :

Dim fs As New Scripting.FileSystemObject

Vous pouvez alors utiliser la méthode FolderExists de cet objet en passant le nom du fichier en argument. Si le fichier existe, la méthode FolderExists retournera la valeur True. Dans le cas contraire, elle retournera la valeur False.

Pour terminer le code, supprimez l’objet Scripting.FileSystemObject de la mémoire en lui affectant la valeur Nothing :

Set fs = Nothing

Voici un exemple de code complet. Ici, si le dossier c:\data\excel n’existe pas, il est créé :

Dim fs As New Scripting.FileSystemObject

If fs.FolderExists("c:\data\excel") = False Then

  fs.CreateFolder "c:\data\excel"

End If

Set fs = Nothing

Copier un dossier dans un autre

Pour copier un dossier dans un autre, commencez par créer un objet Scripting.FileSystemObject :

Dim fs As New Scripting.FileSystemObject

Utilisez alors la méthode CopyFolder de cet objet en lui passant deux arguments : le chemin du dossier à copier et le chemin du dossier destination :

fs.CopyFolder "c:\data\excel", "c:\data\excel2"

Une fois la copie effectuée supprimer l’objet Scripting.FileSystemObject de la mémoire en lui affectant la valeur Nothing :

Set fs = Nothing

Voici un exemple de code complet. Ici, le dossier c:\data\excel est dupliqué dans le dossier c:\data\excel2 :

Dim fs As New Scripting.FileSystemObject

fs.CopyFolder "c:\data\excel", "c:\data\excel2"

Set fs = Nothing

Remarque

Si un fichier de même nom est trouvé dans le dossier destination, il n’est pas écrasé. Y compris si sa taille est différente.

Déplacer un dossier dans un autre

Pour déplacer un dossier dans une autre dossier, trois étapes sont nécessaires :

  • Création du dossier destination
  • Copie du dossier source dans le dossier destination
  • Suppression du dossier source

Ici par exemple, le dossier c:\data\excel est déplacé dans le dossier e:\data\excel :

Dim fs As New Scripting.FileSystemObject

fs.CreateFolder "e:\data\excel"

fs.CopyFolder "c:\data\excel", "e:\data\excel"

fs.DeleteFolder "c:\data\excel"

Set fs = Nothing

Attention

Pour que ce code fonctionne, les dossiers c:\data\excel et e:\data doivent exister. Après son exécution, les fichiers et dossiers contenus dans le dossier c:\data\excel se retrouvent dans le dossier e:\data\excel.

Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.