formateur informatique

Parcourir les fichiers d'un dossier en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Parcourir 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 :


Récolter les fichiers d'un dossier

Avec cette nouvelle astuce de code VBA Access, nous allons apprendre à parcourir les fichiers d'un dossier choisi par l'utilisateur.

Parcourir les fichiers du dossier choisi en VBA Access

Sur l'exemple illustré par la capture, nous travaillons à partir d'un formulaire doté de deux boutons, d'un groupe de cases d'option et d'une zone de liste. Lorsque l'utilisateur clique sur le premier bouton, matérialisé par l'icône d'un dossier, une boîte de dialogue de navigation apparaît. L'utilisateur choisit alors un dossier. Et aussitôt, tous les fichiers de type texte qu'il contient sont rapatriés dans la zone de liste. Dans le volet suivant, nous profiterons de ces travaux pour voir comment accéder aux contenus de ces fichiers, pour les restituer dans une zone de texte multiligne du formulaire.

Base de données Access à télécharger
Pour développer cette technique, nous suggérons d'appuyer les travaux sur une base de données hébergeant déjà ce formulaire avec ses boutons. Comme vous pouvez le voir, la décompression livre tout d'abord deux sous-dossiers abritant chacun quelques fichiers de type texte.
  • A la racine, double cliquer sur le fichier parcourir-fichiers.accdb pour l'ouvrir dans Access,
  • Puis, cliquer sur le bouton Activer le contenu du bandeau de sécurité,
Comme l'indique le volet de navigation sur la gauche de l'écran, cette base de données n'est constituée que d'un formulaire. Il est nommé fParcourir.
  • Double cliquer sur ce formulaire fParcourir pour l'exécuter,
Nous retrouvons bien les contrôles énoncés précédemment. Mais en plus de ceux-là, on note la présence d'une zone de texte multiligne sur la gauche et d'une zone de texte horizontale sur la partie supérieure du formulaire. Au même titre que le groupe de cases d'option, ces deux contrôles nous seront utiles pour le développement du prochain volet, afin de restituer les contenus des fichiers cliqués.

La procédure VBA et les variables
Nous l'avons dit, dans ce premier volet, nous souhaitons concentrer le développement sur le bouton matérialisé par l'icône d'un dossier. Son rôle est de récupérer tous les noms de fichiers dans le dossier choisi par l'utilisateur pour les restituer dans la zone de liste sur sa gauche.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans la liste des propositions, choisir le mode Création,
  • Sur la droite du formulaire en conception, cliquer sur le bouton à l'icône du dossier,
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
  • Puis, cliquer sur le petit bouton associé à son événement Au clic,
Code VBA au clic sur un bouton de formulaire Access

Une boîte de dialogue apparaît, offrant plusieurs possibilités.
  • Choisir le générateur de code et valider par le bouton Ok,
Ainsi, nous basculons dans l'éditeur VBA Access entre les bornes de la procédure parcourir_Click. parcourir est le nom du bouton. Click est son événement associé.

Avant de débuter l'implémentation du code, deux notions sont importantes à comprendre.

Détacher une liste déroulante sur formulaire Access de la table source

Tout d'abord, nous avons paramétré la propriété Origine source de la zone de liste sur l'attribut Liste valeurs et non sur l'attribut Table/Requête. C'est ainsi que nous allons pouvoir l'enrichir par le code VBA Access. Au passage, nous constatons qu'elle se nomme listeFichiers. C'est par ce nom que nous allons pouvoir la piloter par le code VBA.

De plus, une référence doit être ajoutée au projet pour piloter les boîtes de dialogue standards d'Office. Mais nous avions anticipé.
  • En haut de l'éditeur VBA Access, cliquer sur le menu Outils,
  • Dans les propositions, choisir l'option Références,
Librairie Office ajoutée au projet VBA Access pour pouvoir piloter les boîtes de dialogue standards

Une librairie doit absolument être cochée. Il s'agit de la librairie Microsoft Office 16.0 Object Library. Le numéro (16.0) dépend de votre version d'Office.
  • Cliquer sur le bouton Ok pour revenir sur la feuille de code VBA,
  • Entre les bornes de la procédure, ajouter les déclarations de variables suivantes :
Private Sub parcourir_Click()
Dim boite As FileDialog: Dim chemin As String
Dim objetFichier As Object: Dim leDossier As Object: Dim chaqueFichier AsObject


End Sub


Grâce à la référence ajoutée, nous déclarons un objet de type FileDialog pour piloter la boîte de dialogue standard qui permettra à l'utilisateur de désigner un dossier à analyser. Grâce au choix de l'utilisateur, nous pourrons mémoriser le chemin du dossier dans la variable chemin, que nous typons naturellement comme un texte (As String). L'objet objetFichier doit servir à instancier la classe lui permettant d'hériter des propriétés et méthodes pour manipuler les fichiers du disque. Dès lors, l'objet leDossier pourra l'exploiter pour pointer sur le dossier choisi. Et nous utiliserons la variable chaqueFichier dans une boucle For Each pour parcourir tous les fichiers du dossier ainsi désigné.

