Fonction VBA DIR - Une explication simple avec des exemples

VBA a quelques fonctions utiles qui peuvent faire passer votre automatisation dans Excel au niveau supérieur.

Une de ces fonctions est la Fonction VBA DIR.

En soi, cela peut sembler être une fonction simple qui fait une chose spécifique.

Mais lorsque vous le combinez avec d'autres éléments utiles du langage de codage VBA, vous pouvez créer des éléments puissants (couverts dans les exemples plus loin dans ce didacticiel).

Que fait la fonction VBA Dir ?

Utilisez la fonction VBA DIR lorsque vous souhaitez obtenir le nom du fichier ou d'un dossier, en utilisant leur nom de chemin.

Pour vous donner un exemple, si vous avez un fichier Excel dans un dossier, vous pouvez utiliser la fonction VBA DIR pour obtenir le nom de ce fichier Excel (ou de tout autre type de fichier).

Que faire si je veux obtenir les noms de tous les fichiers Excel du dossier (ou de tous les fichiers - qu'il s'agisse ou non d'un fichier Excel) ?

Vous pouvez faire cela aussi!

Lorsque vous utilisez la fonction DIR une fois, elle renvoie le nom du premier fichier dans un dossier. Maintenant, si vous souhaitez également obtenir les noms des deuxième, troisième et quatrième fichiers, vous pouvez à nouveau utiliser la fonction DIR (voir plus loin à titre d'exemple).

Réal renvoie le premier nom de fichier qui correspond au chemin d'accès. Pour obtenir des noms de fichiers supplémentaires qui correspondent au chemin d'accès, appelez Réal encore une fois sans arguments. Lorsqu'aucun autre nom de fichier ne correspond, Réal renvoie une chaîne de longueur nulle (""). Couvert dans les exemples 3 et 4 plus loin dans ce didacticiel.

Syntaxe de la fonction VBA DIR

Dir [ (chemin [ ,attributs ] ) ]
  • chemin d'accès: Ceci est un argument facultatif. Il peut s'agir du nom du fichier, du nom du dossier ou du nom du répertoire. Si le chemin n'est pas trouvé, la fonction VBA DIR renvoie une chaîne de longueur nulle ("")
  • les attributs: Ceci est un argument facultatif. Vous pouvez utiliser cet argument pour spécifier certains attributs et la fonction DIR renverra les noms de fichiers en fonction de ces attributs. Par exemple, si vous voulez une liste de tous les fichiers cachés ou en lecture seule (ainsi que les fichiers sans attributs), vous devez le spécifier dans cet argument.

Attributs disponibles à utiliser dans la fonction VBA DIR (vous pouvez en utiliser un ou plusieurs) :

Constant Valeur La description
vbNormal 0 (Par défaut) Spécifie les fichiers sans attributs.
vbLecture seule 1 Spécifie les fichiers en lecture seule en plus des fichiers sans attributs.
vbMasqué 2 Spécifie les fichiers cachés en plus des fichiers sans attributs.
VbSystème 4 Spécifie les fichiers système en plus des fichiers sans attributs. Non disponible sur Macintosh.
vbVolume 8 Spécifie le nom de volume; si un autre attribut est spécifié, vbVolume est ignoré. Non disponible sur Macintosh.
vbRépertoire 16 Spécifie des répertoires ou des dossiers en plus des fichiers sans attributs.
vbAlias 64 Le nom de fichier spécifié est un alias. Disponible uniquement sur Macintosh.

Utilisation de caractères génériques avec la fonction DIR

Si vous travaillez avec Windows, vous pouvez également utiliser les caractères génériques dans la fonction DIR.

Notez que vous ne pouvez pas les utiliser lorsque vous travaillez avec VBA sous Macintosh.

L'utilisation de caractères génériques peut être utile lorsque :

  • Vous souhaitez obtenir les noms de fichier d'un type de fichier particulier (tel que .XLSX ou .PPTX)
  • Lorsque vous avez un suffixe/préfixe spécifique dans les noms de fichiers et que vous souhaitez obtenir les noms de ces fichiers/dossiers/répertoires. Par exemple, si vous voulez les noms de tous les fichiers avec le préfixe 2021-2022, vous pouvez le faire en utilisant des caractères génériques.

Il existe trois caractères génériques dans Excel :

  1. * (astérisque) - Il représente un nombre quelconque de caractères. Par exemple, 2019* vous donnerait les noms de tous les fichiers avec le préfixe 2021-2022.
  2. ? (point d'interrogation) - Il représente un seul caractère. Par exemple, 2021-2022 ? vous donnerait les noms de tous les fichiers commençant par 2021-2022 et ayant un caractère de plus dans le nom (comme 2021-2022A, 2021-2022B, 2021-2022C, etc.)

Remarque : Il existe un autre caractère générique : le tilde (~). Comme il n'est pas beaucoup utilisé, j'ai sauté son explication. Vous pouvez en savoir plus à ce sujet ici si vous êtes intéressé.

Fonction VBA DIR - Exemples

Voyons maintenant quelques exemples d'utilisation de la fonction VBA DIR.

Exemple 1 - Obtenir le nom du fichier à partir de son chemin

Lorsque vous avez le chemin d'un fichier, vous pouvez utiliser la fonction DIR pour obtenir le nom du fichier à partir de celui-ci.

Par exemple, le code ci-dessous renvoie le nom du fichier et l'affiche dans une boîte de message.

Sub GetFileNames() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\Excel File A.xlsx") MsgBox FileName End Sub

Le code ci-dessus utilise une variable 'FileName' pour stocker le nom de fichier renvoyé par la fonction DIR. Il utilise ensuite une boîte de message pour afficher le nom du fichier (comme indiqué ci-dessous).

Et que se passe-t-il lorsque le fichier n'existe pas ?

Dans ce cas, la fonction DIR renverrait une chaîne vide.

Le code ci-dessous utilise une instruction If Then Else pour vérifier si le fichier existe ou non. Si le fichier n'existe pas, il affiche une boîte de message avec un texte "Le fichier n'existe pas", sinon il affiche le nom du fichier.

Sub CheckFileExistence() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\Excel File A.xlsx") If FileName "" Then MsgBox FileName Else MsgBox "Le fichier n'existe pas" End If End Sous

Exemple 2 - Vérifier si un répertoire existe ou non (et créer si ce n'est pas le cas)

Le code ci-dessous vérifie si le dossier « Test » existe ou non.

Une boîte de message est utilisée pour afficher un message au cas où le dossier existe ou lorsqu'il n'existe pas.

Sub CheckDirectory() Dim PathName As String Dim CheckDir As String PathName = "C:\Users\sumit\Desktop\Test" CheckDir = Dir(PathName, vbDirectory) If CheckDir "" Then MsgBox CheckDir & " existe " Else MsgBox " Le répertoire n'existe pas" End If End Sub

Vous pouvez affiner davantage ce code pour vérifier si le dossier existe ou non, et si ce n'est pas le cas, vous pouvez utiliser VBA pour créer ce dossier.

Vous trouverez ci-dessous le code qui utilise le Fonction MkDir pour créer un dossier au cas où il n'existerait pas.

Sub CreateDirectory() Dim PathName As String Dim CheckDir As String PathName = "C:\Users\sumit\Desktop\Test" CheckDir = Dir(PathName, vbDirectory) If CheckDir "" Then MsgBox CheckDir & " le dossier existe" Else MkDir PathName MsgBox "Un dossier a été créé avec le nom" & CheckDir End If End Sub

Exemple 3 - Obtenir les noms de tous les fichiers et dossiers d'un répertoire

Si vous souhaitez obtenir une liste de tous les noms de fichiers et de dossiers dans un répertoire, vous pouvez utiliser la fonction DIR.

Le code ci-dessous répertorie tous les fichiers et noms de dossier dans le dossier Test (qui se trouve au chemin suivant - C:\Users\sumit\Desktop\Test\).

J'utilise Debug.Print pour afficher les noms dans la fenêtre Immédiat. Vous pouvez également l'utiliser pour répertorier les noms dans une boîte de message ou dans une colonne dans Excel.

Sub GetAllFile&FolderNames() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\", vbDirectory) Do While FileName "" Debug.Print FileName FileName = Dir() Loop End Sub

La boucle Do While dans le code ci-dessus continue jusqu'à ce que tous les fichiers et dossiers du chemin donné aient été couverts. Lorsqu'il n'y a plus de fichiers/dossiers à couvrir, FileName devient une chaîne nulle et la boucle s'arrête.

Exemple 4 - Obtenir les noms de tous les fichiers d'un dossier

Vous pouvez utiliser le code ci-dessous pour obtenir les noms de tous les fichiers d'un dossier/répertoire (et non les noms des sous-dossiers).

Sub GetAllFileNames() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\") Do While FileName "" Debug.Print FileName FileName = Dir() Loop End Sub

Ce code est identique au code utilisé dans l'exemple 3, avec une différence mineure.

Dans ce code, je n'ai pas précisé vbRépertoire dans la fonction DIR. Lorsque vous spécifiez vbDirectory, il vous donnera les noms de tous les fichiers ainsi que les dossiers.

Lorsque vous ne spécifiez pas vbDirectory, la fonction DIR ne vous donnera que les noms des fichiers.

Noter: Si vous souhaitez obtenir les noms de tous les fichiers du dossier principal et des sous-dossiers, vous ne pouvez pas utiliser la fonction DIR (car elle n'est pas récursive). Pour ce faire, vous pouvez soit utiliser Power Query (aucun codage nécessaire) soit utiliser l'objet File System dans VBA (avec récursivité).

Exemple 5 - Obtenir les noms de tous les sous-dossiers d'un dossier

Le code ci-dessous vous donnera les noms de tous les sous-dossiers du dossier spécifié.

Il utilise le Fonction GetAtr en VBA, ce qui permet de vérifier si le nom renvoyé par la fonction DIR est le nom d'un fichier ou d'un dossier/répertoire.

Sub GetSubFolderNames() Dim FileName As String Dim PathName As String PathName = "C:\Users\sumit\Desktop\Test\" FileName = Dir(PathName, vbDirectory) Do While FileName "" If GetAttr(PathName & FileName) = vbDirectory Then Debug.Print FileName End If FileName = Dir() Loop End Sub

Encore une fois, j'utilise Debug.Print pour obtenir les noms dans la fenêtre immédiate. Vous pouvez les obtenir dans une boîte de message ou dans Excel (en modifiant le code en conséquence).

Exemple 6 - Obtenir le premier fichier Excel à partir d'un dossier

Avec la fonction DIR, vous pouvez spécifier l'extension de fichier ou tout suffixe/préfixe que vous souhaitez dans le nom de fichier renvoyé.

Le code ci-dessous afficherait le nom du premier fichier Excel dans le dossier Test.

Sub GetFirstExcelFileName() Dim FileName As String Dim PathName As String PathName = "C:\Users\sumit\Desktop\Test\" FileName = Dir(PathName & "*.xls*") MsgBox FileName End Sub

Notez que j'ai utilisé *.xls* (signe astérisque des deux côtés). Cela garantira que toutes les versions des fichiers Excel sont vérifiées (.xls, xlsx, .xlsm, .xlsb).

Exemple 7 - Obtenir les noms de tous les fichiers Excel d'un dossier

Utilisez le code ci-dessous pour obtenir les noms de tous les fichiers Excel dans le dossier Test.

Sub GetAllFileNames() Dim FolderName As String Dim FileName As String FolderName = "C:\Users\sumit\Desktop\Test\" FileName = Dir(FolderName & "*.xls*") Do While FileName "" Debug.Print FileName FileName = Dir() Loop End Sub

Alors que la fonction DIR ne renvoie que le nom du premier fichier Excel, puisque nous l'appelons à nouveau dans la boucle, elle parcourt tous les fichiers et nous donne les noms de tous les fichiers Excel.

J'espère que vous avez trouvé ce tutoriel et les exemples utiles.

Faites-moi part de vos réflexions dans la section commentaires.

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave