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 Sub

bonjour,

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 Sub

Bonjour,

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

Rechercher des sujets similaires à "fusionner procedures procedure"