Initialiser les variables
Certaines variables sont d'ores et déjà prêtes à être initialisées. Et nous allons notamment en profiter pour instancier la classe des boîtes dedialogue.
  • A la suite du code VBA, ajouter les initialisations suivantes :
...
listeFichiers.RowSource = ""

Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then chemin = boite.SelectedItems(1)
...


Tout d'abord, nous exploitons la propriété RowSource de la zone de liste qui est nommée listeFichiers. Nous la vidons (="") avant chaque analyse d'un nouveau dossier. Puis, nous initialisons la variable objet boite (Set). Pour cela, nous exploitons la propriété FileDialog de l'objet Application. Grâce au paramètre msoFileDialogFolderPicker, elle permet désormais de piloter une boîte de dialogue permettant de désigner un dossier dans l'arborescence. Dès lors, nous exploitons sa méthode Show pour l'afficher. Et si l'utilisateur a bien désigné un dossier (SelectedItems(1)), forcément le premier de la liste puisque la propriété AllowMultiSelect n'a pas été autorisée, nous inscrivons ce chemin d'accès dans la variable chemin.

La classe des fichiers
Désormais, nous devons initialiser les objets objetFichier et leDossier pour instancier la classe des fichiers et dossiers et ainsi pouvoir pointer sur le dossier désigné par l'utilisateur.
  • A la suite du code VBA, ajouter les instructions suivantes :
...
If chemin <> "" Then
acces.Value = chemin
Set objetFichier = CreateObject("scripting.filesystemobject")
Set leDossier = objetFichier.getfolder(chemin)

End If
...


Nous émettons tout d'abord un test sur le contenu de la variable chemin. Il n'est pas question d'engager la suite du traitement si aucun dossier n'a été désigné et donc que son contenu est vide. Ensuite, grâce à la fonction VBA CreateObject et à l'argument scripting.filesystemobject, nous instancions la classe permettant de piloter les fichiers et dossiers du système. C'est ainsi que la variable objet objetFichier (Set) hérite des propriétés et méthodes pour les manipuler. Et pour preuve dans l'enchaînement, nous exploitons sa méthode héritée getfolder pour pointer sur le dossier (chemin) désigné par l'utilisateur. C'est désormais la variable leDossier (Set) qui hérite des propriétés et méthodes pour manipuler tous les fichiers de ce dossier.

Parcourir les fichiers du dossier
Cet objet leDossier offre maintenant une propriété toute particulière. Elle se nomme Files. Elle représente la collection des fichiers contenus dans le dossier désigné. Grâce à elle, nous allons pouvoir engager une boucle For Each pour les parcourir tous et les restituer.
  • A la suite du code de l'instruction conditionnelle, ajouter les lignes VBA suivantes :
...
For Each chaqueFichier In leDossier.Files
If (Right(chaqueFichier, 4) = ".txt") Then
listeFichiers.AddItem chaqueFichier.Name
End If
Next chaqueFichier
...


Nous engageons une boucle For Each grâce à la variable non typée chaqueFichier pour parcourir toute la collection des fichiers du dossier (leDossier.Files). Pour chaque fichier, nous testons son extension sur les quatre derniers caractères (Right(chaqueFichier,4)), grâce à la fonction Right. Ainsi, nous vérifions que le fichier à traiter est bien un fichier de type texte (= ".txt"). Si c'est le cas, nous exploitons la méthode AddItem de l'objet de zone de liste pour ajouter son nom (.Name) à la suite.

Détruire les variables objets
Pour finir et pour coder proprement, nous devons détruire les variables objets comme vous le savez. Ainsi, nous les éliminerons de la mémoire de l'ordinateur.
  • A la fin du code, après le End If, ajouter les instructions VBA suivantes :
...
Set boite = Nothing
Set objetFichier = Nothing
Set leDossier = Nothing
...


En réinitialisant (Set) ces objets à la valeur Nothing, nous les détruisons.

Récupérer les noms des fichiers
Il est temps de tester le bon fonctionnement du code.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • L'exécuter par exemple avec la touche F5 du clavier,
  • Cliquer sur le bouton à l'icône du dossier,
  • Dans l'arborescence, double cliquer sur l'un des deux sous dossiers téléchargés,
  • Puis, cliquer sur le bouton Ok de la boîte de dialogue,
Importer les noms des fichiers sur un formulaire Access en VBA

Comme vous pouvez l'apprécier, la liste de tous les fichiers est parfaitement reconstruite sur le formulaire Access. Dans le prochain volet, nous exploiterons ces travaux pour restituer le contenu de chacun, au clic de l'utilisateur sur un nom de fichier dans la zone de liste.

 
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