formateur informatique

Listing des fichiers d'un dossier en VBA Word

Accueil  >  Bureautique  >  Word  >  Word VBA  >  Listing des fichiers d'un dossier en VBA Word
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 :


Parcourir les fichiers d'un dossier

Avec cette nouvelle astuce VBA Word, nous allons voir comment dresser le listing des fichiers d'un dossier, avec attributs restitués sur le document actif. L'objectif est d'apprendre à parcourir tous les éléments contenus dans un dossier désigné par l'utilisateur, par le biais d'une boîte de dialogue Office. Et c'est ainsi que dans un prochain volet, nous mettrons en pratique ces acquis pour réaliser la conversion de tous les fichiers PDF d'un dossier en fichiers Word modifiables.

Téléchargement des sources
Pour la mise en place de cette nouvelle astuce, un document vierge fera parfaitement l'affaire. Nous proposons néanmoins de récupérer quelques fichiers PDF à placer dans un dossier à scruter. Nous réceptionnons douze fichiers PDF. Il s'agit d'anciens supports de formation à Excel. C'est pour cela qu'il sera intéressant de savoir les convertir en masse au format Word dans le volet suivant. Nous bénéficierons ainsi de versions modifiables pour mettre à jour ces supports. Mais en attendant, nous devons commencer par apprendre à parcourir un dossier à la recherche de ses fichiers.

Procédure et variables
Pour initialiser le traitement, nous devons commencer par créer les bornes de la procédure de code. Et dans les bornes de cette procédure, nous devons déclarer les variables nécessaires. Nous avons en effet besoin d'une boîte de dialogue et de variables pour manipuler les fichiers.
  • Démarrer Word et créer un nouveau document vierge,
  • Puis, l'enregistrer tout de suite au format docm,
En effet, nous choisissons de coder la macro à l'intérieur de ce nouveau document. Il doit donc être en mesure de prendre en charge les instructions VBA.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Word,
  • En haut de l'éditeur VBA, cliquer sur le menu Insertion,
  • Dans les propositions, choisir l'option Module,
C'est ainsi qu'un nouveau module, nommé Module1, apparaît dans l'arborescence de l'explorateur de projet sur la gauche de l'écran. Sa feuille de code s'affiche au centre de l'écran. Elle est vide pour l'instant.
  • Dans cette feuille de code, créer la procédure listerFichiers comme suit :
Sub listerFichiers()

End Sub
  • Dès lors, ajouter les déclarations de variables suivantes :
Sub listerFichiers()
Dim boite As FileDialog: Dim chemin As String
Dim objetFichier As Object: Dim leDossier As Object: Dim chaqueFichier AsObject


End Sub


Nous typons la variable boite comme un objet de type FileDialog pour piloter l'une des boîtes standard d'Office. Bien sûr, par le biais de cet objet, nous aurons besoin d'instancier la classe nécessaire pour hériter des propriétés et méthodes utiles. Nous typons la variable chemin comme un texte (String). Son rôle est de mémoriser le chemin d'accès au dossier que désignera l'utilisateur par le biais de la boîte de dialogue. Enfin, nous typons les trois dernières variables : objetFichier, leDossier et chaqueFichier comme des objets (Object) au sens large. La première doit instancier la classe permettant de manipuler les fichiers du système. Grâce à ses propriétés héritées, la seconde deviendra un objet représentant le dossier pointé. La dernière servira à parcourir tous les fichiers dans ce dossier.

Réinitialiser le document
Ensuite, la macro peut être amenée à être exécutée plusieurs fois de suite. En conséquence, entre deux importations, nous souhaitons purger les anciens listings pour laisser place aux nouveaux.
  • A la suite du code de la procédure, ajouter les deux instructions VBA suivantes :
...
Selection.WholeStory
Selection.Delete
...


La méthode WholeStory de l'objet VBA Selection permet de sélectionner l'intégralité du document. Dans l'enchaînement, la méthode Delete de ce même objet permet d'effacer le contenu sélectionné, soit tout le contenu du document ici.

Boîte de dialogue des dossiers
Maintenant, nous devons afficher la boîte de dialogue permettant à l'utilisateur de désigner un dossier à parcourir. Et naturellement, nous devons mémoriser le chemin d'accès à ce dossier pour les traitements à suivre.
  • Toujours à la suite du code, ajouter maintenant les deux instructions VBA suivantes :
...
Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then chemin = boite.SelectedItems(1)
...


Grâce à la collection FileDialog de l'objet VBA Application, nous instancions (Set) la classe des boîtes de dialogues. Avec le paramètre msoFileDialogFolderPicker proposé par intelliSense, l'objet boite hérite des propriétés et méthodes pour piloter cette boîte de dialogue. C'est la raison pour laquelle, nous l'affichons ensuite à l'écran (méthode Show) dans une instruction conditionnelle. C'est seulement si l'utilisateur a pu s'en servir qu'il a été susceptible de désigner un dossier. La méthode SelectedItems de cette classe retourne la collection des dossiers potentiellement sélectionnés. Ici, nous n'avons pas autorisé la multi sélection. Nous savons donc que le chemin est stocké dans la première rangée de cette collection (1). La suite du traitement ne peut être entreprise que si un chemin d'accès est bien stocké dans la variable dédiée. Effectivement, l'utilisateur peut cliquer sur le bouton Annuler pour abandonner la démarche.
  • A la suite du code VBA, créer l'instruction conditionnelle suivante :
...
If chemin <> "" Then

End If
...


La suite des actions n'est donc autorisée qu'à partir du moment où la variable chemin n'est pas vide (<>""), donc à partir du moment où un chemin d'accès à traiter est bien défini.

La classe des fichiers
Poursuivons ! Le dossier à traiter est certes connu. Mais pour manipuler les fichiers qu'il contient, encore faut-il instancier la classe donnant les propriétés et méthodes permettant de les dompter.
  • Dans les bornes de l'instruction conditionnelle, ajouter les deux lignes VBA suivantes :
...
Set objetFichier = CreateObject("scripting.filesystemobject")
Set leDossier = objetFichier.getfolder(chemin)
...


Nous l'avons déjà appris, c'est la fonction VBACreateObject qui permet de désigner certaines librairies en référence. Avec le paramètre scripting.filesystemobject, la variable objetFichier hérite de ses capacités à manipuler les fichiers du système. Dès lors, elle peut exploiter la méthode getfolder pour récupérer le dossier désigné par la variable chemin passée en paramètre. Et c'est ainsi que l'objet leDossier représente ce répertoire.

Parcourir les fichiers du dossier
C'est grâce à cette variable objet que nous sommes désormais en capacité de passer en revue tous les fichiers contenus dans le dossier qu'elle représente. Pour cela et comme nous le savons, une boucle for each est tout à fait dédiée.
  • A la suite du code, toujours dans le If, créer la boucle For Each comme suit :
...
For Each chaqueFichier In leDossier.Files
If (Right(chaqueFichier, 4) = ".pdf") Then

End If
Next chaqueFichier
...


La propriété Files de l'objet leDossier renvoie la collection des fichiers contenus dans l'emplacement désigné. Grâce à notre variable objet chaqueFichier embarquée dans la boucle For Each, nous les parcourons tous tour à tour. Mais à chaque passage, ici et spécifiquement pour les besoins du volet qui suivra, nous nous assurons de bien traiter des fichiers PDF. Pour cela, nous exploitons la fonction VBA Right qui permet de vérifier que les quatre derniers caractères du nom de fichier correspondent bien à l'extension d'un document PDF.

Les attributs des fichiers
Pour poursuivre, la classe que nous avons instanciée offre des propriétés pour connaître par exemple le nom du fichier ou encore sa taille en Octets par exemple. Il est question de dresser un listing sur le document actif. L'objet VBA Selection va donc être massivement sollicité. Et pour cela nous l'avons appris, une technique permet d'optimiser et d'organiser le code dans un bloc With.
  • Dans l'instruction conditionnelle de la boucle For Each, créer le bloc With suivant :
