Fusionner procédures & sous procédure
Bonjour,
Pour divers problèmes rencontrés, je voudrai obtenir qu' une seul procédure pour tout ce code.
Ceci m'aiderai également à comprendre l'interaction des sous-routines.
En vous remerciant, Cordialement
Sub test_01()
TousLesDossiers "C:\00_box\", 0
End Sub
Sub TousLesDossiers(LeDossier$, Idx As Long)
Dim FSO As Object, Dossier As Object
Dim sousRep As Object, Flder As Object
Dim Trouve_chemin As String
Dim Cherch_doss As String
Cherch_doss = "ici"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dossier = FSO.GetFolder(LeDossier)
'examen du dossier courant
For Each Flder In Dossier.SubFolders
Idx = Idx + 1
Trouve_chemin = Flder.Path
If Trouve_chemin Like "*" & Cherch_doss & "*" Then
MsgBox "Trouvé le chemin " & Trouve_chemin
Exit Sub
End If
Next
'traitement récursif des sous dossiers
For Each sousRep In Dossier.SubFolders
TousLesDossiers sousRep.Path, Idx
Next sousRep
Set FSO = Nothing
End Subbonjour,
Ce n'est pas une procédure et une sous procédure : C'est une procédure qui en appelle une autre dite récursive !
Il y a deux manières de faire une procédure qui grimpe un escalier :
Soit tu écris une procédure qui grimpe les 400 marches qui te permettent d'accéder a ton but... Mais si tu ne sais pas exactement le nombre d'étages à grimper t'es embêté !
Soit tu écris une procédure qui te permet de grimper une marche, qui s'appelle elle même tant qu'il y a encore une marche à grimper et qui s'arrête quand le but est atteint !
Les programmeurs aiment bien cette dernière parce qu'elle permet de grimper au premier étage de ton immeuble comme au dernier de la tour Eiffel. Et la procédure s'appelle elle-même tant que le but n'est pas atteint elle grimpe une marche...
Me suis-je bien fait comprendre ?
A+
Bonjour,
C’est très bien expliquer et je comprends bien.
Le même résultat ne peut être obtenu avec une simple boucle ?
Je dois incorporer ce code dans un autre et l’appel de ces procédures me complique bien la tâche. Je ne suis pas programmeur et jusqu’à maintenant je me suis débrouillé avec des bouts de code trouvés ici et là. Toutefois j’aime bien comprendre ce que je fais et là ce n’est plus le cas.
Je voulais juste trouver le chemin d’ un répertoire précis sans en connaître le répertoire parent et ça fait une semaine que je galère pour ce petit truc…
En tous les cas, je te remercie pour ton explication
Cordialement
Désolé je ne suis pas du tout spécialiste de ce genre de question : Il vaudrait peut-être mieux que tu reprennes la question en la formulant sous un autre angle.
D'habitude on cherche à partir de ThisWorkbook.Path...
A+
Bonsoir,
comme dit précédemment, les deux procédures sont basées sur une logique récursive. pour en faire une seule procédure, il faut changer la logique et s'affranchir du mode récursif.
voici une proposition, basée sur une pile. (on prend le dernier dossier de la pile, on réduit la pile de 1, on empile tous les sous-dossiers que l'on trouve dans ce dossier, et on répète tant que la pile n'est pas vide).
Sub TousLesDossiers()
Dim FSO As Object, Dossier As Object
Dim sousRep As Object, Flder As Object
Dim Trouve_chemin As String
Dim Cherch_doss As String
Dim rep()
Set FSO = CreateObject("Scripting.FileSystemObject")
ReDim rep(1 To 1)
rep(1) = "C:\00_box\"
k =1
Cherch_doss = "ici"
While k > 0
LeDossier = rep(k)
Set Dossier = FSO.GetFolder(LeDossier)
k = k - 1
'examen du dossier courant
For Each Flder In Dossier.SubFolders
Trouve_chemin = Flder.Path
k = k + 1
ReDim Preserve rep(1 To k)
rep(k) = Trouve_chemin
If Trouve_chemin Like "*" & Cherch_doss & "*" Then
MsgBox "Trouvé le chemin " & Trouve_chemin
Exit Sub
End If
Next
Wend
Set FSO = Nothing
End SubBonjour,
MERCI
Je cherchais cette fonction depuis des lustres et j’ai constaté que je n’étais pas le seul…
Je ne sais pas si j’ose poster ce code sous un titre plus évocateur afin de permettre à d’autres de trouver plus facilement
Nouveau sur ce forum, je suis surpris par le nombre de questions et surtout de réponses.
Là, l’internet prend tout son sens.
Encore un grand merci pour cette précieuse aide.
Cordialement