formateur informatique

Parcourir les sous-dossiers d'un dossier en VBA Access

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


Lister les sous dossiers d'un dossier

Nous savons déjà parcourir les fichiers d'un dossier par le code VBA Access, grâce aux astuces précédentes. Ici, nous allons plus loin. Nous allons apprendre à parcourir les-sous dossiers d'un dossier. L'objectif peut être intéressant s'il s'agit de récolter les informations détenues par tous les sous-dossiers d'un dossier parent, pour les archiver dans une table de la base de données.

Base de données Access à télécharger
Pour la mise en place de cette solution, nous suggérons d'appuyer l'étude sur une base de données Access hébergeant un formulaire permettant déjà de désigner un dossier à analyser, par le biais d'une boîte de dialogue standard d'Office.
  • Télécharger la base de données lister-sous-dossiers.accdb en cliquant sur ce lien,
  • Double cliquer sur le fichier réceptionné pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation, double cliquer sur le formulaire fParcourir pour l'exécuter,
  • A droite du formulaire, cliquer sur le bouton à l'icône d'un dossier,
  • Dans la boîte de dialogue, ouvrir un dossier contenant des sous-dossiers,
  • Puis cliquer sur Ok en bas de la boîte de dialogue pour valider ce choix,
Récupérer le chemin d-accès à un dossier en VBA Access

A ce stade et comme vous pouvez le voir, l'application se contente de restituer le chemin d'accès au dossier ainsi désigné, dans une zone de texte en haut du formulaire. Celle du dessous, plus grande, est prévue pour accueillir l'énumération des sous-dossiers à cet emplacement. Cette seconde zone de texte se nomme contenu. C'est par ce nom que nous la piloterons en VBA.

Le code VBA existant
Comme nous l'annoncions, il existe déjà un code VBA permettant d'offrir cette boîte de dialogue pour désigner un dossier. C'est lui, attaché au bouton à l'icône du dossier, que nous devons enrichir pour parcourir tous les sous-dossiers d'un dossier.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur le bouton à l'icône du dossier pour le sélectionner,
  • Activer alors l'onglet Evénement de sa feuille de propriétés,
  • Puis, cliquer sur le petit bouton associé à son événement Au clic,
Nous basculons ainsi dans l'éditeur VBA Access. Nous découvrons la procédure de code VBA attachée au bouton. Elle est nommée parcourir_Click.

Private Sub parcourir_Click()
Dim boite As FileDialog: Dim chemin As String
Dim chaqueDossier As String

Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then chemin = boite.SelectedItems(1) & "\"
contenu.Value = ""

If chemin <> "" Then
acces.Value = chemin

End If

Set boite = Nothing
End Sub


Nous instancions la classe des boîtes de dialogue et nous récupérons le chemin du dossier choisi, dans la zone de texte, placée en haut du formulaire. Elle se nomme acces. Mais attention, pour que cette classe puisse être instanciée, une référence absolument nécessaire a été ajoutée au projet.
  • En haut de l'éditeur, cliquer sur le menu Outils,
  • Dans les propositions, choisir la rubrique Références,
Référence à Microsoft Office dans projet VBA Access pour boîtes de dialogues standards

Comme vous le voyez, la case de la référence à Microsoft Office est effectivement cochée.
  • Cliquer sur le bouton Ok de la boîte de dialogue pour revenir dans l'éditeur,
Les éléments d'un dossier
En VBA, c'est la fonction Dir qui permet de récupérer la collection des éléments détenus par un dossier.
  • Après la récupération du chemin dans le If, ajouter la ligne VBA suivante :
...
If chemin <> "" Then
acces.Value = chemin
chaqueDossier = Dir(chemin & "*", vbDirectory)
End If
...


Aussi étonnant que cela puisse paraître, c'est dans une variable de type texte (chaqueDossier) que nous stockons les éléments retournés par la fonction Dir. En premier paramètre, nous lui passons le chemin d'accès au dossier suivi du symbole de l'astérisque pour désigner tout ce que le dossier contient. En second argument, nous précisons que nous sommes intéressés par les sous dossiers (vbDirectory).

Parcourir le dossier
Les éléments du dossier ont donc été stockés dans la variable de texte un peu comme s'ils avaient été rangés dans un tableau de variables. Et c'est ainsi que nous allons pouvoir passer en revue tous ses éléments.
  • A la suite du code dans l'instruction conditionnelle, créer la boucle suivante :
...
If chemin <> "" Then
acces.Value = chemin
chaqueDossier = Dir(chemin & "*", vbDirectory)
Do While chaqueDossier <> ""

chaqueDossier = Dir
Loop

End If
...


Tant qu'un élément existe (Do While chaqueDossier <> ""), nous poursuivons l'analyse du dossier. L'affectation en fin de boucle (chaqueDossier = Dir) permet de déplacer l'analyse sur l'élément suivant dans le dossier parent.

Existence du sous-dossier
A chaque passage dans cette boucle, nous devons nous assurer que l'élément existe. Pour cela, il suffit d'exploiter la fonction VBA GetAttr. Cette fonction renvoie une valeur entière indiquant les attributs d'un fichier, d'un répertoire ou d'un dossier. Si une valeur est retournée, nous saurons que l'élément existe. Dans le même temps, nous devons nous assurer que cet élément est bien un dossier et non un fichier.
  • Dans cette boucle, créer la nouvelle instruction conditionnelle suivante :
...
Do While chaqueDossier <> ""
If GetAttr(chemin & chaqueDossier) And vbDirectory Then

End If

chaqueDossier = Dir
Loop
...


Si un attribut est bien retourné et (And) qu'il s'agit bien d'un dossier (vbDirectory), nous savons que nous pouvons poursuivre l'analyse à la recherche des noms des sous dossiers composant le dossier parent désigné par l'utilisateur, par le biais de la boîte de dialogue.

Récupérer chaque sous-dossier
Il ne nous reste plus qu'à inscrire le nom de chaque sous-dossier passé en revue dans la zone de texte enrichi, nommée contenu.
  • Dans cette dernière instruction conditionnelle, émettre les nouvelles conditions suivantes :
...
If GetAttr(chemin & chaqueDossier) And vbDirectory Then
If (chaqueDossier <> "." And chaqueDossier <> "..") Then
contenu.Value = contenu.Value & chaqueDossier & "<br/>"
End If

End If
...


S'il ne s'agit pas du dossier en cours (.) ou encore de la racine (..), alors nous inscrivons le nom du sous dossier à la suite des autres dans la zone de texte enrichi nommée contenu. La balise Html <br /> permet d'imposer un retour à la ligne entre chaque nom de sous dossier.

Récolter les sous-dossiers
Nous pouvons maintenant tester ce code VBA.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
  • L'exécuter par exemple avec la touche F5 du clavier,
  • Cliquer sur le bouton à l'icône d'un dossier,
  • Entrer dans un dossier contenant des sous-dossiers,
  • Puis, valider par le bouton Ok de la boîte de dialogue,
Lister les sous-dossiers du dossier parent en VBA Access

Comme vous pouvez l'apprécier, ce sont bien tous les sous-dossiers du dossier désigné par l'utilisateur qui sont restitués dans la zone de texte enrichi, sur le formulaire Access.

 
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