Parcourir tous les fichiers dans un dossier, Excel VBA
Voici une explication détaillée sur la façon de parcourir tous les fichiers dans un dossier en utilisant VBA (Visual Basic for Applications) dans Excel. Ce code vous permettra d’accéder à chaque fichier d’un dossier et d’effectuer des opérations dessus.
Problème :
Vous souhaitez parcourir tous les fichiers dans un dossier en utilisant VBA dans Excel. Cela peut être utile pour des tâches telles que traiter des données provenant de plusieurs fichiers, extraire des informations ou effectuer des opérations par lots sur un ensemble de fichiers.
Solution : Parcourir les fichiers dans un dossier
Voici le code complet avec une explication détaillée :
Sub LoopThroughFilesInFolder() Dim folderPath As String Dim fileName As String Dim folder As Object Dim file As Object Dim fso As Object Dim ws As Worksheet Dim lastRow As Long ' Demande à l'utilisateur de sélectionner un dossier folderPath = GetFolderPath() If folderPath = "" Then Exit Sub ' Si aucun dossier n'est sélectionné, quitte la procédure ' Créer un objet FileSystemObject (FSO) pour manipuler les fichiers Set fso = CreateObject("Scripting.FileSystemObject") ' Vérifie si le dossier existe If Not fso.FolderExists(folderPath) Then MsgBox "Le dossier n'existe pas !" Exit Sub End If ' Récupère l'objet du dossier Set folder = fso.GetFolder(folderPath) ' Créer une nouvelle feuille de calcul pour stocker les résultats (optionnel) Set ws = ThisWorkbook.Worksheets.Add ws.Name = "Données des fichiers" ' Écrire les en-têtes dans la feuille de calcul ws.Cells(1, 1).Value = "Nom du fichier" ws.Cells(1, 2).Value = "Taille du fichier (Ko)" ws.Cells(1, 3).Value = "Dernière modification" ' Initialiser la ligne pour écrire les données lastRow = 2 ' Boucler à travers chaque fichier dans le dossier For Each file In folder.Files ' Récupérer le nom du fichier fileName = file.Name ' Récupérer la taille du fichier (en Ko) fileSize = file.Size / 1024 ' Convertir la taille en Ko ' Récupérer la date de dernière modification du fichier lastModified = file.DateLastModified ' Écrire les informations du fichier dans la feuille de calcul ws.Cells(lastRow, 1).Value = fileName ws.Cells(lastRow, 2).Value = fileSize ws.Cells(lastRow, 3).Value = lastModified ' Passer à la ligne suivante lastRow = lastRow + 1 Next file ' Notifier l'utilisateur que l'opération est terminée MsgBox "Fichiers traités avec succès !" End Sub ' Fonction pour demander à l'utilisateur de sélectionner un dossier Function GetFolderPath() As String Dim folderPicker As FileDialog Set folderPicker = Application.FileDialog(msoFileDialogFolderPicker) folderPicker.Title = "Sélectionner un dossier" ' Afficher la boîte de dialogue et récupérer le chemin du dossier If folderPicker.Show = -1 Then GetFolderPath = folderPicker.SelectedItems(1) Else GetFolderPath = "" End If End Function
Explication du code :
1. Obtenir le chemin du dossier (fonction GetFolderPath) :
- Cette fonction ouvre une boîte de dialogue permettant à l’utilisateur de sélectionner un dossier. Si l’utilisateur sélectionne un dossier, le chemin est retourné, sinon une chaîne vide est retournée.
FileDialog(msoFileDialogFolderPicker)
crée une boîte de dialogue qui permet à l’utilisateur de choisir un dossier.- La méthode Show ouvre la boîte de dialogue et, si l’utilisateur sélectionne un dossier (retourne -1), le chemin est retourné.
2. Création de l’objet FileSystemObject (FSO) :
CreateObject("Scripting.FileSystemObject")
crée une instance de l’objet FileSystemObject. Cet objet permet de manipuler facilement les fichiers et les dossiers.- Nous l’utilisons pour obtenir des informations sur les fichiers dans le dossier (comme la taille, le nom et la date de la dernière modification).
3. Vérification de l’existence du dossier :
fso.FolderExists(folderPath)
vérifie si le dossier spécifié existe. Si ce n’est pas le cas, une boîte de message s’affiche et la procédure s’arrête.
4. Accès aux fichiers dans le dossier :
-
Set folder = fso.GetFolder(folderPath)
récupère l’objet du dossier.For Each file In folder.Files
boucle à travers chaque fichier du dossier.- Pour chaque fichier, le code récupère :
- Le nom du fichier (file.Name) : Le nom du fichier.
- La taille du fichier (file.Size / 1024) : La taille du fichier en Ko (en bytes initialement, donc divisé par 1024).
- La date de dernière modification (file.DateLastModified) : La date et l’heure de la dernière modification du fichier.
5. Écriture des données dans la feuille de calcul :
- Le code écrit le nom du fichier, la taille et la date de la dernière modification dans une nouvelle feuille de calcul.
ws.Cells(lastRow, 1).Value
écrit les données dans la cellule correspondante de la feuille. La variable lastRow est incrémentée après chaque fichier pour que les données s’écrivent sur la ligne suivante.
6. Création d’une nouvelle feuille de calcul :
- Une nouvelle feuille est ajoutée à l’aide de
Set ws = ThisWorkbook.Worksheets.Add
. Cette feuille contiendra les informations sur les fichiers. - Les en-têtes « Nom du fichier », « Taille du fichier (Ko) » et « Dernière modification » sont écrits dans la première ligne de la feuille.
7. Message de fin :
- Une fois la boucle terminée, le code affiche une boîte de message pour informer l’utilisateur que les fichiers ont été traités avec succès.
Utilisations pratiques :
- Opérations par lots sur des fichiers : Vous pouvez modifier ce script pour effectuer des opérations sur chaque fichier, par exemple, les ouvrir, extraire des données ou les copier.
- Audits de fichiers : Utilisez ce code pour lister les fichiers, leurs tailles et leurs dates de dernière modification à des fins d’audit.
- Collecte de données : Rassemblez des métadonnées sur les fichiers dans un répertoire et utilisez-les pour l’analyse ou les rapports.
Modification du code :
-
- Effectuer des opérations sur les fichiers : Vous pouvez modifier la boucle pour effectuer des opérations spécifiques sur chaque fichier, comme l’ouvrir, extraire des données ou copier le fichier.
- Filtrer les fichiers : Pour ne traiter que certains types de fichiers (par exemple, uniquement les fichiers .xls), vous pouvez ajouter une condition dans la boucle, comme ceci :
If fso.GetExtensionName(file.Name) = "xls" Then ' Effectuer des actions sur les fichiers Excel uniquement End If
Ce code vous donne une base solide pour commencer à parcourir les fichiers dans un dossier avec VBA !