Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction Dir et attributs

27 réponses
Avatar
Mersenne
Bonjour.

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

Le second argument est, disons, un nombre entier traité comme 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 " ? Je crois comprendre cela comme suit : seuls seront retenus les
objets (fichiers ou dossiers) qui auront au moins les attributs impliqués
par le second paramètre, sans exclure les objets (fichiers ou dossiers) qui
auraient en plus certains autres attributs.

Exemple : la valeur vbNormal, qui est la valeur nulle, implique aucun
attribut, donc si Dir a cette valeur pour second argument, elle retiendra
tous les fichiers correspondant au premier argument, quels que soient les
systèmes d'attributs de ces fichiers.

Si on peut confirmer ou infirmer, merci d'avance.

Je vais maintenant donner un exemple de code qui me semble produire des
résultats inexplicables, quelle que soit la façon dont Dir est censée
procéder.

Avant de donner cet 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


(Remarque : la chaîne de caractères qui forme le premier argument ne finit
pas par le caractère "\". Mes essais m'ont fait conclure que, dans ce cas,
le fichier ou dossier cherché par Dir est le fichier ou dossier qui a pour
nom cette chaîne de caractères, et non un élément de ce fichier ou dossier.
L'exemple qui suit montre que c'est vrai au moins dans un cas...)


Le fichier en question dans la macro existe.
Si, avant la macro, je coche les attributs "Lecture seule" et "Archive" mais
pas l'attribut "Fichier caché", le MsgBox dit qu'il existe.
Si je coche 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.

Autres essais :

1° le fichier a pour seul attribut "lecture seule" : la macro le trouve.

2° le fichier a pour seul attribut "fichier caché" : la macro ne le trouve
pas.

Quelqu'un peut-il m'expliquer ce résultat? Merci d'avance.

10 réponses

1 2 3
Avatar
Clément Marcotte
Le paramètre numérique peut être la somme des paramètres individuels.

Le plus sur est de probablement vérifier si l'attribut est mis ou non.


"Mersenne" a écrit dans le message de news:

Bonjour.

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

Le second argument est, disons, un nombre entier traité comme 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 " ? Je crois comprendre cela comme suit : seuls seront retenus
les objets (fichiers ou dossiers) qui auront au moins les attributs
impliqués par le second paramètre, sans exclure les objets (fichiers ou
dossiers) qui auraient en plus certains autres attributs.

Exemple : la valeur vbNormal, qui est la valeur nulle, implique aucun
attribut, donc si Dir a cette valeur pour second argument, elle retiendra
tous les fichiers correspondant au premier argument, quels que soient les
systèmes d'attributs de ces fichiers.

Si on peut confirmer ou infirmer, merci d'avance.

Je vais maintenant donner un exemple de code qui me semble produire des
résultats inexplicables, quelle que soit la façon dont Dir est censée
procéder.

Avant de donner cet 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


(Remarque : la chaîne de caractères qui forme le premier argument ne finit
pas par le caractère "". Mes essais m'ont fait conclure que, dans ce cas,
le fichier ou dossier cherché par Dir est le fichier ou dossier qui a pour
nom cette chaîne de caractères, et non un élément de ce fichier ou
dossier. L'exemple qui suit montre que c'est vrai au moins dans un cas...)


Le fichier en question dans la macro existe.
Si, avant la macro, je coche les attributs "Lecture seule" et "Archive"
mais pas l'attribut "Fichier caché", le MsgBox dit qu'il existe.
Si je coche 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.

Autres essais :

1° le fichier a pour seul attribut "lecture seule" : la macro le trouve.

2° le fichier a pour seul attribut "fichier caché" : la macro ne le trouve
pas.

Quelqu'un peut-il m'expliquer ce résultat? Merci d'avance.






Avatar
Mersenne
"Clément Marcotte" a écrit dans le message
de news:
Le paramètre numérique peut être la somme des paramètres individuels.

Le plus sur est de probablement vérifier si l'attribut est mis ou non.



Merci, mais je ne comprends pas cette réponse.

Il me semble que ma macro montre que, dans certains cas, Dir ne trouve pas
un fichier qu'elle devrait trouver.
Comment pourrait-on alors vérifier si le fichier "trouvé" a les attributs
voulus ?

