Quel est FileSystemObject (FSO) et comment l’utiliser dans VBA Excel?
Le FileSystemObject est utilisé pour travailler avec des dossiers et des fichiers connectés au système. Nous pouvons l’utiliser pour accéder aux fichiers, aux dossiers, aux lecteurs et aux flux de texte. Il peut non seulement accéder aux fichiers, dossiers et fichiers texte, mais aussi créer. Ces opérations ne se limitent pas au disque dur du système mais à tout périphérique connecté au fichier. Cela signifie que vous pouvez accéder à des clés USB, des CD-ROM ou des lecteurs réseau virtuellement connectés.
Voici les opérations que nous pouvons faire en utilisant FileSystemObject dans VBA:
Pour créer, ouvrir, lire, écrire et supprimer des fichiers texte.
Pour ajouter, modifier et supprimer des dossiers.
Pour parcourir des fichiers et des dossiers.
Pour copier et déplacer des fichiers ou des dossiers vers d’autres endroits.
Pour vérifier si un fichier ou un dossier existe ou non à l’emplacement
Comment accéder à FileSystemObject dans VBA?
L’objet du système de fichiers fait partie de Microsoft Scripting Runtime Library.
Pour accéder à un FileSystemObject, nous devons nous connecter ou ajouter une référence à la bibliothèque Microsoft Scripting Runtime ou Scrrun.dll *.
Remarque: Le FileSystemObject ne prend pas en charge le fonctionnement des fichiers binaires car Scrrun.dll prend en charge la création et la manipulation de fichiers à l’aide de TextStream Object.
Il existe deux méthodes pour créer FileSystemObject dans VBA:
1: Création d’un objet FSO à l’aide de la méthode CreateObject:
En utilisant cette méthode, nous déclarons d’abord un type d’objet variable. Définissez ensuite la référence de l’objet FSO sur cette variable en utilisant CreateObject:
Sub LearnFso() 'Creating the object variable Dim fso As Object 'Create the FileSystemObject using Create Object Method Set fso = CreateObject("Scripting.FileSystemObject") Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub
Cette méthode est dynamique et transférable. Cela signifie que si vous partagez le code avec d’autres systèmes, ce code fonctionnera parfaitement. La version de Microsoft Runtime Scripting que vous possédez n’a pas d’importance.
Le seul inconvénient est que vous ne pourrez pas voir l’intellisense fourni par VBA. Vous devrez compter sur vos connaissances pour utiliser toutes les propriétés et méthodes de FileSystemObject.
2: Création d’un objet FSO en ajoutant une référence à Microsoft Runtime Scripting Vous pouvez créer directement un FileSystemObject dans VBA à l’aide du mot-clé new.
Pour cela, vous devrez ajouter une référence au dernier Microsoft Scripting Runtime de votre système.
Pour ajouter la référence, accédez à l’option références dans le menu des outils.
Ici, recherchez la DLL Microsoft Scripting Runtime. Vérifiez-le et cliquez sur OK.
Vous êtes maintenant prêt à créer et à utiliser l’objet FSO.
Sub LearnFso() Dim fso as new FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub
Ou
Sub LearnFso() Dim fso as FileSystemObject Set fso = New FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub
Les deux fonctionneront très bien.
Un avantage majeur de cette méthode est que vous pourrez voir l’intelligence de VBA. VBA vous montrera toutes les propriétés et méthodes de l’objet fso. Il indiquera également quel type de variables il acceptera et quel type de valeur il retournera.
Si vous partagez ce code avec d’autres systèmes, vous devrez leur dire d’ajouter une référence à Scripting Runtime à partir d’outils, sinon ils recevront une erreur de compilation indiquant que le type défini par l’utilisateur n’est pas défini. C’est donc comme importer d’autres langages de programmation.
Notez que FSO n’est pas un mot-clé. Vous pouvez l’utiliser comme nom de variable. C’est juste une convention pour nommer l’objet du système de fichiers comme fso. C’est pourquoi certaines personnes confondent ce mot-clé. Les deux méthodes de création d’objets FSO ont leurs avantages et inconvénients que j’ai mentionnés tout en les expliquant. Utilisez donc selon vos besoins. Dans cet article, j’utiliserai la deuxième méthode de création de FileSystemObject.
Maintenant que nous savons comment créer un FileSystemObject dans VBA, utilisons ces connaissances pour effectuer des tâches significatives. Je veux dire, passons aux exemples.
Exemple 1: Obtenir tout le sous-dossier dans un dossier spécifié Le premier exemple que nous allons voir est d’obtenir un nom de sous-dossier à partir d’un dossier spécifique.
Sub LearnFso() ' decaring variables that we will need Dim fso As FileSystemObject ' Variable for the FileSystemObject Dim fdr As Folder ' Variable for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder 'Intializing the objects fdrpath = "D:\Downloads" 'Declaring the folder Set fso = New FileSystemObject 'Creating the fso object Set fdr = fso.GetFolder(fdrpath) 'Creating the folder object of given folder 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Next subfdr End Sub
Lorsque vous exécutez le code ci-dessus, c’est ce que vous obtenez.
Ouais! C’est mon dossier de téléchargement. Ne vous concentrez pas là-dessus.
Comment cela a fonctionné?
Comprenons par étapes:
1: Décarer les variables dont nous aurons besoin
Dim fso As FileSystemObject ‘Variable pour le FileSystemObject Dim fdr As Folder’ Variable pour le dossier de base Dim subfdr As Folder ‘Variable pour les sous-dossiers Nous avons d’abord déclaré toutes les variables dont nous aurons besoin dans cet exemple.
La première variable est bien sûr l’objet fso as file sytem. Les deux variables fdr et subfdr sont de type dossier. Nous utiliserons l’objet fso pour créer un objet de type fichier au lieu de créer directement. La variable fdrpath * is use est utilisée pour contenir le chemin du dossier de base dont nous voulons obtenir tous les sous-dossiers.
2: Initialisation des objets
fdrpath = « D: \ Downloads » _ ‘Déclaration du dossier _Set fso = New FileSystemObject’ Création de l’objet fso Set fdr = fso.GetFolder (fdrpath) ‘Création de l’objet dossier du dossier donné Dans cette étape, nous avons initialisé tous les objets qui nous avions déclaré sauf subfdr. Notez que nous avons initialisé la variable de fichier fdr en utilisant la méthode getFolder des objets fso.
La méthode GetFolder () de FileSystemObject prend le chemin d’un dossier ou d’un répertoire sous forme de chaîne et renvoie un objet de type de fichier.
3: boucle pour obtenir le nom de tous les sous-dossiers dans l’objet dossier
Pour chaque subfdr Dans fdr.SubFolders Debug.Print subfdr.Name Next subfdr Ici, nous avons utilisé un pour chaque boucle pour parcourir chaque sous-dossier dans l’objet de fichier fdr. Nous avons utilisé la propriété SubFolders de l’objet fichier pour boucler.
Nous utilisons la propriété name pour obtenir les noms de chaque sous-dossier. Et c’est fait.
Exemple 2: Obtenir tous les chemins de fichiers dans un dossier et ses sous-dossiers Pour obtenir tous les chemins ou noms complets de tous les fichiers d’un dossier et de son sous-dossier, nous devons ajouter quelques lignes supplémentaires dans le code de l’exemple 1.
Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Variable for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder Dim fl As File 'to store file object fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'to loop throgh each file Debug.Print fl.Path 'getting file name Next fl Next subfdr 'to get the files of main folder For Each fl In fdr.Files Debug.Print fl.Path Next fl End Sub
La méthode Folder.Files () est la méthode qui renvoie les fichiers dans un sous-dossier. La méthode File.Path () renvoie l’adresse complète du fichier. Nous avons chacun une boucle interne pour parcourir tous les fichiers du sous-dossier du dossier principal et de son. Pour obtenir les fichiers du dossier principal, nous utilisons une autre boucle.
Exemple 3: enregistrer les noms de fichiers dans un fichier CSV.
Dans l’exemple précédent, nous avons appris à imprimer les chemins de fichiers de dossiers spécifiques sur la fenêtre immédiate. Dans cet exemple, nous allons apprendre à enregistrer ces chemins dans un fichier CSV. Pour ce faire, il suffit d’ajouter quelques lignes au code. Voir les lignes de code en gras ci-dessous.
Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Variable for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder Dim fl As File 'to store file object Dim fileList As TextStream 'A textstream object fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) Set fileList = fso.CreateTextFile(fdrpath & "\File List in This Folder.csv", True, False) 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'to loop through each file fileList.Write fl.Path & "," Next fl Next subfdr 'to get the files of main folder For Each fl In fdr.Files fileList.Write fl.Path & "," Next fl fileList.Close End Sub
Ici, nous avons déclaré un nouvel objet de type FileStream nommé
fileList
Nous avons initialisé la variable filelist avec un objet filestream en utilisant la ligne ci-dessous.
Set fileList = fso.CreateTextFile (fdrpath & « \ File List in This Folder.csv », True, False) Nous utilisons la méthode CreateTextFile de FSO pour créer un objet FileStream.
Il crée un fichier texte. Cette méthode accepte le nom d’un fichier avec un chemin complet. La première variable le fait. Nous utilisons l’extension .csv pour créer un fichier csv. La deuxième variable est utilisée pour permettre l’écrasement.
Le troisième argument est False pour déclarer qu’il ne s’agit pas d’un fichier binaire. Dans les boucles, nous remplaçons la méthode debug.print par la méthode filelist.Write pour écrire chaque chemin de fichier dans le fichier créé. Alors oui les gars, voici comment vous pouvez utiliser FileSystemObject. L’OFS peut être utilisé pour bien d’autres choses, dont nous parlerons dans les prochains articles. Si vous avez des doutes sur cet article de requête liée à l’OFS, demandez-moi dans la section commentaires ci-dessous.
Articles liés:
link: / applications-word-outlook-in-vba-getting-started-with-excel-vba-userforms [Premiers pas avec Excel VBA UserForms]
| * Je vais vous expliquer comment créer un formulaire dans Excel, comment l’utiliser Boîte à outils VBA, comment gérer les entrées utilisateur et enfin comment stocker les entrées utilisateur. Nous passerons en revue ces sujets en utilisant un exemple et un guide étape par étape.
lien: / general-topics-in-vba-vba-variables-in-excel [Variables VBA dans Excel]
| * VBA signifie Visual Basic pour Applications.
C’est un langage de programmation de Microsoft. Il est utilisé avec les applications Microsoft Office telles que MSExcel, MS-Word et MS-Access, tandis que les variables VBA sont des mots-clés spécifiques.
lien: / general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope]
| * Dans tous les langages de programmation, nous avons des spécificateurs d’accès aux variables qui définissent d’où une variable définie peut être accédée. Excel VBA ne fait pas exception. VBA a également des spécificateurs de portée.
lien: / cells-ranges-rows-and-columns-in-vba-quelle-est-la-difference-entre-byref-and-byval-arguments-vba-interview-question [Arguments ByRef et ByVal]
| Lorsqu’un argument est passé en tant qu’argument ByRef à un autre sous ou fonction, la référence de la variable réelle est envoyée. Toutes les modifications apportées à la copie de la variable seront reflétées dans l’argument d’origine.
lien: / fichiers-classeur-et-feuilles de calcul-dans-vba-supprimer-feuilles-sans-confirmation-invites-en-utilisant-vba-dans-microsoft-excel [Supprimer les feuilles sans invites de confirmation en utilisant VBA dans Microsoft Excel]
| Puisque vous supprimez des feuilles à l’aide de VBA, vous savez ce que vous faites.
Vous voudriez dire à Excel de ne pas afficher cet avertissement et de supprimer la fichue feuille.
link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Ajouter et enregistrer un nouveau classeur en utilisant VBA dans Microsoft Excel 2016]
| Dans ce code, nous avons d’abord créé une référence à un objet de classeur. Et puis nous l’avons initialisé avec un nouvel objet classeur. L’avantage de cette approche est que vous pouvez effectuer facilement des opérations sur ce nouveau classeur. Comme enregistrer, fermer, supprimer, etc `link: / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Afficher un message sur La barre d’état Excel VBA *] `| La barre d’état dans Excel peut être utilisée comme moniteur de code. Lorsque votre code VBA est long et que vous effectuez plusieurs tâches à l’aide de VBA, vous désactivez souvent la mise à jour de l’écran afin de ne pas voir cet écran scintiller.
lien: / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Désactiver les messages d’avertissement à l’aide de VBA dans Microsoft Excel 2016]
| * Ce code désactive non seulement VBA alertes mais augmente également l’efficacité temporelle du code. Voyons comment.
Articles populaires:
lien: / clavier-formule-raccourcis-50-excel-raccourcis-pour-augmenter-votre-productivité [50 raccourcis Excel pour augmenter votre productivité]
| Accélérez votre tâche. Ces 50 raccourcis vous permettront de travailler encore plus rapidement sur Excel.
lien: / formules-et-fonctions-introduction-de-vlookup-function [La fonction RECHERCHEV dans Excel]
| C’est l’une des fonctions les plus utilisées et les plus populaires d’Excel qui est utilisée pour rechercher des valeurs à partir de différentes plages et feuilles. lien: / tips-countif-in-microsoft-excel [COUNTIF dans Excel 2016]
| Comptez les valeurs avec des conditions en utilisant cette fonction étonnante. Vous n’avez pas besoin de filtrer vos données pour compter des valeurs spécifiques.
La fonction Countif est indispensable pour préparer votre tableau de bord.
lien: / excel-formule-et-fonction-excel-sumif-function [Comment utiliser la fonction SUMIF dans Excel]
| C’est une autre fonction essentielle du tableau de bord. Cela vous aide à résumer les valeurs sur des conditions spécifiques.