Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Parcourir les fichiers d'un dossier
Dans ce nouveau chapitre, nous allons démontrer comment
parcourir tous les fichiers d'un dossier désigné par l'utilisateur, grâce au
code VBA Excel .
Sur l'exemple illustré par la capture, l'utilisateur clique tout d'abord sur un bouton placé sur la droite du tableau. Dans la boîte de dialogue qui suit, il désigne et valide
un dossier du disque dur . De retour sur la
feuille Excel , il récolte
tous les noms des fichiers hébergés par ce dossier avec quelques détails comme les
extensions , les
tailles et
dates de dernières modifications.
Classeur Excel à télécharger
Pour développer cette solution, nous proposons de récupérer un
classeur Excel offrant notamment ce
bouton de commande .
Nous découvrons donc la grille d'importation accompagnée d'un bouton à l'icône d'un dossier sur la droite de la feuille.
La procédure et ses variables
Il existe déjà une procédure attachée au bouton mais elle est vide pour l'instant.
Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel ,
C'est ainsi que vous découvrez la présence de la
procédure dossier_MouseUp . Son code se déclenchera juste après le clic de l'utilisateur sur ce bouton à l'icône du dossier.
Dans les bornes de cette procédure, ajouter les déclarations de variables suivantes :
...
Dim boite As FileDialog: Dim chemin As String: Dim ligne As Integer: Dim leFichier As String
Dim objetFichier As Object: Dim leDossier As Object: Dim chaqueFichier As Object
Range("B6:F1000").Value = ""
...
Nous déclarons différents types de variables :
boite pour instancier la
classe des boîtes de dialogue standard ,
chemin pour reconstituer le
chemin d'accès au dossier désigné,
leFichier pour construire le
chemin d'accès complet jusqu'au fichier en cours d'analyse. Les trois dernières variables sont typées comme des
objets . Après instanciation d'une certaine classe, elles permettront de manipuler les
fichiers et les dossiers du disque .
Enfin, nous réinitialisons la plage d'extraction sur la feuille (Range("B6:F1000").Value = "") pour la purger de la précédente potentielle importation, avant de procéder à la nouvelle.
La classe des boîtes de dialogue
Maintenant que les variables sont déclarées, nous allons pouvoir les initialiser en commençant par l'instanciation de la classe des boîtes de dialogue standard. C'est en effet par le biais de l'une d'entre elles que l'utilisateur doit désigner un dossier à analyser.
A la suite du code, ajouter les instructions VBA suivantes :
...
Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then chemin = boite.SelectedItems(1)
If chemin <> "" Then
ligne = 6
[B3].Value = "Chemin : " & chemin
End If
...
Nous initialisons notre
objet boite sur la
classe des boîtes de dialogues (Set boite). Il hérite ainsi de ses propriétés et méthodes. Et justement, nous exploitons deux d'entre elles dans l'enchaînement. La
méthode Show permet d'afficher la boîte de dialogue. La
propriété SelectedItems renvoie la collection des dossiers désignés. Par défaut, le dossier ouvert est situé sur le premier emplacement (1) dans cette collection. Nous stockons son adresse dans la
variable chemin .
Avant de poursuivre, nous nous assurons qu'un dossier a bien été désigné (chemin <> ""). Nous calons l'indice de ligne sur la sixième, la première ligne à partir de laquelle doit débuter l'importation. Puis, nous restituons le
chemin d'accès en cours d'analyse, dans la
cellule B3 fusionnée , en haut de la feuille.
Manipuler les fichiers
Puisque nous connaissons désormais l'adresse du dossier à analyser, il est temps d'instancier la classe permettant de manipuler les fichiers qu'il contient.
A la suite du code de l'instruction conditionnelle, ajouter les instructions VBA suivantes :
...
Set objetFichier = CreateObject("scripting.filesystemobject")
Set leDossier = objetFichier.getfolder(chemin)
For Each chaqueFichier In leDossier.Files
leFichier = chemin & "\" & chaqueFichier.Name
Next chaqueFichier
...
Nous instancions la
classe des fichiers pour initialiser l'
objet objetFichier (Set objetFichier). Dès lors, grâce à sa
méthode héritée getfolder , nous initialisons la
variable leDossier (Set leDossier), pour représenter le
dossier choisi par l'utilisateur . C'est ainsi que nous pouvons enclencher une
boucle destinée Ã
parcourir chaque fichier (For Each chaqueFichier) dans (In) la
collection des fichiers hébergés par ce dossier (leDossier.Files). A chaque passage dans cette boucle, nous reconstruisons le
chemin d'accès au fichier en cours d'analyse (chemin & "\" & chaqueFichier.Name) et nous le stockons dans la
variable leFichier .
Les propriétés des fichiers
Il existe des
fonctions VBA bien spécifiques pour récolter les
attributs des fichiers parcourus. Et nous proposons de les exploiter avant même de récupérer le nom de chaque fichier. Nous allons comprendre pourquoi.
A la suite du code de la boucle, ajouter les instructions VBA suivantes :
...
Cells(ligne, 4).Value = objetFichier.GetExtensionName(leFichier)
Cells(ligne, 5).Value = Round(FileLen(leFichier) / 1000, 0) & "Ko"
Cells(ligne, 6).Value = FileDateTime(leFichier)
ligne = ligne + 1
...
Grâce à la
méthode héritée GetExtensionName de notre
objet objetFichier , nous récupérons l'
extension du fichier en cours d'analyse que nous inscrivons en quatrième colonne de la feuille pour la ligne en cours (Cells(ligne, 4)). C'est ensuite la
fonction FileLen qui renseigne sur la
taille en octets du fichier qui lui est passé en paramètre. Nous transformons cette taille en
Kilos Octets (/ 1000), sans décimales grâce à la
fonction Round . Nous l'inscrivons en cinquième colonne du tableau pour la ligne en cours. Enfin, la
fonction FileDateTime retourne la
date de dernière modification pour le fichier qui lui est passé en paramètre. Nous l'inscrivons en sixième et dernière colonne du tableau pour la ligne en cours. Bien sûr, à chaque passage dans cette boucle, nous n'oublions pas d'
incrémenter la variable ligne (ligne = ligne + 1), pour poursuivre l'écriture sur les lignes du dessous, dans le tableau d'importation.
Récupérer le nom du fichier
Ensuite et nous le savons, la
propriété Name de l'
objet chaqueFichier renseigne sur le
nom du fichier en cours d'analyse mais avec son
extension . Nous proposons de supprimer cette dernière grâce à la
fonction Replace en utilisant l'information désormais détenue par la cellule en quatrième colonne (
Cells(ligne, 4).Value ).
Au milieu des instructions précédentes, ajouter l'instruction VBA suivante :
...
Cells(ligne, 4).Value = objetFichier.GetExtensionName(leFichier)
Cells(ligne, 2).Value = Replace(chaqueFichier.Name, "." & Cells(ligne, 4).Value, "")
Cells(ligne, 5).Value = Round(FileLen(leFichier) / 1000, 0) & "Ko"
Cells(ligne, 6).Value = FileDateTime(leFichier)
ligne = ligne + 1
...
Sur le nom du fichier en cours (chaqueFichier.Name), nous remplaçons son extension ("." & Cells(ligne, 4).Value) par une chaîne vide (""), pour la supprimer.
Détruire les objets
Pour terminer, une fois l'analyse des fichiers complétée, nous devons
détruire les variables objets afin de soulager la mémoire de l'ordinateur.
A la toute fin du code, ajouter les lignes VBA suivantes :
...
End If
Set boite = Nothing
Set objetFichier = Nothing
Set leDossier = Nothing
Set chaqueFichier = Nothing
End Sub
...
Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
Cliquer sur le bouton à l'icône du dossier,
Ouvrir un dossier et cliquer sur le bouton Ok pour revenir sur la feuille,
Comme vous pouvez l'apprécier, tous les noms des fichiers du dossier sont aussitôt rapatriés sur la feuille Excel, avec leurs propriétés.