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.