Un équivalent du 'dir /s" de dos (VBA) [Résolu]

Messages postés
14
Date d'inscription
jeudi 15 septembre 2005
Dernière intervention
19 octobre 2005
- - Dernière réponse : crenaud76
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Dernière intervention
9 juin 2006
- 22 sept. 2005 à 16:23
Salut,


Je crois que tout est dit dans le sujet.
Je voudrais récuperer une liste de fichiers d'un emplacement en listant les repertoires et sous les repertoires ainsi que la liste des repertoires.

Actuellement je le fait sous dos et redirige la sortie vers un fichier texte mais ça me met des caractères spéciaux à la place des "é", "ç",... et ça me fait sh*** parce que j'aimerais faire un filelen() dessus via VBA.

A+
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Dernière intervention
9 juin 2006
3
Merci
La boucle ...
For i = 1 To FCount
Debug.Print F(i)
Next

... peut être supprimé .. je l'avais juste mise à des fin de vérification du bon fonctionnement

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Dernière intervention
11 mars 2006
0
Merci
Bonjour,
Essaie ceci, celà peut peut-être t'aider.Place unCommandButton et une Listbox sur ton UserForm.

Private Sub CommandButton1_Click()
Dim MyName
MyName = Dir("C:\Mes documents\*.txt*", vbNormal)
While MyName <> ""
ListBox1.AddItem MyName
MyName = Dir
Wend
End Sub


jpleroisse

Si une réponse vous convient, cliquez Réponse Acceptée.
Messages postés
14
Date d'inscription
jeudi 15 septembre 2005
Dernière intervention
19 octobre 2005
0
Merci
euh.....
"Essaie ceci, celà peut peut-être t'aider.Place unCommandButton et une Listbox sur ton UserForm"
je suis débutant et je t'avoue que je ne comprens pas tellement cette phrase.

quand tu écris :
"MyName = Dir("C:\Mes documents\*.txt*", vbNormal)"

ce que je voudrais en fait c'est lister TOUT les fichiers des répertoires et sous répertoires de "C:\Mes documents" par exemple.
Comme un "dir /s c:\mes documents"

Je pense que je vais continuer avec ce bon vieux dos....

A+
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
0
Merci
Je connais rien à VBA.

Sous VB6, même problème: le dir ne liste que ce qu'il y a à la racine du répertoire.

Sous VB6, il faut parcourir l'arboresence et faire un dir dans chaque répertoire.

A chaque arrivée dans un répertoire, tu fais un Dir sur les dossiers. Tu stockes tous les chemin de ces dossier dans un tableau (redimenssionable de préférence).

Tu liste les fichiers qui t'intéresse.

Tu passes au répertoire suivant dans ton tableau.

L'arboresence est parcouru quand tu est arrivé au dernier chemin de ton tableau qui s'agrandit en permanence.

Bonne chance si tu es débutant !

(Redim preserve sous VB6, commmande utile pour les tableaux)
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Dernière intervention
9 juin 2006
0
Merci
Voici un bout de code à mettre dans un module standard ...

Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long

Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Private F() As String, FCount As Long

Private Sub RecurseDir(path As String)
Dim i As Long
Erase F
FCount = 0
ListDir path
For i = 1 To FCount
Debug.Print F(i)
Next
End Sub

Private Sub ListDir(path As String)
Dim D() As String
Dim tmp As String
Dim DCount As Long
Dim i As Long

DCount = 0
tmp = Dir(path, vbDirectory)
While tmp <> ""
If tmp <> "." And tmp <> ".." Then
If GetFileAttributes(path & tmp) And FILE_ATTRIBUTE_DIRECTORY Then
DCount = DCount + 1
ReDim Preserve D(DCount)
D(DCount) = path & tmp & ""
Else
FCount = FCount + 1
ReDim Preserve F(FCount)
F(FCount) = path & tmp
End If
End If
tmp = Dir
Wend
For i = 1 To DCount
ListDir (D(i))
Next
End Sub

Appelle la fonction RecurseDir() en lui donnant en argument le chemin du répertoire à lister et tu obtiens la liste des fichiers dans le tableau F()

Christophe
Messages postés
14
Date d'inscription
jeudi 15 septembre 2005
Dernière intervention
19 octobre 2005
0
Merci
magnifique
j'ai juste à rajouté un truc du genre

Sub yo()

RecurseDir ("d:\prog")
i = 1
For i = 1 To UBound(F)
Range("A" & i) = F(i - 1)
Next i


End Sub

merci beaucoup
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Dernière intervention
9 juin 2006
0
Merci
DE NADA !

Christophe

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.