Recherche…


Remarques

Scripting.FileSystemObject est beaucoup plus robuste que les méthodes héritées de cette rubrique. Cela devrait être préféré dans presque tous les cas.

Déterminer si les dossiers et les fichiers existent

Des dossiers:

Pour déterminer si un fichier existe, transmettez simplement le nom de fichier à la fonction Dir$ et testez pour voir s'il renvoie un résultat. Notez que Dir$ prend en charge les caractères génériques, donc pour tester un fichier spécifique , le nom de pathName transmis doit être testé pour s'assurer qu'il ne les contient pas. L'exemple ci-dessous génère une erreur - si ce n'est pas le comportement souhaité, la fonction peut être modifiée pour renvoyer simplement False .

Public Function FileExists(pathName As String) As Boolean
    If InStr(1, pathName, "*") Or InStr(1, pathName, "?") Then
        'Exit Function   'Return False on wild-cards.
        Err.Raise 52    'Raise error on wild-cards.
    End If
    FileExists = Dir$(pathName) <> vbNullString
End Function

Dossiers (méthode Dir $):

La fonction Dir$() peut également être utilisée pour déterminer si un dossier existe en spécifiant la transmission de vbDirectory pour le paramètre d’ attributes facultatif. Dans ce cas, la valeur pathName transmise doit se terminer par un séparateur de chemin ( \ ), car les noms de fichiers correspondants provoqueront des faux positifs. Gardez à l'esprit que les caractères génériques ne sont autorisés qu'après le dernier séparateur de chemin. La fonction exemple ci-dessous génère une erreur d'exécution 52 - "Nom ou numéro de fichier incorrect" si l'entrée contient un caractère générique. Si ce n'est pas le comportement souhaité, décommentez le message d' On Error Resume Next en haut de la fonction. Rappelez-vous également que Dir$ prend en charge les chemins de fichiers relatifs (c.-à ..\Foo\Bar d ..\Foo\Bar ), ainsi la validité des résultats est garantie tant que le répertoire de travail actuel n'est pas modifié.

Public Function FolderExists(ByVal pathName As String) As Boolean
    'Uncomment the "On Error" line if paths with wild-cards should return False
    'instead of raising an error.
    'On Error Resume Next    
    If pathName = vbNullString Or Right$(pathName, 1) <> "\" Then
        Exit Function
    End If
    FolderExists = Dir$(pathName, vbDirectory) <> vbNullString
End Function

Dossiers (méthode ChDir):

L'instruction ChDir peut également être utilisée pour tester si un dossier existe. Notez que cette méthode modifie temporairement l'environnement dans lequel s'exécute VBA. Par conséquent, la méthode Dir$ doit être utilisée à la place. Il a l'avantage d'être beaucoup moins tolérant avec son paramètre. Cette méthode prend également en charge les chemins d'accès relatifs aux fichiers, de même que la méthode Dir$ .

Public Function FolderExists(ByVal pathName As String) As Boolean
    'Cache the current working directory
    Dim cached As String
    cached = CurDir$

    On Error Resume Next
    ChDir pathName
    FolderExists = Err.Number = 0
    On Error GoTo 0
    'Change back to the cached working directory.
    ChDir cached
End Function

Création et suppression de dossiers de fichiers


Remarque: par souci de concision, les exemples ci-dessous utilisent la fonction FolderExists de l'exemple Determining If Folders and Files Exist de cette rubrique.


L'instruction MkDir peut être utilisée pour créer un nouveau dossier. Il accepte les chemins contenant des lettres de lecteur ( C:\Foo ), des noms UNC ( \\Server\Foo ), des chemins relatifs ( ..\Foo ) ou le répertoire de travail actuel ( Foo ).

Si le lecteur ou le nom UNC est omis (par exemple, \Foo ), le dossier est créé sur le lecteur en cours. Cela peut être ou ne pas être le même lecteur que le répertoire de travail en cours.

Public Sub MakeNewDirectory(ByVal pathName As String)
    'MkDir will fail if the directory already exists.
    If FolderExists(pathName) Then Exit Sub
    'This may still fail due to permissions, etc.
    MkDir pathName
End Sub

L'instruction RmDir peut être utilisée pour supprimer des dossiers existants. Il accepte les chemins sous les mêmes formes que MkDir et utilise la même relation avec le répertoire de travail et le lecteur en cours. Notez que cette instruction est similaire à la commande shell Windows rd , elle lancera donc une erreur d'exécution 75: "Erreur d'accès au fichier / chemin" si le répertoire cible n'est pas vide.

Public Sub DeleteDirectory(ByVal pathName As String)
    If Right$(pathName, 1) <> "\" Then
        pathName = pathName & "\"
    End If
    'Rmdir will fail if the directory doesn't exist.
    If Not FolderExists(pathName) Then Exit Sub
    'Rmdir will fail if the directory contains files.
    If Dir$(pathName & "*") <> vbNullString Then Exit Sub
    
    'Rmdir will fail if the directory contains directories.
    Dim subDir As String
    subDir = Dir$(pathName & "*", vbDirectory)
    Do
        If subDir <> "." And subDir <> ".." Then Exit Sub
        subDir = Dir$(, vbDirectory)
    Loop While subDir <> vbNullString
    
    'This may still fail due to permissions, etc.
    RmDir pathName
End Sub


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow