formateur informatique

Copier tous les fichiers d'un dossier en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Copier tous les fichiers d'un dossier en VBA Access
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Copier tous les fichiers d'un dossier

Nous savons déjà instancier une certaine classe qui permet de manipuler les fichiers et dossiers du disque, par exemple pour parcourir tous les éléments d'un répertoire. Ici, nous allons redonner du service à cette classe pour permettre de copier ou de déplacer tous les fichiers d'un dossier vers un autre emplacement. Cette technique est intéressante en outre pour sécuriser des informations précieuses à archiver dans des lieux secrets.

Base de données Access à télécharger
Pour découvrir cette nouvelle astuce, nous proposons d'agir à partir d'une base de données abritant un formulaire accueillant quelques contrôles déjà en place. Comme vous pouvez le voir, la décompression livre le fichier de la base de données accompagné d'un sous dossier, nommé bdd. Ce dossier héberge quelques bases de données Access. C'est sur lui que nous exercerons les manipulations pour vérifier que nous sommes en mesure de copier ou de déplacer tous les éléments d'un dossier.
  • Double cliquer sur le fichier de la base de données pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Puis, dans le volet de navigation, double cliquer sur le formulaire fParcourir pour l'exécuter,
Formulaire Access pour copier ou déplacer un dossier

Deux premiers boutons sont matérialisés par l'icône d'un dossier. Bien sûr, ils sont encore inopérants à ce stade. Le premier doit permettre de désigner le dossier à copier, par le biais d'une boîte de dialogue standard d'Office. Le second doit permettre de définir le dossier de réception, de la même façon. Un groupe d'options ou cases à cocher, permet de choisir l'action. Est-ce que le dossier cible doit être dupliqué ou déplacé ? Enfin, un dernier bouton doit permettre de réaliser cette copie ou ce déplacement, en fonction du choix émis en amont.

La référence à Microsoft Office
Avant toute chose, une librairie doit être ajoutée au projet pour pouvoir piloter les boîtes de dialogue standard d'Office.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le Mode création,
Ainsi, nous basculons dans la vue en conception du formulaire.
  • Réaliser le raccourci clavier ALT + F11 pour afficher l'éditeur VBA Access,
  • En haut de l'éditeur, cliquer sur le menu Outils,
  • Dans les propositions, cliquer sur la rubrique Références,
Référence VBA Access pour boîtes de dialogue Microsoft Office

Si elle n'est pas déjà attachée au projet, vous devez cocher la case Microsoft Office 16.0 Object Library. Le numéro (ici 16.0) dépend de la version d'Office que vous utilisez.
  • Cliquer sur le bouton Ok de la boîte de dialogue pour valider cette intégration,
Les variables publiques
Maintenant, nous avons besoin de variables publiques pour mémoriser les chemins que devra exploiter la procédure attachée au bouton final pour la copie. En effet, les variables publiques stockent des données au-delà de la durée de vie des procédures événementielles.
  • Dans la page de code, sous l'instruction Option Explicit, déclarer les variables suivantes :
Option Compare Database
Option Explicit

Dim ch_depart As String: Dim ch_fin As String
Dim boite As FileDialog


Chaque variable est explicitement nommée. Les deux premières doivent stocker le chemin de départ et celui d'arrivée pour réaliser la copie ou le déplacement. La troisième est un objet de type FileDialog. Sa déclaration est rendue possible par la référence ajoutée au projet VBA Access. Néanmoins et nous le verrons, pour exploiter ces boîtes de dialogue standards, en l'occurrence ici celle pour désigner des dossiers, nous serons obligés d'instancier une classe précise.

Le dossier cible
Et précisément, il est temps d'exploiter cette classe pour hériter des propriétés et méthodes permettant de donner vie à cette fameuse boîte de dialogue. Tout d'abord, nous proposons de stocker en mémoire le dossier de départ, après avoir demandé à l'utilisateur de le désigner.
  • Revenir sur le formulaire en conception (ALT + Tab),
  • Cliquer sur le premier bouton à l'icône du dossier,
En consultant sa feuille de propriétés, vous remarquez qu'il est nommé depart.
  • Dans cette feuille de propriétés, activer l'onglet Evénement,
  • Dès lors, cliquer sur le bouton associé à son événement nommé Au clic,
  • Dans la boîte de dialogue, choisir le Générateur de code et valider par Ok,
C'est ainsi que nous retournons dans l'éditeur VBA Access, mais cette fois entre les bornes de la procédure événementielle depart_Click.
  • Dans cette procédure, ajouter les instructions VBA suivantes :
Private Sub depart_Click()
Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then ch_depart = boite.SelectedItems(1)

Set boite = Nothing

End Sub


Grâce à la propriété FileDialog de l'objet Application et grâce à son paramètre msoFileDialogFolderPicker, nous initialisons (Set) notre objet boite sur une boite de dialogue permettant de naviguer au travers des dossiers du disque. Avec sa méthode héritée Show, nous l'affichons à l'écran. Puis, nous récoltons le dossier désigné par l'utilisateur dans la variable publique ch_depart, grâce à la collection héritée SelectedItems de l'objet boite. Comme nous n'avons pas réglé de propriété pour permettre la multi-sélection de dossiers, nous savons qu'un seul a été choisi. C'est ainsi que nous le désignons (1) en paramètre de la collection. Enfin, nous réinitialisons (Set) l'objet à Nothing, dès lors qu'il n'est plus utilisé, pour le vider de la mémoire et coder proprement.

Le dossier de destination
Pour mémoriser le chemin de destination, le procédé est bien sûr identique. Seule la variable à affecter change.
  • Revenir sur le formulaire en conception,
  • Cliquer sur le second bouton associé à l'icône d'un dossier,
  • Cliquer sur le petit bouton associé à son événement Au clic dans la feuille de propriétés,
  • Dans les propositions, choisir le Générateur de code et valider par Ok,
Nous revenons dans l'éditeur VBA Access mais cette fois entre les bornes de la procédure événementielle arrivee_Click.
  • Dans cette procédure, coller et adapter les instructions VBA suivantes :
Private Sub arrivee_Click()
Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then ch_fin = boite.SelectedItems(1)

Set boite = Nothing
End Sub


Cette fois et comme nous l'annoncions, selon le même protocole, c'est bien le chemin de destination que nous mémorisons dans la variable nommée ch_fin.

Dupliquer le dossier
Puisque nous connaissons désormais l'emplacement de départ et celui d'arrivée, il est temps de procéder au déplacement ou à la copie des données. Pour cela, nous devons commencer par instancier la classe permettant de manipuler les fichiers et les dossiers du disque. Et comme vous le savez, nous allons encore une fois exploiter la précieuse fonction VBA CreateObject avec un argument dédié.
  • Revenir sur le formulaire en conception,
  • Cliquer sur le bouton intitulé Agir pour le sélectionner,
  • Dans la feuille de propriétés, cliquer sur le petit bouton associé à son événement Au clic,
  • Dans la boîte de dialogue, choisir le générateur de code et valider par le bouton Ok,
Nous revenons une fois encore dans l'éditeur VBA Access, cette fois entre les bornes de la procédure événementielle agir_Click.
  • Dans cette procédure, ajouter les instructions VBA suivantes :
...
Dim dossier As Object

If ch_depart <> "" And ch_fin <> "" Then
Set dossier = CreateObject("Scripting.FileSystemObject")
dossier.CopyFolder ch_depart, ch_fin
...


Nous déclarons tout d'abord un objet destiné à piloter les dossiers du disque. Grâce à une instruction conditionnelle double (And), nous vérifions que les deux chemins sont correctement renseignés. Si le test est un succès, grâce à la fameuse fonction VBA CreateObject, nous instancions la classe permettant de prendre possession des fichiers et dossiers du système. C'est ainsi que nous initialisons (Set) notre variable dossier. Grâce à sa méthode héritée CopyFolder, nous entreprenons la copie des données en fonction des chemins mémorisés dans les deux variables respectives.

Copier ou déplacer
Bien que l'action soit déjà entreprise et finalisée grâce à la méthode CopyFolder, il nous reste à savoir si l'utilisateur souhaite créer une copie du dossier ou le déplacer. Tout dépend de la case qu'il a cochée sur le formulaire. Ce groupe d'option se nomme action. Si la seconde case est cochée (Valeur 2), le dossier de départ doit être éliminé. Dans le cas contraire, aucune autre démarche ne doit être entreprise.
  • A la suite du code, ajouter les instructions VBA suivantes :
...
If action.Value = 2 Then dossier.DeleteFolder ch_depart, True
MsgBox "Les données ont bien été transférées."
Else
MsgBox "Les deux dossiers doivent être spécifiés."
End If
Set dossier = Nothing
...


Si laseconde case est cochée (action.Value = 2), après avoir effectué la copie, nous procédons à la destruction du dossier d'origine grâce à la méthode héritée DeleteFolder de l'objet dossier. Suite à cela, nous finalisons la première instruction conditionnelle pour spécifier le cas échéant, soit quand les deux dossiers n'ont pas été définis (Les deux dossiers doivent être spécifiés.).

Il est temps de tester.
  • Revenir sur le formulaire en conception,
  • L'exécuter avec la touche F5 du clavier,
  • Cliquer sur le premier bouton à l'icône du dossier,
  • Avec la boîte de dialogue, désigner le sous dossier de l'application locale,
  • Cliquer alors sur le second bouton à l'icône du dossier,
  • Avec la boîte de dialogue, désigner un dossier de destination,
  • Puis, cliquer sur le bouton Agir du formulaire,
Maintenant, si vous ouvrez l'explorateur Windows à l'emplacement défini, vous constatez que toutes les données du dossier de départ ont bien été copiées dans la destination. Si vous réalisez la même opération en cochant la seconde case, vous constatez que toutes les informations source ont bien été déplacées. En effet, le dossier de début n'existe plus.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn