VBA Vérifier l’existence d’un dossier/répertoire (FolderExists)

VBA - Visual Basic for Application

VBA est très bien adapté pour se débarrasser de certaines tâches ennuyeuses sous Microsoft Office et pour limiter sa productivité à l’essentiel.

Si l’on écrit beaucoup de code VBA, on a certainement besoin à un moment donné d’une fonction pour vérifier si un dossier ou un chemin de répertoire existe. En fait, il est de bon ton de faire une telle vérification en programmation. En effet, si l’on souhaite enregistrer quelque chose à l’aide d’un code VBA, par exemple un e-mail ou ses pièces jointes, on obtient un message d’exception si le répertoire sélectionné n’existe pas.

Le test pour savoir si le répertoire existe se fait très simplement à l’aide de cette fonction :

CreateObject("Scripting.FileSystemObject").FolderExists(strPath)

La fonction CreateObject renvoie un objet ActiveX. L’objet ActiceX rend, en termes généraux, d’autres fonctions disponibles au niveau du système d’exploitation sous Windows. Comme le paramètre “Scripting.FileSystemObject” est passé ici, les fonctions de fichier et de répertoire sont mises à disposition dans ce cas. Dans notre cas d’application, nous avons besoin de la fonction FolderExists. Comme paramètre de transmission, on indique une chaîne de caractères (strPath) avec le chemin complet du répertoire. La fonction renvoie alors True ou False, selon l’existence ou non du répertoire.

Exemple de code FolderExists

Dans cet exemple de code, nous travaillons avec des variables pour le chemin d’accès au dossier (strPath) et la valeur de retour booléenne de la fonction (isDir), car le chemin d’accès au répertoire se présente souvent sous la forme d’une variable de type chaîne, par exemple comme paramètre passé à une fonction. La fonction Debug.Print écrit alors la sortie dans la fenêtre directe.

Dim strPath As String
Dim isDir As Boolean
strPath = "c:\Users\MyUserName\Desktop\"
isDir = CreateObject("Scripting.FileSystemObject").FolderExists(strPath)

Debug.Print isDir

Au lieu de Debug.Print, on va bien sûr traiter le résultat isDir et vérifier avec une instruction If si la vérification du répertoire est Vraie ou Fausse. Si le répertoire n’existe pas encore, on pourrait créer dans une autre instruction le répertoire avec la commande MkDir(…).

Dim strPath As String
Dim isDir As Boolean
strPath = "c:\Users\MyUserName\Desktop\"
isDir = CreateObject("Scripting.FileSystemObject").FolderExists(strPath)

If isDir = True Then
  'Faire quelque chose, par exemple enregistrer un fichier sous le répertoire
  Debug.Print "Le répertoire existe".
Else
  'Faire quelque chose si le répertoire n'existe pas
  Debug.Print "Répertoire inexistant"
End If

Pour les paresseux de l’écriture, voici encore une variante courte :

If CreateObject("Scripting.FileSystemObject").FolderExists("c:\Users\MyUserName\Desktop\") Then
  'Faire quelque chose, par exemple enregistrer un fichier sous le répertoire
  Debug.Print "Le répertoire existe".
Else
  'Faire quelque chose si le répertoire n'existe pas
  Debug.Print "Répertoire inexistant"
End If

Exemple de code Dir

L’exemple de code suivant montre une autre méthode que je trouve moins élégante, mais qui fonctionne tout aussi bien. Ici, on utilise la fonction Dir(…), qui renvoie une chaîne vide si le dossier n’existe pas.

 'Définir une chaîne pour le chemin du dossier.
  Dim strFolderPath As String
  strFolderPath = "c:\Users\MyUserName\Desktop\1\"
  ' Vérifier si le dossier existe déjà
  If Dir(strFolderPath, vbDirectory) = "" Then
    ' Le dossier n'existe pas encore.
    Debug.Print 'Le dossier n'existe pas'.
  Else
    ' Le dossier existe
    Debug.Print "Le dossier existe !"
  End If

En paramètre, il faut passer à la fonction Dir le chemin du répertoire (strFolderPath) ainsi que l’attribut vbDirectory.

Conclusion

On le voit, il est donc relativement facile en VBA de vérifier l’existence d’un dossier. Et on devrait en faire un usage régulier, notamment lorsqu’il n’est pas certain que le répertoire ait déjà été créé ou que le chemin d’accès au dossier ait été défini par l’utilisateur.

Meilleure Vente n° 1
Meilleure Vente n° 2

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *