Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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.
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 ,
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.
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 ,
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,
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.