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