(Autre chose : quand je me suis inscrit, j'ai indiqué une adresse de
messagerie fictive, conformément aux instructions. Comment se fait-il que
c'est mon adresse réelle qui apparaît dans mon message ?)

Mersenne.

Avatar
Clément Marcotte
On peut retrouver la valeur numérique avec Getattributes et tester à quoi
elle correspond. Ce peut être un seul attribut, ou le total des valeurs des
attributs.

Voir l'exemple sur Dir dans l'aide de VBA


"Mersenne" a écrit dans le message de news:
u88FR$

"Clément Marcotte" a écrit dans le message
de news:
Le paramètre numérique peut être la somme des paramètres individuels.

Le plus sur est de probablement vérifier si l'attribut est mis ou non.



Merci, mais je ne comprends pas cette réponse.

Il me semble que ma macro montre que, dans certains cas, Dir ne trouve pas
un fichier qu'elle devrait trouver.
Comment pourrait-on alors vérifier si le fichier "trouvé" a les attributs
voulus ?

(Autre chose : quand je me suis inscrit, j'ai indiqué une adresse de
messagerie fictive, conformément aux instructions. Comment se fait-il que
c'est mon adresse réelle qui apparaît dans mon message ?)

Mersenne.




Avatar
Mersenne
"Clément Marcotte" a écrit dans le message
de news:
On peut retrouver la valeur numérique avec Getattributes et tester à quoi
elle correspond. Ce peut être un seul attribut, ou le total des valeurs
des attributs.

Voir l'exemple sur Dir dans l'aide de VBA


Oui, mais encore faut-il avoir un fichier auquel appliquer Getattributes.
Or, comme ma macro le montre, il arrive que Dir ne trouve pas un fichier
qu'elle devrait trouver.
A mon avis, ma macro révèle un bug de Word 2002, à moins que je ne comprenne
pas.

Quelqu'un peut-il confirmer ou infirmer qu'il y a un bug ?

Merci d'avance.

Mersenne.

Avatar
Anacoluthe
Bonjour !

'Mersenne' nous a écrit ...
Quelqu'un peut-il confirmer qu'il y a un bug ?


Ben non !

Tous les nombreux exemples que vous avez donnés montrent
seulement que DIR ne voit pas un fichier à l'attribut caché.

Quoi de plus normal si précisément le fichier est /caché/ et
que votre système n'autorise pas de voir les fichiers cachés ???

Où est le bug ?

Anacoluthe
« Y’a comme un bug »
- François COINTE

Avatar
Clément Marcotte
Le problème est probablement plus dans Windows XP que dans VBA. Il y a moyen
de contourner le problème en utilisant la bibliothèque VBScript:

Sub balayage2()
Dim fso As Object, dossier As Object, fichier As Object
Set fso = CreateObject("scripting.filesystemobject")
Set dossier = fso.getfolder("c:copie")
For Each fichier In dossier.Files
If fichier.Attributes And 2 Then
MsgBox "Caché"
ElseIf fichier.Attributes And 1 Then
MsgBox "Lecture seule "
ElseIf fichier.Attributes And 16 Then
MsgBox "Dossier "
ElseIf fichier.Attributes And 32 Then
MsgBox "Archive"
ElseIf fichier.Attributes And 64 Then
MsgBox "Alias"
ElseIf fichier.Attributes And 4 Then
MsgBox "Système"
ElseIf fichier.Attributes And 8 Then
MsgBox "Volume"
ElseIf fichier.Attributes And 128 Then
MsgBox "Compressé"
Else
MsgBox "Aucun attribut ou attributs multiples"
End If
Next
End Sub

"Mersenne" a écrit dans le message de news:
e5%

"Clément Marcotte" a écrit dans le message
de news:
On peut retrouver la valeur numérique avec Getattributes et tester à quoi
elle correspond. Ce peut être un seul attribut, ou le total des valeurs
des attributs.

Voir l'exemple sur Dir dans l'aide de VBA


Oui, mais encore faut-il avoir un fichier auquel appliquer Getattributes.
Or, comme ma macro le montre, il arrive que Dir ne trouve pas un fichier
qu'elle devrait trouver.
A mon avis, ma macro révèle un bug de Word 2002, à moins que je ne
comprenne pas.

Quelqu'un peut-il confirmer ou infirmer qu'il y a un bug ?

Merci d'avance.

Mersenne.




Avatar
Clément Marcotte
Bonjour,

Quoi de plus normal si précisément le fichier est /caché/ et
que votre système n'autorise pas de voir les fichiers cachés ???

Où est le bug ?


Dans l'aide qui laisse sous-entendre que Dir peut trouver un fichier caché.
Ce ne serait pas la première fois que l'aide ne suivrait pas les
"évolutions" de Word ou de Windows. ;-)

Avatar
Geo

Bonjour,

Quoi de plus normal si précisément le fichier est /caché/ et
que votre système n'autorise pas de voir les fichiers cachés ???

Où est le bug ?


Dans l'aide qui laisse sous-entendre que Dir peut trouver un fichier caché. Ce ne
serait pas la première fois que l'aide ne suivrait pas les "évolutions" de Word ou de
Windows. ;-)


Peut-être voir l'option "afficher les fichiers cachés" dans
l'explorateur de fichier.
mais cette fonction Dir parait effectivement vieillotte et plus à
l'aise en DOS que windows.

--
A+


Avatar
Mersenne
"Clément Marcotte" a écrit dans le message
de news: uK$
Le problème est probablement plus dans Windows XP que dans VBA. Il y a
moyen de contourner le problème en utilisant la bibliothèque VBScript:


(Suit un script VBS.)

Merci Clément.

J'essaierai ce script demain. Quelqu'un d'autre m'a dit lui aussi que VBS
est plus sûr.

Je note que quand ma macro ne trouvait pas les fichiers cachés, j'avais
coché l'option "afficher les fichiers cachés" dans Internet Explorer.

Merci aussi à Anacoluthe, bien qu'elle ne m'ait pas convaincue (je fais la
même objection que Clément) et merci aussi à Geo.

Mersenne.

Avatar
Mersenne
Correction : dans mon précédent message, il faut évidemment lire
"l'explorateur Windows" au lieu de "Internet Explorer".

Mersenne.
1 2 3