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.