Un équivalent du 'dir /s" de dos (VBA)

Résolu
maciew Messages postés 14 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 19 octobre 2005 - 22 sept. 2005 à 11:16
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre 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+

7 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
22 sept. 2005 à 13:30
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
3
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
22 sept. 2005 à 11:49
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.
0
maciew Messages postés 14 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 19 octobre 2005
22 sept. 2005 à 12:13
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+
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
22 sept. 2005 à 13:20
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)
0

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

Posez votre question
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
22 sept. 2005 à 13:29
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
0
maciew Messages postés 14 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 19 octobre 2005
22 sept. 2005 à 14:17
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
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
22 sept. 2005 à 16:23
DE NADA !

Christophe
0
Rejoignez-nous