FileSystemObject aussi appelé FSO, fournit un modèle facile basé sur les objets pour accéder au système de fichiers d’un ordinateur. Vous devez simplement créer une instance de FileSystemObject dans VBA et ensuite vous pouvez générer des fichiers, lire des fichiers, supprimer des fichiers, itérer dans des dossiers et effectuer de nombreuses autres opérations sur le système de fichiers de votre ordinateur.
Le FileSystemObject est présent à l’intérieur de la bibliothèque d’exécution de Microsoft Scripting c’est-à-dire Scrrun.dll
. Cette DLL prend en charge la création et la manipulation des fichiers en utilisant l’objet TextStream et c’est la raison pour laquelle FSO ne prend pas en charge les opérations sur les fichiers binaires.
Table des matières
Utilisations de l’objet système de fichiers
FileSystemObject peut être utilisé pour de multiples tâches telles que :
- Créer, ouvrir, lire, écrire et supprimer des fichiers texte.
- Créer, modifier et supprimer des dossiers.
- Itérer des fichiers et des dossiers.
- Copier et déplacer des fichiers ou des dossiers.
- Vérifier si un emplacement (chemin de fichier) existe ou non.
Accès à FileSystemObject
Le FileSystemObject comprend plusieurs collections d’objets et chacune de ces collections d’objets contient des informations sur un aspect spécifique du système de fichiers. Ces collections sont :
Objet | Description |
---|---|
Drive | Cet objet vous permet d’obtenir des informations sur un lecteur attaché à votre système. Par exemple, il peut vous indiquer l’espace disponible dans un lecteur, son nom logique, etc. Notez que l’objet lecteur auquel nous faisons référence ici ne signifie pas nécessairement le disque dur, il peut s’agir d’un CD-ROM, d’un lecteur Flash, d’une mémoire vive, ou même d’un lecteur connecté logiquement via le réseau local. |
Dossier | Cet objet vous permet de créer, supprimer, déplacer ou interroger une hiérarchie de dossiers. |
Fichier | Cet objet vous permet de créer, supprimer, déplacer ou interroger un fichier. |
TextStream | L’objet TextStream vous permet de lire ou d’écrire des fichiers texte. |
So, de manière schématique, un FileSystemObject peut être représenté comme:
Veuillez noter que l’OSF communique avec la plupart des objets ci-dessus de manière indirecte. Il contient juste directement la collection d’objets pour les « Drives ». Chaque objet « Drive » dans la collection « Drives » contient une chaîne d’objets « Folder ». Et chaque objet « Folder » contient une collection « File ».
Pour rendre cela plus significatif, disons-le de cette façon : Un FileSystemObject contient trois méthodes principales pour récupérer (lire) des informations spécifiques sur les lecteurs, les dossiers ou les fichiers, ces méthodes sont GetDrive
, GetFolder
et GetFile
respectivement. Maintenant, disons que vous avez besoin de trouver la taille d’un fichier particulier, alors vous allez créer une instance de la méthode GetFile
et ensuite récupérer sa propriété size
.
Note : GetDrive
, GetFolder
et GetFile
ne sont pas les seules méthodes à l’intérieur de FSO, je les ai juste utilisées pour expliquer les choses. Dans la section ci-dessous, nous allons voir toutes les méthodes contenues à l’intérieur de FileSystemObject.
Méthodes FSO
Le tableau ci-dessous donne des détails sur les différentes méthodes de FileObjectSystem et les tâches qu’elles effectuent :
Méthode | Description |
---|---|
GetDrive, GetFolder, et GetFile | Ces méthodes sont utilisées pour récupérer des informations sur le lecteur, les dossiers et les fichiers respectivement. |
CreateFolder et CreateTextFile | Aide à la création de nouveaux dossiers ou fichiers. |
DeleteFile et DeleteFolder | Aide à la suppression de fichiers ou dossiers existants. |
CopyFile et CopyFolder | Ces méthodes aident à copier des fichiers ou des dossiers d’un emplacement à un autre. |
MoveFile et MoveFolder | Ces méthodes aident à déplacer des fichiers ou des dossiers d’un emplacement à un autre. |
Création d’un FileSystemObject en VBA : Dans cette section, nous traiterons de deux choses :
- Création d’une référence de la bibliothèque d’exécution de Microsoft Scripting c’est-à-dire Scrrun.dll
- Création d’un objet FSO.
Création d’une référence de la bibliothèque d’exécution de scripts de Microsoft
Pour créer une référence de la bibliothèque d’exécution de scripts de Microsoft, suivez les étapes suivantes :
- D’abord, ouvrez l’éditeur VBA en appuyant sur « Alt + F11 ».
- Puis, naviguez vers « Outils » > « Référence » comme indiqué ci-dessus.
- Cela ouvrira une fenêtre de référence. Ici, sélectionnez et vérifiez l’entrée « Microsoft Scripting Runtime » et cliquez sur « OK ».
- Maintenant, la référence à la bibliothèque Microsoft Scripting Runtime a été ajoutée.
Créer un objet FSO
Créer un objet FSO est simple, suivez les étapes ci-dessous pour le faire:
- Dans l’éditeur VBA, naviguez vers « Insérer » > « Module ».
- Maintenant dans la fenêtre du module tapez «
Public FSO As New FileSystemObject
« . - Cela créera un objet de FileSystemObject avec le nom FSO.
Après cela, vous pouvez simplement accéder aux méthodes du FileSystemObject en utilisant l’objet FSO.
6 Exemples pratiques d’accès à FileSystemObject
Passons maintenant à quelques exemples pratiques de FSO :
Exemple 1 : Utilisez FSO pour trouver l’espace libre total d’un lecteur.
Ci-après le code pour le faire:
'Création d'un FileSystemObject
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C :") 'Création du lecteur
objet Space = drv.FreeSpace
Space = Space / 1073741824 'Conversion des octets en GB
Space = WorksheetFunction.Round(Space, 2) 'Arrondi
MsgBox "C : a un espace libre = " & Space & " GB"
End Sub
Explication : Dans ce code, nous avons d’abord créé un objet lecteur en utilisant la méthode ‘GetDrive
‘, puis nous avons utilisé sa propriété ‘
FreeSpace
‘ pour récupérer l’espace libre.
Enfin, nous avons affiché l’espace libre en utilisant une boîte de message.
Notez qu’il y a deux propriétés pour récupérer l’espace libre d’un lecteur, à savoir drv.FreeSpace
et drv.AvailableSpace
.
Exemple 2 : Vérifiez si un dossier existe ou non. Si le dossier n’existe pas, alors créez ce dossier.
Ci-après le code:
'Création d'un FileSystemObject
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Enter the path of the folder to check :")
If Len(Fldr_name) > 0
Then If FSO.FolderExists(Fldr_name) = True Then
MsgBox "Le dossier existe !"
Else FSO.CreateFolder (Fldr_name)
MsgBox ("Dossier créé !")
End If Else MsgBox "Wrong Input"
End If
End Sub
Explication : Dans le code, nous avons utilisé une fonction InputBox pour obtenir le chemin du dossier de l’utilisateur. Après cela, en utilisant l’instruction If avec FolderExists
la méthode, nous avons vérifié si ce dossier est présent ou non. Si le dossier n’est pas présent alors nous créons ce dossier en utilisant la CreateFolder
méthode.
Note : la CreateFolder
méthode ne créera qu’un seul dossier à la fois. Ainsi, si vous lui fournissez un argument « C:\Folder1\Folder2\Folder3 », alors elle ne créera que le Dossier3 à l’intérieur du Dossier2. Mais si le Dossier2 n’existe pas alors il lancera un chemin non trouvé une erreur.
Exemple 3 : Écrire un code utilisant FSO pour copier un dossier d’un emplacement à un autre.
Ci-après le code pour accomplir ceci:
‘Créer un FileSystemObject Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder « C:\Source-Folder\ », « D:\Destination-Folder\ », True MsgBox « Copying Done ! » End Sub
Explication : Dans le code, nous avons utilisé la méthode CopyFolder
de FSO, cette méthode accepte trois arguments :
- Chemin de source
- Chemin de destination
- Un argument booléen pour spécifier Ecraser l’existant.
Exemple 4 : Utiliser FileSystemObject pour récupérer le répertoire Temp, le dossier Système et le dossier Windows.
Pour ce faire, nous pouvons utiliser le code suivant :
'Créer un FileSystemObject
Public FSO As New FileSystemObject
Sub GetFolderpath()
Dim Windows_Fldr As String
Dim System_Fldr As String
Dim Temp_Fldr As String
Windows_Fldr = FSO.GetSpecialFolder(0)
System_Fldr = FSO.GetSpecialFolder(1)
Temp_Fldr = FSO.GetSpecialFolder(2)
MsgBox ("Windows folder path = " & Windows_Fldr & vbNewLine & _ "System folder path = " & System_Fldr & vbNewLine & _ "Temp folder path = " & Temp_Fldr)
End Sub
Explication : Dans le code, nous avons utilisé la méthode GetSpecialFolder
méthode de FSO, cette méthode accepte un seul argument numérique c’est-à-dire 0-2.
-
FSO.GetSpecialFolder(0)
– Récupère le chemin du dossier Windows. -
FSO.GetSpecialFolder(1)
– Récupère le chemin du dossier Système. -
FSO.GetSpecialFolder(2)
– Récupère le chemin du dossier temporaire local.
Exemple 5 : créer un fichier texte, y écrire du contenu, puis lire le fichier, et enfin supprimer le fichier.
Voici le code pour accomplir ceci :
'Créer un FileSystemObject Public
FSO As New FileSystemObject
Sub CreateFile()
Dim txtstr As TextStream
Dim FileName As String
Dim FileContent As String
Dim File As File
FileName = "C:\TestDirectory\File.txt" 'Fichier à créer
'Créer un fichier et y écrire le contenu
FileContent = InputBox("Entrez le contenu du fichier")
If Len(FileContent) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Lecture du fichier que nous venons de créer
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' Enfin la suppression du fichier
File.Delete (True)
End If
End Sub
Explication : Ce code crée d’abord un fichier texte, y ajoute du contenu, puis le lit, l’affiche à l’aide d’une boîte de message et enfin supprime ce fichier.
Exemple 6 : Ecrivez un code VBA qui peut itérer tous les fichiers présents à l’intérieur d’un dossier et récupère également leur taille et leur date de modification.
Le code suivant peut accomplir cette tâche :
'Créer un FileSystemObject
Public FSO As New FileSystemObject
Sub ListFiles()
'Déclarer des variables
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Spécifier le chemin du dossier
strPath = "C :\Users\Aniee\Desktop\ExcelTrick\ "
'Créer l'objet de ce dossier
Set objFolder = FSO.GetFolder(strPath)
'Vérifier si le dossier est vide ou non
If objFolder.Files.Count = 0 Then
MsgBox "Aucun fichier n'a été trouvé...", vbExclamation
Exit Sub
End If
'Ajout des noms de colonnes pour A, B, et C
Cells(1, "A").Value = "File Name"
Cells(1, "B").Value = "Size"
Cells(1, "C").Value = "Modified Date/Time"
'Find the next available row
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
'Boucle sur chaque fichier du dossier
For Each objFile In objFolder.Files
'Liste le nom, la taille, et la date/heure du fichier actuel
Cells(NextRow, 1).Value = objFile.Name
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Trouver la ligne suivante NextRow = NextRow + 1
Next objFile
End Sub
.