Sub Explorer(p_strFichier As String, p_strCheminDepart As String, Optional p_oFld As Scripting.Folder)
'Déclaration de la procédure
'p_strFichier : nom du fichier à rechercher
'p_strCheminDepart : chemin de départ de la recherche
'p_oFld : répertoire dans lequel la recherche est effectuée, optionnel
On Error GoTo err
    'Gestion des erreurs avec une étiquette err
    
    Dim oFSO As Scripting.FileSystemObject
    Dim oFld As Scripting.Folder
    Dim oFl As File
    
    'Déclaration de variables pour le système de fichiers (FSO), le dossier et le fichier
    
    If p_oFld Is Nothing Then
        'Si p_oFld n'est pas spécifié, instanciation du FSO
        Set oFSO = New Scripting.FileSystemObject
        'Accède au répertoire de départ de la recherche
        Set p_oFld = oFSO.GetFolder(p_strCheminDepart)
    End If
    
    'Recherche du fichier "CRT 2022 V2.xlsm" dans le répertoire p_oFld
    Set oFl = p_oFld.Files("CRT 2022 V2.xlsm")
    'Affiche le chemin du fichier dans une boîte de message
    MsgBox oFl.Path
    
SubDir:
    'Explore les sous-dossiers
    For Each oFld In p_oFld.SubFolders
        'Pour chaque sous-dossier, lance la procédure Explorer
        Explorer p_strFichier, p_strCheminDepart, oFld
        'Permet de mettre à jour les événements
        DoEvents
    Next oFld
    
fin:
    'Sortie de la procédure
    Exit Sub
    
err:
    'Traitement des erreurs
    Select Case err.Number
        Case 53: 'Erreur 53 : fichier non trouvé
            Resume SubDir
        Case Else:
            'Erreur inconnue
            MsgBox "Erreur inconnue"
            Resume fin
    End Select
End Sub