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

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

crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 22 sept. 2005 à 13:30
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
jpleroisse 1788 Messages postés mardi 7 novembre 2000Date d'inscription 11 mars 2006 Dernière intervention - 22 sept. 2005 à 11:49
0
Utile
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.
maciew 14 Messages postés jeudi 15 septembre 2005Date d'inscription 19 octobre 2005 Dernière intervention - 22 sept. 2005 à 12:13
0
Utile
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+
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 22 sept. 2005 à 13:20
0
Utile
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)
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 22 sept. 2005 à 13:29
0
Utile
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
maciew 14 Messages postés jeudi 15 septembre 2005Date d'inscription 19 octobre 2005 Dernière intervention - 22 sept. 2005 à 14:17
0
Utile
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
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 22 sept. 2005 à 16:23
0
Utile
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.