Lister des dossiers

Résolu
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 - 15 oct. 2005 à 19:57
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 - 19 oct. 2005 à 20:38
Bonsoirs j'aimerais savoir comment lister les dossiers et sous dossier d'un repertoire sans utiliser de dir list box et sans utiliser de fso.
Attention lister les fichiers ne m'interresse pas.
Merci

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 oct. 2005 à 20:31
Salut
Tu aurais pu chercher un peu quand même, cette question revient souvent.
Utilise la commande DIR :
Dim Temp As String
Temp = Dir("C:\mon répertoire\*.*", vbDirectory)
Do While Temp <> ""
Debug.Print Temp
Temp = Dir ' au suivant
Loop

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
3
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
15 oct. 2005 à 21:11
Je connais cette méthode, mais sa affiche aussi les fichiers...

D'ailleur pour cette méthode est ce que
Do While Len(Temp) > 0
est plus rapide que
Do While Temp <> ""
je parle bien sur en théorie.

Merci.
0
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
15 oct. 2005 à 21:55
Voici donc le seul code que j'ai réussi à mettre au point et qui n'est pas trop long à la détermination des dossiers.

Private Declare Function PathIsDirectory Lib "shlwapi.dll" Alias "PathIsDirectoryA" (ByVal pszPath As String) As Long

Public Sub ListeDossier()

Dim tableau() As String, Temp As String
Dim i As Long

ReDim tableau(0)
i = 0
Temp = Dir("C:", vbDirectory)
Do While Len(Temp) > 0
Temp = Dir
If PathIsDirectory("C:" & Temp) = 16 Then
tableau(i) = Temp
i = i + 1
ReDim Preserve tableau(i)
End If
Loop

End Sub
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 oct. 2005 à 20:34
Salut
Oui, c'est une solution que je ne connaissais pas.
Attention dans ton code :
Aussitôt après le Do While, tu fais à nouveau un Temp = Dir --> Tu perds donc le contenu du premier Temp.
En fait, tu ne t'en apperçois pas car les deux premières requètes renvoient .. et . (2 points et 1 point)
Par contre, ça va buguer à la fin !
Alors mets ton Temp = Dir avant le Loop et ajoute après le Do While
Do While ...
If Temp <> ".." And Temp <> "." Then
Le code actuel ... (sans le Temp = Dir du début)
End If
Temp = Dir
Loop

Concernant le Len(Temp), je ne pense pas que ce soit plus rapide puisque tu ajoutes encore une nouveau évaluation à faire faire au code, donc ça ralentira forcément (à mon avis)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
19 oct. 2005 à 20:38
Merci Jack... Réponse accepté.
0
Rejoignez-nous