FileSystemObject en VBA – Expliqué

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 CreateFoldermé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

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.