Comment savoir si un fichier existe dans un dossier en VBA avec Excel ?

Dans ce tutoriel, je vais vous montrer comment vérifier qu’un fichier donné existe dans un répertoire d’enregistrement. Nous découvrirons ainsi comment utiliser les fonction Dir() et Len() de VBA.

 

Téléchargement

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
 

 

 

Tutoriel Vidéo

 

 

1. Présentation

Dans ce tutoriel, nous allons chercher à savoir si un fichier existe à un endroit donné.

Les raisons qui peuvent nous pousser à effectuer ce contrôle dans le cadre du développement d’une macro-commande en VBA sont nombreuses, nous pouvons par exemple penser à :

  • Gérer plusieurs versions d’un fichier,
  • Vérifier que le fichier existe avant de l’ouvrir,
  • Vérifier que le fichier existe avant de le supprimer,

 

2. Le fichier existe-t-il ?

Pour savoir si un fichier donné existe à un endroit donné, nous allons utiliser la fonction Dir().

Celle-ci permet en effet de récupérer le nom du fichier exprimé sous la forme d’une chaîne de caractères.

Supposons que nous souhaitions savoir si le fichier test.pdf existe dans le même dossier que celui dans lequel se trouve le fichier Excel.

Nous commençons alors par stocker le chemin complet d’accès à ce fichier dans une variable nommée fichier que nous typons en tant que String :

    Dim fichier As String
    fichier = ActiveWorkbook.Path & "\test.pdf" 

Ensuite pour tester le résultat, nous affichons le résultat renvoyé par la fonction Dir() lorsque nous lui passons comme paramètre le chemin de ce fichier :

    MsgBox Dir(fichier)

Excel formation - verifier existance fichier - 01

Nous récupérons alors effectivement le nom du fichier de test.

En revanche, si nous modifions la variable fichier pour pointer un fichier inexistant (par exemple test2.pdf), alors Excel nous affichera une fenêtre vide :

Excel formation - verifier existance fichier - 02

Nous voyons donc émerger la solution à notre problématique : pour vérifier l’existence d’un fichier en VBA, il suffit de vérifier que la chaîne de caractère retournée par la fonction Dir() n’est pas nulle.

Et pour cela, nous allons simplement compter le nombre de caractères de celle-ci et vérifier que ce nombre soit supérieur à zéro :

    If Len(Dir(fichier)) > 0 Then
        MsgBox "Le fichier existe"
    Else
        MsgBox "Le fichier n'existe pas"
    End If

 

3. Créer la fonction de contrôle

Maintenant que nous avons vu comment procéder pour déterminer si un fichier existe ou non, nous pouvons transformer la macro en une fonction, ce qui permettra de la récupérer facilement dans nos projets.

Pour cela, nous procédons aux modifications suivantes :

  • Le mot-clé Sub est remplacé par Function (VBA va alors remplacer automatiquement la ligne End Sub par End Function),
  • Le nom du fichier à tester est défini en tant que paramètre de la fonction,
  • La fonction est typée en tant que booléen, c’est-à-dire que celle-ci renverra la valeur TRUE lorsque le fichier existe, et FALSE dans le cas contraire
  • Pour finir, nous enverrons le résultat obtenu par le test comme valeur de la fonction

 

Function testFichier(fichier As String)  As Boolean
    
    If Len(Dir(fichier)) > 0 Then
        testFichier = True
    Else
        testFichier = False
    End If
    
End Function 

Nous pouvons ensuite tester cette fonction à partir d’une autre procédure :

Sub test()
    MsgBox testFichier(ActiveWorkbook.Path & "\test.pdf")
End Sub 

Celle-ci nous retournera alors VRAI si nous effectuons le test sur le fichier test.pdf qui existe véritablement :

Excel formation - verifier existance fichier - 03

Et FAUX pour le fichier test2.pdf :

Excel formation - verifier existance fichier - 04

Sachez qu’ici nous avons appelé le chemin complet du fichier à tester, mais si celui-ci est situé dans le même dossier que le classeur dans lequel se trouve la macro, il n’est pas utile de préciser ce chemin.

Nous pourrions donc aussi bien utiliser :

Sub test()
    MsgBox testFichier("test.pdf")
End Sub 

Et enfin, la fonction que nous venons de créer étant une fonction publique, nous pouvons également l’utiliser directement depuis la feuille de calcul :

Excel formation - verifier existance fichier - 05

 

4. Amélioration de la fonction

Nous pouvons encore améliorer la fonction de test sur deux éléments.

Tout d’abord, nous pouvons tester si un paramètre a bien été donné, c’est-à-dire que l’argument fichier est différent d’une simple chaîne vide.

(sinon la fonction Dir() nous retournerait le premier fichier qui se trouve dans le répertoire courant - à ne pas confondre avec le répertoire d’enregistrement du classeur… -, et donc le résultat serait erroné !) :

    If Len(fichier) > 0 And Len(Dir(fichier))  > 0 Then
        testFichier = True
    Else
        testFichier = False
    End If

Ensuite, il est possible que le fichier soit un fichier caché :

Excel formation - verifier existance fichier - 06

Dans ce cas, celui-ci existe bien, mais la fonction va retourner un résultat erroné :

Excel formation - verifier existance fichier - 07

Pour corriger ce problème, nous allons simplement pouvoir utiliser le paramètre optionnel attributes de la fonction Dir() qui permet de définir les attributs de fichier à utiliser :

    If Len(fichier) > 0 And Len(Dir(fichier,  vbHidden)) > 0 Then
        testFichier = True
    Else
        testFichier = False
    End If

 

5. Exemple

Dans cet exemple, nous allons souhaiter copier un fichier (test.pdf) en un nouveau fichier, qui n’existe pas :

Sub dupliquerPDF()
    Dim i As Integer
    i = 1
    
    Do While testFichier("test_" & i &  ".pdf")
        i = i + 1
    Loop
    
    FileCopy "test.pdf", "test_"  & i & ".pdf"
    MsgBox "Le fichier test_" & i &  ".pdf a été créé"
End Sub 

Excel formation - verifier existance fichier - 08

 



Articles qui pourraient vous intéresser

Comment faire une pause en VBA sur Excel ?
Comment savoir si un fichier existe dans un dossier en VBA avec Excel ?
Comment protéger ses macros VBA (limiter la consultation du code et le lancement) sur Excel ?
Les 6 bonnes habitudes qui facilitent le développement en VBA sur Excel
Les tableaux de données d'Excel
Comment créer nos propres objets VBA avec les classes personnalisées [#30 FORMATION EXCEL VBA COMPLETE]
Comment lancer des macros automatiquement avec les évènements VBA : Les objets Workbook [#31 FORMATION EXCEL VBA COMPLETE]
Comprendre et corriger les erreurs de VBA [#29 FORMATION EXCEL VBA COMPLETE]
Comment créer des commentaires de pro sur Excel
Créons nos propres types de variables en VBA [#11 FORMATION EXCEL VBA COMPLETE]
Les tableaux de VBA [#27 FORMATION EXCEL VBA COMPLETE]
COMMENT UTILISER LES FONCTIONS HEURE, MINUTE, SECONDE ET TEMPS D’EXCEL

Contact - Plan du site - À propos - Contact

© Excel-Formation 2018 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.