VBA: Vérifier si le fichier existe 10


En VBA, il est très simple de vérifier si un fichier existe. On peut utiliser une combinaison de deux fonctions VBA:   Len() et Dir().

La fonction Dir() retourne le nom du fichier testé si ce fichier existe (en tant qu'une chaîne de caractères – String). Si le fichier n'existe pas, la fonction retourne une chaîne vide.

On va ensuite tester avec la fonction Len() la longueur de ce résultat obtenu. La fonction Len() retourne comme résultat le nombre de caractères dans une chaîne de caractères. Dans notre cas, la conclusion est la suivante:

Si le résultat combiné de ces deux fonctions est  >0, le ficher existe. Dans le cas contraire, le fichier testé n'existe pas.

Et voici le code VBA  sous forme d'une fonction que vous pouvez utiliser tel quel dans votre projet et qui vous permettra de vérifier si le fichier existe ou pas…

Fonction VBA pour tester l’existence d’un fichier

La fonction suivante utilise un paramètre de type String ( nommé MonFichier ): le chemin complet vers le fichier (c'est à dire le chemin & le nom du fichier dont vous voulez tester l'existence.

Le résultat retourné par cette fonction est un Booléen: il correspond à une des valeurs suivantes: True (si le fichier existe) ou False (si le fichier n'existe pas).

Public Function FichierExiste(MonFichier as String)
'par Excel-Malin.com ( https://excel-malin.com )

   If MonFichier <> "" And Len(Dir(MonFichier)) > 0 Then
      FichierExiste = True
   Else
      FichierExiste = False
   End If
End Function

Remarques:

  • Si la valeur du paramètre MonFichier est vide ou ="", la fonction retournera comme résultat False car un fichier sans chemin et sans nom n'existe pas
  • Si MonFichier contient uniquement le nom de fichier sans le chemin, la fonction vérifiera son existence dans le dossier actif

Exemple de vérification de l’existence d’un fichier

Le code VBA qui suit illustre l'utilisation de la fonction FichierExiste dont le code se trouve plus haut. Il s'agit d'une simple procédure qui fait appel à la fonction FichierExiste pour vérifier l'existence du fichier "C:\Dossier_test\fichier_test.docx". Un message (MsgBox) est ensuite affiché avec le résultat de la vérification.

Attention, pour pouvoir faire fonctionner ce code, vous aurez besoin de copier les deux codes VBA dans votre projet: la fonction FichierExiste ET la procédure TestSiFichierExiste. Si vous voulez faire des tests, vous pouvez modifier le code de la procédure TestSiFichierExiste – le nom du fichier, l'action à exécuter au cas où le fichier existe (ou pas),… Le code de la fonction FichierExiste est générique et ne doit pas être modifié.

Sub TesteSiFichierExiste()
'par Excel-Malin.com ( https://excel-malin.com )

Dim MonFichier As String

MonFichier = "C:\Dossier_test\fichier_test.docx"

    If FichierExiste(MonFichier) = True Then
        MsgBox "Le fichier existe..."
    Else
        MsgBox "Le fichier n'existe pas..."
    End If

End Sub

 

Pourquoi vérifier si le fichier existe?

Si votre but exact est de vérifier l'existence d'un fichier, la question ne se pose même pas. Par contre, vous pouvez utiliser ce test dans vos projets pour vérifier si les fichiers avec lesquels vous devez travailler existent. Pourquoi? On pourrait simplement dire qu'il s'agit d'une bonne pratique dans la programmation (peu importe le langage de programmation utilisé). Mais en réalité, la raison principale est simple: pour vous éviter des problèmes! À vous et aux autres.

En sachant si le fichier existe, vous pouvez inclure dans votre code l'action à effectuer si le fichier n'existe pas. Si, par exemple, vous essayez d'ouvrir un fichier qui n'existe pas, votre code VBA va se bloquer (si les erreurs ne sont pas gérées expressément). Par contre si vous savez en avance que le fichier n'existe pas, vous pouvez décider vous-même quoi faire (par exemple le copier à partir d'un autre endroit) – et votre code VBA continuera à tourner sans problème.

Cela vous permet également de loguer l'activité et des éventuels problèmes lors de l'exécution de vos projets.

Et pour finir, il est parfois utile, avant de créer ou d'exporter un fichier de savoir si un fichier avec le même nom existe déjà. Vous pouvez alors directement décider dans votre code quelle sera la suite (changer nom, déplacer le fichier existant dans un autre dossier, etc.). Et c'est toujours mieux que d'écraser un fichier existant de votre collègue! 🙂

Pour aller plus loin en VBA

Vous venez de voir le code qui vous permettra de tester en VBA l'existence d'un fichier. Il est également possible de tester en VBA si un dossier existe.

 

88 0



Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

10 commentaires sur “VBA: Vérifier si le fichier existe

  • Marc

    J'utilise ce code depuis quelques mois et je vous en remercie.
    Aujourd'hui, je n'arrive pas à l'appliquer à un nouveau fichier et je ne vois ce qui cloche.

    J'ai ce message :
    "Erreur d'exécution '52:
    Nom ou numéro de fichier incorrect"

    Et dans mon Module, cette ligne est surlignée en mode débogage :
    " If Len(Dir(MonFichier)) > 0 Then"

    Avez-vous déjà rencontré le problème ?

    Voilà le code de ma macro où MonFichier est utilisé :
    "Dim MonFichier As String
    MonFichier = CHEMIN_BILAN_A
    If FichierExiste(MonFichier) = False Then
    MsgBox "Accès au fichier impossible." & vbCr & "Veuillez vérifier l'existence du fichier et la justesse de son chemin d'accès : " & vbCr & vbCr & CHEMIN_BILAN_A, vbOKOnly + vbExclamation, "ANOMALIE DÉTECTÉE"
    Else
    If FichOuvert(BILAN_A) Then
    ' Ne rien faire
    Else
    Workbooks.Open Filename:= _
    CHEMIN_BILAN_A _
    , UpdateLinks:=3, ReadOnly:=True
    ActiveWindow.Visible = False
    End If
    End If

  • Don pépé

    Bonjour,
    Petite info si vous chercher un fichier qui est cacher sa retourne FALSE pour pallier à sa remplacer :
    If Len(Dir(MonFichier)) > 0 Then
    par
    If Len(Dir(MonFichier, vbDirectory + vbHidden)) > 0 Then

    Cordialement 😉

  • Simon

    Bonjour,

    Comment faire pour que le nom du fichier soit associé à une cellule?

    Exemple: Si dans Sheet 1, Cellule C3 de mon classeur actif j'ai une liste déroulante de noms.
    Lorsque je lance la macro je souhaiterai que celle ci m'indique si un classeur portant le même nom que la valeur de la cellule C3 existe.

    Sub Send_Session_Test()
    Dim Path As String
    Dim Filename As String
    Dim DirFile As String
    Dim Dir As String
    Dim wksht As Worksheet
    Set wksht = ActiveSheet

    Path = "C:\Users\Simon\Programs\"
    Filename = "C:\Users\Simon\Programs\ & wksht.Cells (3, 3).Value"

    If Filename = True Then
    MsgBox "This workbook exist"

    Else

    MsgBox "This workbook doesn't exist"

    End If
    End Sub

    Merci
    Simon

    • excel-malin.com Auteur de l’article

      Bonjour Simon,
      ce code fera l'affaire:

      Sub Send_Session_Test()
      Dim Path As String
      Dim Filename As String
      Dim DirFile As String
      Dim wksht As Worksheet
      Set wksht = ActiveSheet
      
      Path = "C:\Users\Simon\Programs\"
      Filename = Path & wksht.Cells(3, 3).Value
      
      If Len(Dir(Filename)) > 0 Then
          MsgBox "This workbook exist"
      Else
          MsgBox "This workbook doesn't exist"
      End If
      End Sub

      Attention, dans votre code:
      Dir ne peut pas être le nom d'une variable. Il s'agit d'une fonction VBA existante
      – dans Filename = "C:\Users\Simon\Programs\ & wksht.Cells (3, 3).Value", les guillemets sont ma placés. Cela devrait être:
      Filename = "C:\Users\Simon\Programs\" & wksht.Cells (3, 3).Value

      J'espère que cela vous aidera.
      Cordialement, Martin

  • Fanch55

    Attention à la fonction Dir qui est un faux ami, surtout pour tester l'existence d'un fichier :

    Msgbox dir(Source)

    Si pour une raison quelconque la variable Source est vide,
    Dir renverra le premier fichier correspondant au répertoire courant

    Ce qui fait que la source inexistante existe ….

    • excel-malin.com Auteur de l’article

      Bonjour.
      Une très bonne remarque!
      Je dois avouer que depuis le temps que je l'utilise, je ne m'en suis même pas rendu compte…
      J'ai adapté le code VBA et les explication sur la page.
      Merci!
      Cordialement, Martin

  • Paolo

    Bonjour,
    Merci pour cette astuce. Personnellement, je n'aurais pas exactement fait cela.
    Le problème de tester les deux conditions dans la même clause "if" est que tout doit être interprété avant d'exécuter la clause "then".
    En effet ici, si le nom du fichier (avec son chemin) est une chaine vide, rien ne sert d'aller plus loin et de faire un teste avec Dir().
    Je préfère définir deux clause "if" en cascade, comme ceci…

    If MonFichier vbNullString Then If Dir(MonFichier) vbNullString Then FichierExiste=True Else FichierExiste=False Else FichierExiste=False

    Ce qui peut s'écrire de façon plus compacte…

    If MonFichier vbNullString Then FichierExiste=(Dir(MonFichier) vbNullString) Else FichierExiste=False

    Bonne journée
    Paolo

    • excel-malin.com Auteur de l’article

      Bonjour Paolo,
      merci pour votre commentaire.
      En effet, il y a toujours moyen de faire plus avec moins et être plus concis. Mais le but de ce site est de montrer, expliquer, apprendre à tous.
      Et une grande partie des nombreux visiteurs de ce site sont des débutants en VBA.
      Or, je ne suis pas sûr que le code
      If MonFichier vbNullString Then FichierExiste=(Dir(MonFichier) vbNullString) Else FichierExiste=False
      bien que concis et fonctionnel soit très pédagogique 😉

      Donc je préfère montrer le code le plus lisible possible afin que le maximum des visiteurs le comprennent…
      Cordialement, Martin