IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Rechercher un fichier en connaissant son nom et son extension


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Rechercher un fichier en connaissant son nom et son extension
    Bonjour à tous
    Voila ma question:

    Comment je peux faire pour qu'à partir du nom d'un fichier et son extension (exemple "test.xlsm") le rechercher sur l'ordinateur (dans tous les répertoires) pour pouvoir récupérer à la fin son chemin complet ? (ex je récupère dans une variable le chemin du répertoire où se situe le fichier cherché: "C:\Mes doc\moi\test.xlsm")

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Une piste avec le code suivant à copier dans un module standard.
    Adaptez, à votre usage, les 2 paramètres dans la Sub aa()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Declare Function SearchTreeForFile& Lib "imagehlp" ( _
      ByVal RootPath As String, ByVal InputPathName As String, ByVal OutputPathBuffer As String)
    Declare Function SHGetSpecialFolderLocation& Lib "shell32.dll" ( _
      ByVal hwnd As Long, ByVal csidl As Long, ByRef ppidl As ITEMIDLIST)
    Declare Function SHGetPathFromIDList& Lib "shell32.dll" ( _
      ByRef pidl As Long, ByVal pszPath As String)
     
      '/// Types ///
    Type SHITEMID
      cb As Long
      abID As Byte
    End Type
    Type ITEMIDLIST
      mkid As SHITEMID
    End Type
     
    Const CSIDL_DESKTOP As Long = &H0
     
    Sub aa()
    Dim Reponse As String
     
    '--- Adapter les 2 paramètres (ATTENTION : on ne peut pas directement chercher dans la racine C:) ---
    Reponse = ResearchFile("C:\Documents and Settings", "DataObject.xlsm")
    '----------------------------------------------------------------------------------------------------
     
    If Reponse <> "" Then MsgBox Reponse
    End Sub
     
    Function ResearchFile(Dossier As String, Fichier As String) As String
    Const MAX_PATH = 260
    Dim Tampon$
    Dim Ret&
    Dim Racine$
    Dim A$
    '###################################################################################
    '### Il est impossible de traiter directement le répertoire racine (chez moi C:) ###
    '### Si le fichier recherché n'existe pas, PLANTAGE du système.                  ###
    '###################################################################################
    A$ = PathSpecial(CSIDL_DESKTOP)
    Racine$ = Mid(A$, 1, InStr(1, A$, "\") - 1)
    If UCase(Dossier) = UCase(Racine$) Or UCase(Dossier) = UCase(Racine$) & "\" Then
      MsgBox "Impossible de traiter directement le répertoire racine " & Racine$ & vbCrLf & vbCrLf & _
             "Veuillez lui apparenter un de ses sous-dossiers."
      Exit Function
    End If
    '###################################################################################
    '--- Recherche du chemin du fichier ---
    Tampon$ = Space(MAX_PATH)
    Ret& = SearchTreeForFile(Dossier, Fichier, Tampon$)
    If Ret& <> 0 Then
      ResearchFile = Left$(Tampon$, InStr(1, Tampon$, Chr$(0)) - 1)
    Else
      MsgBox "Fichier introuvable"
    End If
    End Function
     
    '### Recherche de dossier spécial pour pouvoir en déterminer la racine par la suite ###
    Function PathSpecial(SpecialFolder As Long) As String
    Dim Retour&
    Dim A$
    Dim IDL As ITEMIDLIST
      Retour& = SHGetSpecialFolderLocation(0, SpecialFolder, IDL)
      If Retour& = 0 Then
        A$ = Space(512)
        Retour& = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal A$)
        PathSpecial = Left(A$, InStr(A$, vbNullChar) - 1)
      End If
    End Function

  3. #3
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,

    Sans douter de la solution proposée par PMO2017, autre solution adaptable avec Fso
    Un Usf avec un bouton de commande "CommandButton1", une listbox "ListBox1", la référence "Microsoft Scripting Runtime" cochée (voir image)

    Les codes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Option Explicit
    Dim fso As New FileSystemObject
    Dim fld As Folder
     
     
    Private Function FindFile(ByVal sFol As String, sFile As String, _
       nDirs As Long, nFiles As Long) As Currency
       Dim tFld As Folder, tFil As File, FileName As String
     
       On Error GoTo Catch
       Set fld = fso.GetFolder(sFol)
       FileName = Dir(fso.BuildPath(fld.Path, sFile), vbNormal Or _
                      vbHidden Or vbSystem Or vbReadOnly)
       While Len(FileName) <> 0
          FindFile = FindFile + FileLen(fso.BuildPath(fld.Path, _
          FileName))
          nFiles = nFiles + 1
          ListBox1.AddItem fso.BuildPath(fld.ShortPath, FileName)  ' a adapter
          'ou ListBox1.AddItem  FileName
          FileName = Dir()  ' Get next file
          DoEvents
       Wend
       Label1 = "Recherche " & vbCrLf & fld.Path & "..."
       nDirs = nDirs + 1
       If fld.SubFolders.Count > 0 Then
          For Each tFld In fld.SubFolders
             DoEvents
             FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs, nFiles)
          Next
       End If
       Exit Function
    Catch:  FileName = ""
           Resume Next
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CommandButton1_Click()
     Dim nDirs As Long, nFiles As Long, lSize As Currency
       Dim sDir As String, sSrchString As String
       sDir = InputBox("Repertoire de départ", _
                       "Vous pouvez modifier", ThisWorkbook.Path)
       sSrchString = InputBox("Type de fichier", _
                       "exemple", "*.xl*")
       Label1.Caption = "Recherche " & vbCrLf & UCase(sDir) & "..."
       lSize = FindFile(sDir, sSrchString, nDirs, nFiles)
       MsgBox Str(nFiles) & " Fichiers trouvés dans" & Str(nDirs) & _
              " repertoire(s)", vbInformation
       MsgBox "Total taille = " & lSize & " bytes"
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

Discussions similaires

  1. [XL-2010] Ouvrir fichier Excel avec une partie de son nom
    Par juluseless dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/10/2014, 14h12
  2. ne pas avoir son nom associé à son nom de domaine
    Par mapmip dans le forum Webmarketing
    Réponses: 6
    Dernier message: 18/11/2013, 11h14
  3. Recherche d'un repertoire avec une partie de son nom[D7] [XP]
    Par LHT dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 21/08/2009, 16h28
  4. Recuperer le contenu d'un fichier avec son nom et son chemin
    Par varfendell dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 16/07/2008, 09h47
  5. Réponses: 2
    Dernier message: 18/01/2008, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo