OVH Cloud OVH Cloud

Répertoires avec ScriptingFileSystemObject

17 réponses
Avatar
Guy FALESSE
Bonjour à tous,

J'ai trouvé cette fonction sur le site de Arnaud (Anor)
C'est très bien, mais comment faire pour trouver les sous-répertoires des
sous-répertoires, lorsqu'il y a plusieurs niveaux et pour touver les
fichiers appartenant à ces niveaux.
J'avais vu aussi une fonction semblable chez Hervé Inissan, mais même
problème.
Sachant que Arnaud a un WE chargé, je fais appel aux autres érudits de ce
forum.
D'avance merci
Guy FALESSE

Function fnGetSubFoldersInDirectory(sPath As String) As String

Dim fso As Object
Dim Directory As Object
Dim SubFolders As Object
Dim Folders As Object
Dim sTmp As String

Set fso = CreateObject("Scripting.FileSystemObject")
Set Directory = fso.GetFolder(sPath)
Set SubFolders = Directory.SubFolders

For Each Folders In SubFolders
sTmp = sTmp & Folders.Name & ";"
Debug.Print Folders.path
Next Folders

If sTmp <> "" Then
sTmp = Left(sTmp, Len(sTmp) - 1) & ""
End If

fnGetSubFoldersInDirectory = sTmp

Set Folders = Nothing
Set SubFolders = Nothing
Set fso = Nothing
Set Directory = Nothing

End Function

10 réponses

1 2
Avatar
Guy FALESSE
Bonjour,
Je demande des conseils à ce sujet, parce que cela me paraît plus rapide
avec ce système qu'avec la fonction dir().
Je pense aussi qu'on sait connaître la date des fichiers, chose que je ne
sais pas si c'est possible avec dir().

Guy FALESSE


"Guy FALESSE" a écrit dans le message de
news:
Bonjour à tous,

J'ai trouvé cette fonction sur le site de Arnaud (Anor)
C'est très bien, mais comment faire pour trouver les sous-répertoires des
sous-répertoires, lorsqu'il y a plusieurs niveaux et pour touver les
fichiers appartenant à ces niveaux.
J'avais vu aussi une fonction semblable chez Hervé Inissan, mais même
problème.
Sachant que Arnaud a un WE chargé, je fais appel aux autres érudits de ce
forum.
D'avance merci
Guy FALESSE

Function fnGetSubFoldersInDirectory(sPath As String) As String

Dim fso As Object
Dim Directory As Object
Dim SubFolders As Object
Dim Folders As Object
Dim sTmp As String

Set fso = CreateObject("Scripting.FileSystemObject")
Set Directory = fso.GetFolder(sPath)
Set SubFolders = Directory.SubFolders

For Each Folders In SubFolders
sTmp = sTmp & Folders.Name & ";"
Debug.Print Folders.path
Next Folders

If sTmp <> "" Then
sTmp = Left(sTmp, Len(sTmp) - 1) & ""
End If

fnGetSubFoldersInDirectory = sTmp

Set Folders = Nothing
Set SubFolders = Nothing
Set fso = Nothing
Set Directory = Nothing

End Function




Avatar
Eric
Bonjour Guy

Si tu rajoutes dans la boucle :
For each Folder in SubFolders
...
fnGetSubFoldersInDirectory (Folders)
Next Folder
tu récupères les sous-repertoires du repertoire en cours.
Pour les fichiers, avec la méthode GetFile peut-être ...


A+
Eric

"Guy FALESSE" écrivait
news::

Bonjour,
Je demande des conseils à ce sujet, parce que cela me paraît plus
rapide avec ce système qu'avec la fonction dir().
Je pense aussi qu'on sait connaître la date des fichiers, chose que je
ne sais pas si c'est possible avec dir().

Guy FALESSE



Avatar
www.eztree-msdn.com \(Laurent Jordi\) Enlever le s à infos pour me contacter par mail
Salut...

Il suffit de rappeler la fonction de façon récursive

Function RecurseSubders(sPath)
Dim fso As Object
Dim SubFolders as Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set SubFolders = fso.GetFolder(sPath).SubFolders

debug.print sPath
For Each Folders In SubFolders
RecurseSubders(Folders.path)
Next
end function

Je ne l'ai pas déboguée, il se peut qu'il y ait des erreurs de syntaxe...

@+

LJ

End Function
"Guy FALESSE" a écrit dans le message de