...
With Selection

End With
...


C'est en effet l'objet Selection qui va nous permettre d'insérer les informations les unes à la suite des autres avec des possibilités de mise en forme à la volée. Grâce à ce bloc, nous n'avons plus qu'à lister les propriétés à affecter pour construire l'énumération et donner vie au Listing. La variable chaqueFichier désigne à chaque tour l'objet du fichier en cours d'analyse par la boucle. Et cet objet offre des propriétés permettant d'accéder à ses attributs comme son nom pour commencer.
  • Dans l'instruction With, ajouter les lignes VBA suivantes :
...
.Font.Bold = True
.TypeText chaqueFichier.Name & " :" & Chr(11)
.Font.Bold = False
...


Avant d'inscrire quelque qu'information que ce soit, nous prenons soin de passer la trame en gras, grâce à la propriété Bold de l'objet Selection. Ensuite, nous exploitons la méthode TypeText de ce même objet pour inscrire le nom du fichier en cours d'analyse, grâce à la propriété Name de la classe instanciée. Puis, nous ajoutons par concaténation un saut de ligne, grâce à la fonction Chr avec la valeur 11 pour simuler l'action au clavier. Dès lors, nous prenons soin d'enlever l'attribut gras. En effet, sous ce titre représentant le nom du fichier, nous souhaitons lister ses attributs en toute simplicité.

Avant de poursuivre, nous pouvons réaliser un premier test à titre de vérification.
  • Enregistrer les modifications (CTRL + S) puis exécuter le code (F5),
  • Dans la boîte de dialogue programmée, désigner le dossier du téléchargement,
  • Valider par Ok et basculer alors sur le document Word (ALT + Tab),
Comme vous pouvez l'apprécier, les noms de fichiers du dossier sont tous énumérés en gras, les uns en dessous des autres. Pour récupérer leurs attributs comme la taille, tout est une question de propriétés de cette classe instanciée.
  • Revenir dans l'éditeur VBA Word (ALT + F11),
  • A la suite dans le bloc With, ajouter les instructions VBA suivantes :
...
.TypeText "Taille : " & Round(chaqueFichier.Size / 1000, 0) & " Ko" & Chr(11)
.TypeText "Type : " & chaqueFichier.Type & Chr(11)
.TypeText "Création : " & chaqueFichier.DateCreated & Chr(11)
.TypeText "Modification : " & chaqueFichier.DateLastModified & Chr(13)
...


Très simplement, nous exploitons les propriétés Size, Type, DateCreated et DateLastModified pour connaître respectivement la taille du fichier, son extension et les dates de création ainsi que de modification. Notez néanmoins l'emploi de la fonction Round pour transformer les Octets divisés par Mille en Kilos Octets. Cette fonction permet d'arrondir le résultat. Ici en l'occurrence, avec le chiffre zéro en second paramètre, nous indiquons que nous souhaitons des tailles en Kilos Octets arrondies à l'unité.

Listing des fichiers sur le document
Il est temps de contempler le résultat.
  • Enregistrer les modifications (CTRL + S) et exécuter le code (F5),
  • Dans la boîte de dialogue qui s'invite, désigner le dossier de téléchargement des PDF,
  • Puis, cliquer sur le bouton Ok et revenir sur le document Word (ALT + Tab),
Le point d'insertion est placé à la toute fin du document, mais comme vous pouvez le constater en remontant, ce sont bien les fichiers et leurs attributs qui sont listés dans une présentation tout à fait acceptable.

Lister les fichiers dans un dossier avec leurs attributs en VBA Word

Maintenant que nous savons parcourir les fichiers d'un dossier et que nous savons convertir un fichier PDF en version Word modifiable, grâce à l'astuce VBA Word précédente, nous verrons dans le prochain volet comment organiser des conversions de masse automatisées de ces fichiers avec un code unique.

 
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