VBA: copier un dossier et son contenu

Dans ce tutoriel, vous apprendrez à utiliser VBA pour copier un dossier avec son contenu. Vous avez déjà pu apprendre les manipulations basiques avec des fichiers en VBA, ceci est donc une extension. Car en VBA, il est également possible de copier des dossiers entiers.

VBA: Copie de dossier complet avec son contenu

La méthode .CopyFolder

En gros, nous allons créer un nouvel Objet FSO (FileSystemObject) qui nous permettra d'utiliser la méthode .CopyFolder pour copier un dossier.

Voici donc les 3 lignes de code VBA dont vous aurez besoin (aucune Référence particulière n'est nécessaire). Ce n'est vraiment pas compliqué.

Vous pouvez constater que la méthode .CopyFile a 3 arguments:

  1. le dossier à copier
  2. la destination du dossier
  3. choix si le dossier de destination peut (True) ou ne peut pas (False) être surécrit

Comme indiqué plus haut, ce code va copier le dossier avec tout son contenu (sous-dossiers et fichiers). Si le dossier que vous voulez copier n'existe pas, la macro va bloquer avec un message d'erreur. C'est pourquoi je vous conseille de d'abord vérifier si le dossier existe.

Vous pouvez également vérifier si le nouveau dossier n'existe pas déjà. Car s'il existe déjà, vous risquez de sur-écrire des fichiers existants.

Attention, les deux dossiers ne peuvent pas se terminer par la barre oblique ("/") ou la barre oblique inverse ("\"). Si c'est le cas, le code va bloquer et générer une erreur.

Code VBA en tant que fonction pour copier un dossier

Il est bien sûr possible de faire de ce code une fonction indépendante qui utilisera des variables et aura pour arguments le chemin du dossier à copier ainsi que le chemin du nouveau dossier…

Cette fonction, dont le code suit, retourne comme résultat un Boolean (VRAI / FAUX – TRUE / FALSE): TRUE si le dossier a pu être copié, FALSE si une erreur s'est produite quelque part.

Elle contient quelques améliorations:

  • une vérification est faite au cas où un (les) argument(s) serait vide
  • elle vérifie si le dossier qui doit être copié existe
  • elle vérifie si les chemins ne contiennent pas les barres obliques à la fin, si oui, une correction est faite automatiquement

On obtient ainsi une fonction plus robuste qui ne plantera pas votre macro même en cas de problème…

Et voici donc le code:

Et ici deux exemples de l'utilisation de cette fonction…

 

Conclusion

Une fonction relativement simple mais qui peut tout de même vous économiser le temps et permettre d'ajouter nouvelles fonctionnalités à vos applications en VBA et en Excel. Vous pouvez l'utiliser par exemple pour l'archivage régulier des données ou encore pour une migration des données d'un endroit à l'autre… C'est un bon exemple qui montre que VBA peut servir à d'autres fins que d'automatiser la création des tableaux en Excel!

Vous pouvez aussi consulter la Page Microsoft dédiée à la méthode .CopyFolder. Attention, il s'agit d'une traduction automatique (anglais >> français)…

Pour aller plus loin en VBA…

Pour terminer, je vous propose quelques autres tutoriels qui pourraient vous être utiles.

 

Laissez un commentaire

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

4 commentaires sur “VBA: copier un dossier et son contenu”