news:
Bonjour,
Je demande des conseils à ce sujet, parce que cela me paraît plus rapide
avec ce système qu'avec la fonction dir().
Je pense aussi qu'on sait connaître la date des fichiers, chose que je ne
sais pas si c'est possible avec dir().

Guy FALESSE


"Guy FALESSE" a écrit dans le message de
news:
Bonjour à tous,

J'ai trouvé cette fonction sur le site de Arnaud (Anor)
C'est très bien, mais comment faire pour trouver les sous-répertoires
des


sous-répertoires, lorsqu'il y a plusieurs niveaux et pour touver les
fichiers appartenant à ces niveaux.
J'avais vu aussi une fonction semblable chez Hervé Inissan, mais même
problème.
Sachant que Arnaud a un WE chargé, je fais appel aux autres érudits de
ce


forum.
D'avance merci
Guy FALESSE

Function fnGetSubFoldersInDirectory(sPath As String) As String

Dim fso As Object
Dim Directory As Object
Dim SubFolders As Object
Dim Folders As Object
Dim sTmp As String

Set fso = CreateObject("Scripting.FileSystemObject")
Set Directory = fso.GetFolder(sPath)
Set SubFolders = Directory.SubFolders

For Each Folders In SubFolders
sTmp = sTmp & Folders.Name & ";"
Debug.Print Folders.path
Next Folders

If sTmp <> "" Then
sTmp = Left(sTmp, Len(sTmp) - 1) & ""
End If

fnGetSubFoldersInDirectory = sTmp

Set Folders = Nothing
Set SubFolders = Nothing
Set fso = Nothing
Set Directory = Nothing

End Function








Avatar
Guy FALESSE
Salut Eric,
Merci pour ta réponse,
Je viens de tester, il me semble que cela fonctionne malgré que dans la
fenêtre debug, j'aie perdu les premiers directories.
Je vais approfondir cet après midi.
Je vais voir maintenant, la réponse de LJ.
@+

Guy FALESSE


"Eric" a écrit dans le message de
news:
Bonjour Guy

Si tu rajoutes dans la boucle :
For each Folder in SubFolders
...
fnGetSubFoldersInDirectory (Folders)
Next Folder
tu récupères les sous-repertoires du repertoire en cours.
Pour les fichiers, avec la méthode GetFile peut-être ...


A+
Eric

"Guy FALESSE" écrivait
news::

Bonjour,
Je demande des conseils à ce sujet, parce que cela me paraît plus
rapide avec ce système qu'avec la fonction dir().
Je pense aussi qu'on sait connaître la date des fichiers, chose que je
ne sais pas si c'est possible avec dir().

Guy FALESSE





Avatar
Eric
"Guy FALESSE" écrivait news:uDjQ6iyOEHA.2464
@TK2MSFTNGP10.phx.gbl:

Salut Eric,
Merci pour ta réponse,
Je viens de tester, il me semble que cela fonctionne malgré que dans la
fenêtre debug, j'aie perdu les premiers directories.
Je vais approfondir cet après midi.
Je vais voir maintenant, la réponse de LJ.
@+

Guy FALESSE


re Guy,


C'est normal dans la fenêtre Debug. Au delà d'un certain nombre de lignes
tu perds la trace des 1eres infos écrites. Tests sur un repetoire et non
sur un disque dur, tu devrais tout voir. LJ te propose la récursivité comme
moi mais je ne te l'ai pas précisé.

A+
et bon courage
Eric

Avatar
Guy FALESSE
Salut LJ,

Merci pour ta réponse.
Ça marche bien, apparemment et comment ferai-je dès lors pour que les
fichiers contenus dans les différents directories s'affichent.
Si ce n'est pas abuser bien sûr :-)
@+

Guy FALESSE

"www.eztree-msdn.com (Laurent Jordi) Enlever le s à infos pour me contacter
par mail" a écrit dans le message de
news:
Salut...

Il suffit de rappeler la fonction de façon récursive

Function RecurseSubders(sPath)
Dim fso As Object
Dim SubFolders as Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set SubFolders = fso.GetFolder(sPath).SubFolders

debug.print sPath
For Each Folders In SubFolders
RecurseSubders(Folders.path)
Next
end function

Je ne l'ai pas déboguée, il se peut qu'il y ait des erreurs de syntaxe...

@+

LJ

End Function
"Guy FALESSE" a écrit dans le message de


