Chercher un fichier dans un dossier et ses sous dossiers

Bonjours à toutes et tous,

Je cherche actuellement à rechercher un fichier, je m'explique.

J'ai actuellement un dossier avec des sous dossiers qui eux aussi ont des sous dossiers et ainsi de suite, et je dispo d'une liste de nom de fichier (sans leur extension), du style : FICH0001, FICH0002 [...], FICH4250, FICH4251 etc.

Je souhaiterai rechercher dans mes dossier si un fichier qui commence par "FICH0001" avec n'importe quoi après existe, cependant je ne sais pas comment faire pour que la recherche s'effectue aussi dans les sous dossiers.

N'hésitez pas si vous avez des questions.

Merci d'avance.

Bonjour Zapsalis,

Ce lien va t'aider grandement ...

Désolé je me suis trompé de sujet ...

ric

Bonjour,

Appeler la procédure : recherche_nom_fichier.

Attention, la recherche peut être longue selon le dossier de départ choisi. Ci-dessous code :

Option Explicit

Sub recherche_nom_fichier()

    Dim nom_fichier As String, nom_fichier_complet As String, répertoire As String
    Dim Fso As Object, dossier_départ As Object

    '// création objet FilesSystem
    Set Fso = CreateObject("Scripting.FilesystemObject")

    '// Choix du nom_fichier
    nom_fichier = InputBox("Choisir le nom du fichier", "Recherche Fichier")
    If nom_fichier = Empty Then MsgBox "nom fichier non choisi": Exit Sub

    '// Choix du répertoire de départ
    répertoire = Empty
    choix_répertoire répertoire
    If répertoire = Empty Then Exit Sub

    '// recherche des fichiers
    Set dossier_départ = Fso.GetFolder(répertoire)
    nom_fichier_complet = Empty
    rech_fichier Fso, dossier_départ, nom_fichier, nom_fichier_complet
    If nom_fichier_complet = Empty Then MsgBox "fichier non trouvé" _
    Else MsgBox nom_fichier_complet

    '// libération objet FilesSystem
    Set Fso = Nothing

End Sub

Sub choix_répertoire(répertoire As String)
    Dim dossier As Object, item As Object

    Set dossier = CreateObject("shell.application").BrowseForFolder(0, "Choisir votre répertoire de départ", 0, "Bureau")
    If dossier Is Nothing Then MsgBox "aucun répertoire choisi": Exit Sub
    For Each item In dossier.ParentFolder.items
        If item.Name = dossier.Title Then répertoire = item.Path & "\": Exit For
    Next item

End Sub

Sub rech_fichier(Fso As Object, dossier As Object, nom1 As String, nom2 As String)
    Dim sous_dossier As Object, fichier As Object
    Dim nom As String, extension_fichier As String

    '// recherche fichiers
    For Each fichier In dossier.Files
        extension_fichier = Fso.GetExtensionName(fichier.Path)
        If nom1 = fichier.Name Then nom2 = fichier.Path: Exit For
        nom = Replace(fichier.Name, "." & extension_fichier, "") 'supprime l'extension du nom
        If nom = nom1 Then
            If MsgBox("Retenez-vous ce nom de fichier avec son extension ? " & fichier.Name, vbYesNo, "Question") = vbYes Then nom2 = fichier.Path: Exit For
        End If
    Next fichier

    '// recherche sous-dossier
    For Each sous_dossier In dossier.SubFolders
        If nom2 <> Empty Then Exit For
        If sous_dossier.Attributes <> vbDirectory + vbSystem + vbHidden Then rech_fichier Fso, sous_dossier, nom1, nom2
    Next

End Sub

Bonjour Thev,

Merci pour ta réponse, cependant, il y a quelques petites choses qui ne collent pas pour moi, je vais un peu plus détaillé.

Je souhaiterai avoir la possibilité de vérifier ou bien de dire à ma fonction de rechercher dans tel dossier (et ses sous dossiers qui vont bien), car pour un cas je dois chercher dans tous le dossier et les sous dossiers, mais dans un autre cas, je dois seulement chercher dans 2 sous dossiers de ce dit dossier (avec les sous sous dossier qui vont avec).

De plus, lorsque je rentre le nom du fichier il faut que je connaisse tout le nom du fichier, malheureusement ce n'est pas le cas, je connais que le début du style "FICH4250" alors que le fichier, lui, s'appelle "FICHE4250_xx_123456789_AZA.pdf" (par exemple), ce qui ne fonctionne donc pas.

Merci d'avance

je souhaiterai avoir la possibilité de vérifier ou bien de dire à ma fonction de rechercher dans tel dossier (et ses sous dossiers qui vont bien), car pour un cas je dois chercher dans tous le dossier et les sous dossiers, mais dans un autre cas, je dois seulement chercher dans 2 sous dossiers de ce dit dossier (avec les sous sous dossier qui vont avec).
Le choix du répertoire de départ (procédure : choix_répertoire) le permet.

De plus, lorsque je rentre le nom du fichier il faut que je connaisse tout le nom du fichier, malheureusement ce n'est pas le cas, je connais que le début du style "FICH4250"
Une petite modification à apporter à la procédure : rech_fichier. Ci-dessous code modifié :

Sub rech_fichier(Fso As Object, dossier As Object, nom1 As String, nom2 As String)
    Dim sous_dossier As Object, fichier As Object
    Dim nom As String, extension_fichier As String

    '// recherche fichiers
    For Each fichier In dossier.Files
        extension_fichier = Fso.GetExtensionName(fichier.Path)
        If nom1 = fichier.Name Then nom2 = fichier.Path: Exit For
        nom = Replace(fichier.Name, "." & extension_fichier, "") 'supprime l'extension du nom
        If nom Like "*" & nom1 & "*" Then
            If MsgBox("Retenez-vous ce nom de fichier avec son extension ? " & fichier.Name, vbYesNo, "Question") = vbYes Then nom2 = fichier.Path: Exit For
        End If
    Next fichier

    '// recherche sous-dossier
    For Each sous_dossier In dossier.SubFolders
        If nom2 <> Empty Then Exit For
        If sous_dossier.Attributes <> vbDirectory + vbSystem + vbHidden Then rech_fichier Fso, sous_dossier, nom1, nom2
    Next

End Sub

Bonjour Zapsalis, thev, le forum,

Un essai ... basé sur le code thev ...

Avec choix des dossiers de recherche ... et listage des trouvailles ...

ric

Merci beaucoup pour vos réponses, j'ai réussi à faire ce que je voulais faire grâce à vos aides.

Bonne journée à vous !

Bonjour Zapsalis,

Excellent ...

ric

Rechercher des sujets similaires à "chercher fichier dossier dossiers"