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.Filesboucle à 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 !