Make your own free website on Tripod.com

Home
Home

--- Soumis par  Dev Ashish---

Repérer un fichier.

(Q) Comment chercher mon disque rigide pour trouver un fichier de nom donné? comment obtenir son répertoire?

(A) Le premier exemple est pour Access 97 seulement, pour Access 95, voir l'alternative.

On peut utiliser l'objet FileSearch d'Office 97, mais pour ce faire, s'assurer de cocher "Microsoft Office 8.0 Object Library" ( MSO97.DLL  dans le répertoire d' Office ) sous Tools/References (Outils/Librairies) avant d'exécuter le code suivant.

Copier-coller le code suivant dans un nouveau module.

'******************** Code Start ************************
Function fReturnFilePath(strFilename As String, _
    strDrive As String) As String

Dim varItm As Variant
Dim strFiles As String
Dim strTmp As String
    
    If InStr(strFilename, ".") = 0 Then
        MsgBox "Désolé!! Le nom complet est requis", vbCritical
        Exit Function
    End If
    
    strFiles = ""
    With Application.FileSearch
        .NewSearch
        .LookIn = strDrive
        .SearchSubFolders = True
        .FileName = strFilename
        .MatchTextExactly = True
        .FileType = msoFileTypeAllFiles
        If .Execute > 0 Then
            For Each varItm In .FoundFiles
                strTmp = fGetFileName(varItm)
                If strFilename = strTmp Then
                    fReturnFilePath = varItm
                    Exit Function
                End If
            Next varItm
        End If
    End With
End Function


Private Function fGetFileName(strFullPath) As String
Dim intPos As Integer, intLen As Integer
    intLen = Len(strFullPath)
    If intLen Then
        For intPos = intLen To 1 Step -1
            'Repérer le dernier  \
            If Mid$(strFullPath, intPos, 1) = "\" Then
                fGetFileName = Mid$(strFullPath, intPos + 1)
                Exit Function
            End If
        Next intPos
    End If
End Function
'******************** Code End **************************

Puis, à partir de votre code, appeler la fonction un peu comme suit:

strFilePath=fReturnFilePath("network.wri","C:")

(Note: Si FindFast n'est pas activé, la recherche prendra plus de temps)

Alternative: Pour  Access 95 (également pour Access 97 ), vous pouvez utiliser la fonction suivante comme substitution à l'objet  FileSearch.



'******************** Code Start **************************
Private Declare Function apiSearchTreeForFile Lib "ImageHlp.dll" Alias _
        "SearchTreeForFile" (ByVal lpRoot As String, ByVal lpInPath _
        As String, ByVal lpOutPath As String) As Long

Function fSearchFile(ByVal strFilename As String, _
            ByVal strSearchPath As String) As String
'Selon le permier rencontré
    Dim lpBuffer As String
    Dim lngResult As Long
    fSearchFile = ""
    lpBuffer = String$(1024, 0)
    lngResult = apiSearchTreeForFile(strSearchPath, strFilename, lpBuffer)
    If lngResult <> 0 Then
        If InStr(lpBuffer, vbNullChar) > 0 Then
            fSearchFile = Left$(lpBuffer, InStr(lpBuffer, vbNullChar) - 1)
        End If
    End If
End Function

'******************** Code End **************************