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

lister contenu répertoire

13 réponses
Avatar
Elicend_News
Bonjour,

savez vous s'il est possible de lister le contenu d'un répertoire (ex, un
CD, avec les sous répertoires) avec une macro ?

merci d'avance!

@ plus
Elicend
________________________

Attention adresse e-mail :
inconicoAfreePOINTfr
A = @
POINT = .
________________________

3 réponses

1 2
Avatar
ng
Salut,

Oui, remplace

Call ListFolder("D:04-Divers Perso10-Excelessais excel", True, True)



par

Call ListFolder("D:04-Divers Perso10-Excelessais excel", True, False)

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Elicend_News wrote:
Salut,
Merci à vous deux pour vos réponses!
alors franchement, je suis pas débutant, mais presque, et sans le code
complet, j'avoue que je n'aurai pas ete capable de le faire de la
meme facon seul !

par contre, je l'ai modifié, car en le lancant, je voyais bien qu'il
travaillait, mais ne m'affichait rien! j'ai mis :
Public Sub FileFound(strFileName As String)
Debug.Print strFileName

var01 = var01 + 1 ' nouveau !
Cells(var01, 1).Value = strFileName ' nouveau

End Sub

et pour appeler :
Sub test()
'Call ListFolder("c: mon chemin", True (recursivité), True(lister
seulement les dossiers))
Call ListFolder("D:04-Divers Perso10-Excelessais excel", True,
True)

End Sub

mais je remarque qu'exel ne liste que les répertoires : est ce
possible de lister aussi les fichiers ?

merci beaucoup en tous cas !

elicend.


Avatar
Elicend_News
gloups !

j'ai ete gros débutant sur ce coup la !

merci, ca marche nikel et ca répond parfaitement à mon besoin !

elicend

"ng" a écrit dans le message de
news:
Salut,

Oui, remplace

> Call ListFolder("D:04-Divers Perso10-Excelessais excel", True, True)

par

Call ListFolder("D:04-Divers Perso10-Excelessais excel", True, False)

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Elicend_News wrote:
> Salut,
> Merci à vous deux pour vos réponses!
> alors franchement, je suis pas débutant, mais presque, et sans le code
> complet, j'avoue que je n'aurai pas ete capable de le faire de la
> meme facon seul !
>
> par contre, je l'ai modifié, car en le lancant, je voyais bien qu'il
> travaillait, mais ne m'affichait rien! j'ai mis :
> Public Sub FileFound(strFileName As String)
> Debug.Print strFileName
>
> var01 = var01 + 1 ' nouveau !
> Cells(var01, 1).Value = strFileName ' nouveau
>
> End Sub
>
> et pour appeler :
> Sub test()
> 'Call ListFolder("c: mon chemin", True (recursivité), True(lister
> seulement les dossiers))
> Call ListFolder("D:04-Divers Perso10-Excelessais excel", True,
> True)
>
> End Sub
>
> mais je remarque qu'exel ne liste que les répertoires : est ce
> possible de lister aussi les fichiers ?
>
> merci beaucoup en tous cas !
>
> elicend.




Avatar
ng
ReBonjour,

Juste une petite correction dans la déclaration de ListFolder(), mettre :
Public Sub ListFolder(ByVal strFolderPath As String, Optional bRecursive As
Boolean = False, Optional bDirOnly As Boolean = False)

Ce n'est pas une fonction.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

ng wrote:
Salut,

J'oublais, voici un exemple :

Utilisation : Call ListFolder("c: mon chemin", True (recursivité),
True(lister seulement les dossiers))

Il suffit de mettre le code ci-dessous dans un module :

option explicit

Private Declare Function FindFirstFile Lib "kernel32" Alias
"FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As
WIN32_FIND_DATA) As Long Private Declare Function FindClose Lib
"kernel32" (ByVal hFindFile As Long) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias
"FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As
WIN32_FIND_DATA) As Long
Const MAX_PATH = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
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 Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type

Private Function StripNulls(OriginalStr As String) As String
If (InStr(OriginalStr, vbNullChar) > 0) Then _
OriginalStr = Left$(OriginalStr, InStr(OriginalStr,
vbNullChar) - 1) StripNulls = OriginalStr
End Function

Public Function ListFolder(ByVal strFolderPath As String, Optional
bRecursive As Boolean = False, Optional bDirOnly As Boolean = False)
As Boolean
Dim dwID As Long, lpFindDATA As WIN32_FIND_DATA
Dim bContinue As Boolean
Dim strFileName As String
If Right$(strFolderPath, 1) <> "" Then _
strFolderPath = strFolderPath & ""
Do
If dwID = 0 Then
dwID = FindFirstFile(strFolderPath & "*", lpFindDATA)
bContinue = True
Else
bContinue = FindNextFile(dwID, lpFindDATA)
End If
strFileName = StripNulls(lpFindDATA.cFileName)
If strFileName <> "." And strFileName <> ".." And bContinue
Then If bDirOnly Then
If (lpFindDATA.dwFileAttributes And
FILE_ATTRIBUTE_DIRECTORY) Then _
Call FileFound(strFolderPath & strFileName)
Else
Call FileFound(strFolderPath & strFileName)
End If
If bRecursive And (lpFindDATA.dwFileAttributes And
FILE_ATTRIBUTE_DIRECTORY) Then
Call ListFolder(strFolderPath & strFileName, True,
bDirOnly) End If
End If
Loop Until Not bContinue
Call FindClose(dwID)
End Function

Public Sub FileFound(strFileName As String)
Debug.Print strFileName
End Sub



ng wrote:
Salut,

On utilise les APIs FindFirstFile(), FindNextFile() et FindClose().


Elicend_News wrote:
Bonjour,

savez vous s'il est possible de lister le contenu d'un répertoire
(ex, un CD, avec les sous répertoires) avec une macro ?

merci d'avance!

@ plus
Elicend
________________________

Attention adresse e-mail :
inconicoAfreePOINTfr
A = @
POINT = .
________________________






1 2