Recherche nom sous dossier

Bonjour,

j ai un fichier s appelant "tom__revA.pdf" se trouvant dans un répertoire "mesdocs". Je souhaiterais trouver le chemin de ce fichier pdf dans tous les sous dossiers et creer un lien dans une cellule envoyant vers ce fichier.

j ai actuellement essayer ce code mais il ne fonctionne pas

Sub Recherche()

chemin = Dir("V:\mesdocs")

Do While chemin <> ""

If chemin <> "tom_revA*" Then

chemin = Dir

Else

MsgBox ("Le fichier n'existe pas")

End If

Loop

End Sub

pourriez vous me dire pourquoi il me renvoie pas le chemin ?

Merci

Bonjour,

Essaies comme ça :

Sub Recherche()
Dim chemin$, fichiers$
  chemin = Dir("V:\mesdocs\tom_revA*")
  Do While chemin <> ""
    fichiers = fichiers & vbCr & "- " & chemin
    chemin = Dir
  Loop
  If fichiers <> "" Then
    MsgBox "Fichiers trouvés : " & fichiers
  Else
    MsgBox ("Aucun fichier trouvé")
  End If
End Sub

Bonjour,

j ai un fichier s appelant "tom__revA.pdf" se trouvant dans un répertoire "mesdocs".

pas bien clair. Pas dans un sous-répertoire de "mesdocs" plutôt ?
eric

Oui c est dans un sous dossier des mesDocs, et je ne sais pas lequel.

Et je souhaiterai retourner le chemin de ce fichier sous une variable.

Lorsque je met a = Dir ca ne marche pas.

Merci

Bonjour,

Pour chercher un (ou des) fichier(s) dans un dossier (et ses sous dossiers) :

' Note : il faut activer la référence (dans Outils > Références ...) à Microsoft Scripting Runtime
'
Option Explicit
Option Private Module

Public Type typScan
  Folder As String
  File As String
  InSubFolders As Boolean
  BinaryCompare As Boolean
  Files As Variant
  Count As Long
End Type

Sub Test()
' test recherche fichiers
Dim scan As typScan

  scan.Folder = "V:\mesdocs"
  scan.File = "tom__revA.pdf"
  scan.InSubFolders = True
'  scan.BinaryCompare = True
  Call RechercheFichiers(scan)
  If scan.Count > 0 Then
    MsgBox scan.Count & " fichier(s) trouvé(s) :" & vbCrLf & "- " & Join(scan.Files, vbCrLf & "- ")
  Else
    MsgBox "Aucun fichier trouvé"
  End If

End Sub

Public Sub RechercheFichiers(scan As typScan)
' Recherche les fichiers
Dim dic As New Dictionary
  Call ChercheFichiers(dic, scan.Folder, scan.File, scan.InSubFolders, scan.BinaryCompare)
  scan.Count = dic.Count
  If dic.Count > 0 Then
    scan.Files = dic.Keys
  End If
End Sub

Private Sub ChercheFichiers(dicFichiers As Dictionary, ByVal strChemin As String, ByVal strFichier As String, _
                            ByVal blnSousDossiers As Boolean, ByVal blnComparaisonBinaire As Boolean)
' Procédure récursive qui liste les fichiers trouvé dans le dossier (et des sous-dossiers)
'
' Arguments : dicFichiers           [in/out]  Chemin du dossier à explorer
'             strChemin             [in]      Chemin du dossier à explorer
'             strFichier            [in]      Nom du fichier à chercher, accepte les caractères génériques.
'             blnSousDossiers       [in]      Vrai = Recherche dans les sous-dossiers
'             blnComparaisonBinaire [in]      Vrai = comparaison binaire (prend en compte la casse)
'
'————————————————————————————————————————————————————————————————————————————————————————————————————————————————
'
Dim objFSO As FileSystemObject         'File System Object
Dim objRep As Scripting.Folder         'Dossier à analyser
Dim objSubRep As Scripting.Folders     'Collection de Sous-dossiers
Dim objSubRepItem As Scripting.Folder  'Sous-dossier
Dim objSubFile As Scripting.Files      'Collection des fichiers du dossier
Dim objSubFileItem As Scripting.File   'Fichier cherché

  On Error Resume Next
  'Explorer le dossier
  Set objFSO = New FileSystemObject
  Set objRep = objFSO.GetFolder(strChemin)                  'dossier
  If blnSousDossiers Then
    Set objSubRep = objRep.SubFolders                       'sous-dossiers
    '- traiter chaque sous-dossier
    For Each objSubRepItem In objSubRep
      ' appel recursif
      Call ChercheFichiers(dicFichiers, objSubRepItem.Path, strFichier, blnSousDossiers, blnComparaisonBinaire)
    Next
  End If
  Set objSubFile = objRep.Files                             'fichiers
  '- traiter chaque fichier
  If strFichier = vbNullString Then strFichier = "*"
  For Each objSubFileItem In objSubFile
    If blnComparaisonBinaire Then
      If objSubFileItem.Name Like strFichier Then dicFichiers(objSubFileItem.Path) = ""
    Else
      If LCase(objSubFileItem.Name) Like LCase(strFichier) Then dicFichiers(objSubFileItem.Path) = ""
    End If
  Next
  Set objFSO = Nothing
  Set objRep = Nothing
  Set objSubRep = Nothing
  Set objSubRepItem = Nothing
  Set objSubFile = Nothing
  Set objSubFileItem = Nothing

End Sub

Bonjour

Ce code me parait très bien. Cependant, il me dit que l'option private module n'est pas possible dans un objet. Sauriez vous pourquoi ?

Merci

Parce qu'il faut mettre ce code dans un module standard, pas dans un module de classe (objet perso ou objet Excel feuille ou classeur)

Rechercher des sujets similaires à "recherche nom dossier"