[VBA] Fonction Dir et attributs.

Bonsoir.

La documentation de Word 2002 sur la fonctio Dir et son second argument ne me semble pas claire.

Le second argument est, disons, un champ de bits.

Voici ce que dit la documentation pour commencer :

" Dir, fonction

Renvoie une valeur de type String représentant le nom d'un fichier, d'un répertoire ou d'un dossier correspondant à une chaîne de recherche, à un attribut de fichier ou au nom de volume d'un lecteur.

Syntaxe

Dir[(pathname[, attributes])] "

Que faut-il entendre exactement par " correspondant à un attribut de fichiers " ?

Avant de donner un exemple de code et son résultat, je copie ce que la documentation indique sur la façon de désigner les attributs :

Constante Valeur Description
vbNormal 0 (Par défaut) Spécifie les fichiers sans attributs.
vbReadOnly 1 Spécifie les fichiers accessibles en lecture seule ainsi que les fichiers sans attributs.
vbHidden 2 Spécifie les fichiers cachés ainsi que les fichiers sans attributs.
vbSystem 4 Spécifie les fichiers système ainsi que les fichiers sans attributs. Non disponible sur le Macintosh.
vbVolume 8 Spécifie un nom de volume ; si un autre attribut est spécifié, la constante vbVolume est ignorée. Non disponible sur Macintosh.
vbDirectory 16 Spécifie les dossiers ainsi que les fichiers sans attributs.
vbAlias 64 Le nom du fichier spécifié est un alias. Disponible uniquement sur le Macintosh.

Voici maintenant un code que j'ai écrit pour tester cela :

If Dir("C:\FichierPourTesterAttributs.txt", vbNormal) <> "" Then
MsgBox "Le fichier existe déjà."
Else
MsgBox "Le fichier n'existe pas."
End If

Le fichier en question existe bien à l'endroit indiqué.
S'il a les attributs "Lecture seule" et "Archive" mais pas l'attribut "Fichier caché", le MsgBox dit qu'il existe.
S'il a les trois attributs "Lecture seule", "Fichier caché" et "Archive", le MsgBox dit qu'il n'existe pas.

Je ne vois pas quelle est la règle qui peut faire attendre ce résultat.

Quelqu'un peut-il me l'expliquer ? Merci d'avance.

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    J'ai déjà rencontré ce problème et je me suis rabatu
    sur les objets de scripting (vbs) pour lire les attributs
    des fichiers.

    je ne saurais dire pourquoi malheureusement, toutefois
    voici un exemple du code que j'ai utilisé.

    Sub Test()
    
        Dim objFSO, objFichier
        
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objFichier = objFSO.GetFile("C:\Fichier.txt")
        
        If (objFichier.Attributes And 1) Then
            MsgBox "Fichier en lecture seule"
        Else
            If (objFichier.Attributes And 2) Then
                MsgBox "Fichier caché"
            Else
                ' etc ...
            End If
        End If
    
    End Sub
    


    Lupin
    1. Merci beaucoup pour cette réponse.

      On dirait vraiment qu'il y a un bug.

      Je vais essayer de me documenter sur le vbs, dont je ne sais rien.

      Il faudra que j'apprenne tout d'abord si on peut l'utiliser dans les macros de Word...

      Encore merci.
      1. @LupinMerci beaucoup.

        Je vais essayer ça ce soir ou demain.

        Panurge.