formateur informatique

Noms des fichiers d'un dossier avec leurs propriétés

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Noms des fichiers d'un dossier avec leurs propriétés
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    Vidos astuces Instagram
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.

Parcourir les fichiers du dossier avec leurs attributs en 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,
Récolter les fichiers d-un dossier sur la feuille Excel par le code VBA

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.

 
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