news:
Bonjour,
Je demande des conseils à ce sujet, parce que cela me paraît plus rapide
avec ce système qu'avec la fonction dir().
Je pense aussi qu'on sait connaître la date des fichiers, chose que je
ne


sais pas si c'est possible avec dir().

Guy FALESSE


"Guy FALESSE" a écrit dans le message de
news:
Bonjour à tous,

J'ai trouvé cette fonction sur le site de Arnaud (Anor)
C'est très bien, mais comment faire pour trouver les sous-répertoires
des


sous-répertoires, lorsqu'il y a plusieurs niveaux et pour touver les
fichiers appartenant à ces niveaux.
J'avais vu aussi une fonction semblable chez Hervé Inissan, mais même
problème.
Sachant que Arnaud a un WE chargé, je fais appel aux autres érudits de
ce


forum.
D'avance merci
Guy FALESSE

Function fnGetSubFoldersInDirectory(sPath As String) As String

Dim fso As Object
Dim Directory As Object
Dim SubFolders As Object
Dim Folders As Object
Dim sTmp As String

Set fso = CreateObject("Scripting.FileSystemObject")
Set Directory = fso.GetFolder(sPath)
Set SubFolders = Directory.SubFolders

For Each Folders In SubFolders
sTmp = sTmp & Folders.Name & ";"
Debug.Print Folders.path
Next Folders

If sTmp <> "" Then
sTmp = Left(sTmp, Len(sTmp) - 1) & ""
End If

fnGetSubFoldersInDirectory = sTmp

Set Folders = Nothing
Set SubFolders = Nothing
Set fso = Nothing
Set Directory = Nothing

End Function












Avatar
Guy FALESSE
Salut Eric,

Remarque que les 2 fonctions...fonctionnent.
Merci pour les précisions concernant la fenêtre debug, je ne le savais pas.
Tu m'avais parlé précédemment de Getfile, mais où placer cette commande.
Je viens de le demander à LJ, on verra tout à l'heure.
@+

Guy FALESSE


"Eric" a écrit dans le message de
news:
"Guy FALESSE" écrivait news:uDjQ6iyOEHA.2464
@TK2MSFTNGP10.phx.gbl:

Salut Eric,
Merci pour ta réponse,
Je viens de tester, il me semble que cela fonctionne malgré que dans la
fenêtre debug, j'aie perdu les premiers directories.
Je vais approfondir cet après midi.
Je vais voir maintenant, la réponse de LJ.
@+

Guy FALESSE


re Guy,


C'est normal dans la fenêtre Debug. Au delà d'un certain nombre de lignes
tu perds la trace des 1eres infos écrites. Tests sur un repetoire et non
sur un disque dur, tu devrais tout voir. LJ te propose la récursivité
comme

moi mais je ne te l'ai pas précisé.

A+
et bon courage
Eric



Avatar
Eric
re Guy,

GetFile c'est pas bon car il faut apparemment spécifié le chemin ET le
nom du fichier. Par contre la fonction ci-dessous te donne les fichiers
du repertoire courant, donc à adapter.

Function VoirlesFichiers(sPath As String)
Dim fso As Object
Dim Directory As Object
Dim Files As Object
Dim File As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set Directory = fso.getfolder(sPath)
Set Files = Directory.Files
For Each File In Files
Debug.Print File.Name
Next File
Set File = Nothing
Set Files = Nothing
Set Directory = Nothing
Set fso = Nothing
End Function

A modifier pour lui passer en argument, le fso,le repertoire


A+
Eric


"Guy FALESSE" écrivait
news::

Salut Eric,

Remarque que les 2 fonctions...fonctionnent.
Merci pour les précisions concernant la fenêtre debug, je ne le savais
pas. Tu m'avais parlé précédemment de Getfile, mais où placer cette
commande. Je viens de le demander à LJ, on verra tout à l'heure.
@+

Guy FALESSE


"Eric" a écrit dans le message de
news:
"Guy FALESSE" écrivait news:uDjQ6iyOEHA.2464
@TK2MSFTNGP10.phx.gbl:

Salut Eric,
Merci pour ta réponse,
Je viens de tester, il me semble que cela fonctionne malgré que
dans la fenêtre debug, j'aie perdu les premiers directories.
Je vais approfondir cet après midi.
Je vais voir maintenant, la réponse de LJ.
@+

Guy FALESSE


re Guy,


