85 votes

Vérifier si le fichier existe à l'aide de VBA

Sub test()

thesentence = InputBox("Type the filename with full extension", "Raw Data File")

Range("A1").Value = thesentence

If Dir("thesentence") <> "" Then
    MsgBox "File exists."
Else
    MsgBox "File doesn't exist."
End If

End Sub

Dans ce cas, lorsque je récupère la valeur du texte dans la zone de saisie, cela ne fonctionne pas. Cependant, si l'on supprime "the sentence" de Si Dir() et le remplacer par un nom réel dans le code, cela fonctionne. Quelqu'un peut-il m'aider ?

5voto

Ron Royston Points 5179
Function FileExists(fullFileName As String) As Boolean
    FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0
End Function

4voto

Dan Points 18107

Je ne suis pas certain de ce qui ne va pas dans votre code en particulier, mais j'utilise cette fonction que j'ai trouvée en ligne (URL dans les commentaires) pour vérifier si un fichier existe :

Private Function File_Exists(ByVal sPathName As String, Optional Directory As Boolean) As Boolean
    'Code from internet: http://vbadud.blogspot.com/2007/04/vba-function-to-check-file-existence.html
    'Returns True if the passed sPathName exist
    'Otherwise returns False
    On Error Resume Next
    If sPathName <> "" Then

        If IsMissing(Directory) Or Directory = False Then

            File_Exists = (Dir$(sPathName) <> "")
        Else

            File_Exists = (Dir$(sPathName, vbDirectory) <> "")
        End If

    End If
End Function

2voto

Word Nerd Points 66

Très vieil article, mais comme il m'a aidé après avoir fait quelques modifications, j'ai pensé le partager. Si vous voulez vérifier si un répertoire existe, vous devez ajouter l'argument vbDirectory à la fonction Dir, sinon vous retournerez 0 à chaque fois. (Edit : ceci était une réponse à la réponse de Roy, mais je l'ai accidentellement transformée en réponse normale).

Private Function FileExists(fullFileName As String) As Boolean
    FileExists = Len(Dir(fullFileName, vbDirectory)) > 0
End Function

2voto

Andreas Dietrich Points 155

En me basant sur d'autres réponses, j'aimerais vous faire part de mes remarques qui ont été faites au cours des dernières années. devrait fonctionner pour les dossiers et les fichiers :

  • Len(Dir(path)) > 0 or Or Len(Dir(path, vbDirectory)) > 0 'version 1 - ... <> "" should be more inefficient generally

    • (seulement Len(Dir(path)) ne fonctionne pas pour les répertoires (Excel 2010 / Win7))
  • CreateObject("Scripting.FileSystemObject").FileExists(path) 'version 2 - could be faster sometimes, but only works for files (tested on Excel 2010/Win7)

comme PathExists(path) fonction :

Public Function PathExists(path As String) As Boolean
    PathExists = Len(Dir(path)) > 0 Or Len(Dir(path, vbDirectory)) > 0
End Function

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X