Bonjour,
Je souhaite extraire la liste des sous dossiers contenus dans un dossier.
J'ai trouvé le code de Silkyroad ci-dessous qui répond partiellement à mes besoins.
Celui-ci fonctionne parfaitement cependant je souhaiterais :
1- N'extraire que le premier niveau de sous-dossier de ce dossier (je ne veux pas récupérer les sous-dossiers des sous-dossiers).
2- Afficher la liste des résultats à partir de la cellule B3 (par exemple). Les autres résultats seraient en B4, B5, ...
3- Afficher les résultats par ordre alphabétique.
Que dois-je modifier dans le code ci-dessous pour respecter les points 1, 2 et 3 ?
Un grand Merci pour votre aide.
Cdlt.
Jérôme.
Voici le code proposé par Silkyroad :
Sub listeDossiersEtSousDossiers()
Dim Racine As String
Application.ScreenUpdating = False
Racine = "P:\ENERGIE\2018\IDs"
Cible = nbSeparateur(Racine)
ListeReps Racine, True
Application.ScreenUpdating = True
i = 0
End Sub
Sub ListeReps(strDossier As String, strSousDossier As Boolean)
' adapté de Ole P Erlandsen
Dim Fso As Object, SourceFolder As Object
Dim SubFolder As Object
On Error GoTo Fin
Set Fso = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = Fso.GetFolder(strDossier)
If strSousDossier Then
For Each SubFolder In SourceFolder.subfolders
i = i + 1
'pour recuperer le chemin complet
'Cells(i, nbSeparateur(SubFolder.Path) - Cible) = SubFolder.Path
'
'pour recuperer uniquement le nom du dossier
Cells(i, nbSeparateur(SubFolder.Path) - Cible) = SubFolder.Name
ListeReps SubFolder.Path, strSousDossier
Next SubFolder
End If
Fin:
End Sub
Function nbSeparateur(Chemin As String) As Byte
Dim m As Integer
Dim Nb As Byte
For m = 1 To Len(Chemin)
If Mid(Chemin, m, 1) = "\" Then
Nb = Nb + 1
m = m + 1
End If
Next m
nbSeparateur = Nb
End Function