Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Compter les fichiers d'un dossier
Dans le volet précédent, nous avons appris à copier ou à déplacer tous les fichiers d'un dossier par le
code VBA Access. Ici, nous proposons de sonder les propriétés de la classe que nous avons utilisée pour voir comment il est possible d'analyser un dossier et de retourner le
nombre d'éléments qu'il contient.
Base de données Access à télécharger
Pour la mise en place de cette astuce, nous suggérons d'agir à partir d'un
formulaire Access présentant un contrôle programmé permettant à l'utilisateur de désigner un
dossier, par le biais d'une
boîte de dialogue standard d'Office.
- Télécharger le fichier compressé compter-fichiers-dossier.rar en cliquant sur ce lien,
- Le décompresser dans le dossier de votre choix,
- Double cliquer sur le fichier résultant 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,
Nous découvrons le
formulaire du volet précédent. Nous l'avions utilisé pour apprendre à déplacer ou copier tous les fichiers d'un dossier. Et ce sont les deux boutons matérialisés par l'icône d'un dossier qui permettent de définir ces emplacements. Mais ici, vous notez la présence d'une zone supplémentaire. Il s'agit d'un rectangle grisé, placé en-dessous des autres contrôles. Il héberge une étiquette (Contrôle Label) non visible pour l'instant, car vide. Cette elle qui doit restituer le
nombre de fichiers que contient le
dossier désigné par l'utilisateur avec le premier bouton à l'icône 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 l'étiquette présente à l'intérieur du rectangle,
En consultant sa
feuille de propriétés, vous constatez que ce
contrôle Label porte l'intitulé
nbFichiers. C'est par ce nom que nous le piloterons par le
code VBA pour y inscrire l'information sur le
nombre de fichiers présents dans le premier des deux dossiers définis par l'utilisateur.
La déclaration des variables
C'est donc le code associé au premier bouton matérialisé par l'icône d'un dossier que nous devons faire évoluer. Et pour commencer nous avons besoin de deux
variables.
- Sur le formulaire en conception, cliquer sur le premier des deux boutons au dossier,
- Activer alors l'onglet Evénement de sa feuille de propriétés,
- Puis, cliquer sur le petit bouton associé à son événement nommé Au clic,
Comme un code lui est déjà associé, nous basculons directement dans l'
éditeur VBA Access entre les bornes de sa procédure :
depart_Click.
depart est en effet le nom de ce bouton.
- En entête de la procédure, ajouter les deux déclarations de variables suivantes :
Private Sub depart_Click()
Dim dossier As Object: Dim nomD As String
Set boite = Application.FileDialog(msoFileDialogFolderPicker)
...
La
variable dossier est typée comme un
objet au sens large (Object). Son rôle est d'instancier la classe permettant de prendre le contrôle des fichiers et des dossiers du système. Nous utiliserons la
variable nomD pour isoler le
nom du dossier à partir du chemin défini par l'utilisateur par le biais de la boîte de dialogue Office.
La classe des fichiers
Après la récupération du chemin d'accès par le biais de la boîte de dialogue, nous devons instancier cette fameuse classe pour décortiquer ce chemin.
- Après la récupération du chemin, ajouter les instructions VBA suivantes :
...
If boite.Show Then ch_depart = boite.SelectedItems(1)
If ch_depart <> "" Then
Set dossier = CreateObject("Scripting.FileSystemObject")
End If
Set boite = Nothing
...
Nous dégainons une
instruction conditionnelle pour tester le chemin d'accès (ch_depart <> ""). En effet, s'il n'est pas défini, rien ne sert de poursuivre. S'il est bien défini en revanche, nous instancions la
classe des fichiers et dossiers grâce à la
fonction VBA CreateObject pour initialiser (Set) notre
objet nommé
dossier. C'est ainsi qu'il hérite des propriétés et méthodes adéquates. Nous exploiterons l'une d'entre elles pour obtenir ce fameux renseignement sur le
nombre de fichiers que le dossier désigné héberge.
Isoler le nom du dossier
Avant cela, il est question de découper la chaîne du chemin d'accès afin d'isoler le nom du dossier. Pour cela, il suffit de prélever l'information placée après le dernier antislash (\). Nous allons donc exploiter la
fonction VBA de découpe, nommée
Mid.
- A la suite dans l'instruction conditionnelle, ajouter la ligne VBA suivante :
...
If ch_depart <> "" Then
Set dossier = CreateObject("Scripting.FileSystemObject")
nomD = Mid(ch_depart, InStrRev(ch_depart, "\") + 1)
End If
...
La
fonction InStrRev cherche une occurrence (l'antislash ici) en partant de la
fin de la chaîne. Donc, elle retourne ici la
position du dernier antislash que nous incrémentons d'une unité pour ne pas le considérer. Comme cette position est exploitée dans l'argument de la
position de départ de la
fonction de découpe Mid, nous ne conservons que ce qui se trouve
après le dernier antislash. Il s'agit bien sûr du
nom du dossier.
Nombre de fichiers dans le dossier
Enfin et pour synthétiser les informations dans l'étiquette sur le formulaire, il nous reste à trouver la méthode permettant de
compter les fichiers présents dans un dossier. Comme nous avons déjà instancié la classe pour ce faire, nous allons exploiter notre
variable objet.
- Toujours à la suite de l'instruction conditionnelle, ajouter la ligne VBA suivante :
...
If ch_depart <> "" Then
Set dossier = CreateObject("Scripting.FileSystemObject")
nomD = Mid(ch_depart, InStrRev(ch_depart, "\") + 1)
nbFichiers.Caption = "Le dossier " & nomD & " héberge " & dossier.GetFolder(ch_depart).Files.Count & " fichiers."
End If
...
Tout d'abord et grâce à la
variable nomD, nous assemblons le
nom du dossier choisi avec d'autres données. Dès lors, la
méthode GetFolder de l'
objet dossier permet de pointer sur un dossier dont le chemin lui est passé en paramètre. Puis, par voie hiérarchique, nous descendons jusqu'à sa
collection Files. Elle représente
tous les fichiers contenus
dans le dossier ainsi désigné. C'est ainsi qu'il ne nous reste plus qu'à appeler la
propriété enfant Count pour obtenir l'information sur le nombre que nous assemblons avec le reste de la chaîne.
- Enregistrer les modifications (CTRL + S) et revenir sur le formulaire,
- L'exécuter, par exemple avec la touche F5 du clavier,
- Cliquer sur le premier bouton à l'icône du dossier,
- Avec la boîte de dialogue, désigner un sous dossier et valider par Ok,
De retour sur le formulaire, vous constatez que le
nom du dossier choisi est parfaitement restitué avec en même temps l'information de synthèse sur le
nombre de fichiers qu'il héberge.