C'est normal dans la fenêtre Debug. Au delà d'un certain nombre de
lignes tu perds la trace des 1eres infos écrites. Tests sur un
repetoire et non sur un disque dur, tu devrais tout voir. LJ te
propose la récursivité
comme

moi mais je ne te l'ai pas précisé.

A+
et bon courage
Eric







Avatar
Eric
re

Voila, ca devrait répondre à ton besoin

A+
Eric

Function fnGetSubFoldersInDirectory(sPath As String) As String

Dim fso As Object
Dim Directory As Object
Dim subfolders As Object
Dim Folders As Object
Dim sTmp As String

Set fso = CreateObject("Scripting.FileSystemObject")
Set Directory = fso.getfolder(sPath)
Set subfolders = Directory.subfolders
For Each Folders In subfolders
sTmp = sTmp & Folders.Name & ";"
Debug.Print "Répertoire : " & Folders.Path
' Appel de la procédure de visualisation des files
Call VoirlesFichiers(Folders)
fnGetSubFoldersInDirectory (Folders)
Next Folders

If sTmp <> "" Then
sTmp = Left(sTmp, Len(sTmp) - 1) & ""
End If

'fnGetSubFoldersInDirectory = sTmp

Set Folders = Nothing
Set subfolders = Nothing
Set fso = Nothing
Set Directory = Nothing

End Function


Sub VoirlesFichiers(undir As Object)
Dim Files As Object
Dim File As Object
Set Files = undir.Files
For Each File In Files
Debug.Print vbTab & File.Name
Next File
Set File = Nothing
Set Files = Nothing
End Sub
Avatar
Guy FALESSE
Salut Eric,

Merci pour ta fonction, j'ai voulu l'adapter, mais je suis nul parce que
voilà ce que j'ai fait:

Function VoirlesFichiers(sPath As String)
Dim fso As Object
Dim SubFolders As Object
Dim Directory As Object
Dim Files As Object
Dim File As Object
Dim Folders As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set Directory = fso.GetFolder(sPath)
Set SubFolders = fso.GetFolder(sPath).SubFolders
'Set Files = Directory.Files
Set Files = SubFolders.Files
For Each File In Files
Debug.Print File.Name
Next File
Set File = Nothing
Set Files = Nothing
Set Directory = Nothing
Set fso = Nothing
End Function

Je reçois le message d'erreur: propriété ou méthode non gérée par cet objet
et cle pointait sur la ligne:Set Files = SubFolders.Files
Voilà, je ne suis pas plus avancé, enfin, tu m'as déjà fait avancé et
maintenant, je cale :)
@+

Guy FALESSE

"Eric" a écrit dans le message de
news:
re Guy,

GetFile c'est pas bon car il faut apparemment spécifié le chemin ET le
nom du fichier. Par contre la fonction ci-dessous te donne les fichiers
du repertoire courant, donc à adapter.

Function VoirlesFichiers(sPath As String)
Dim fso As Object
Dim Directory As Object
Dim Files As Object
Dim File As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set Directory = fso.getfolder(sPath)
Set Files = Directory.Files
For Each File In Files
Debug.Print File.Name
Next File
Set File = Nothing
Set Files = Nothing
Set Directory = Nothing
Set fso = Nothing
End Function

A modifier pour lui passer en argument, le fso,le repertoire


A+
Eric


"Guy FALESSE" écrivait
news::

Salut Eric,

Remarque que les 2 fonctions...fonctionnent.
Merci pour les précisions concernant la fenêtre debug, je ne le savais
pas. Tu m'avais parlé précédemment de Getfile, mais où placer cette
commande. Je viens de le demander à LJ, on verra tout à l'heure.
@+

Guy FALESSE


"Eric" a écrit dans le message de
news:
"Guy FALESSE" écrivait news:uDjQ6iyOEHA.2464
@TK2MSFTNGP10.phx.gbl:

Salut Eric,
Merci pour ta réponse,
Je viens de tester, il me semble que cela fonctionne malgré que
dans la fenêtre debug, j'aie perdu les premiers directories.
Je vais approfondir cet après midi.
Je vais voir maintenant, la réponse de LJ.
@+

Guy FALESSE


re Guy,


C'est normal dans la fenêtre Debug. Au delà d'un certain nombre de
lignes tu perds la trace des 1eres infos écrites. Tests sur un
repetoire et non sur un disque dur, tu devrais tout voir. LJ te
propose la récursivité
comme

moi mais je ne te l'ai pas précisé.

A+
et bon courage
Eric










1 2