trouver un fichier sur le PC

D

Dan

Guest
Bonjour,

Je suis a la recherche d'idee ou d'une fonction qui me permettrait de trouver rapidement l'emplacement d'un fichier sur le system, ne connaissant pas a l'avance le nombre et le nom des disques ou lecteur...
Merci pour toute aide,

Dan.
 
D

Dan

Guest
Bonjour Dan,

Ben pourquoi tu n'utilises pas la fonction du menu de windows Démarrer / rechercher / fichier dossier

Là bien sûr tu ne peux rechercher qu'un lecteur à la fois

Tiens je vois que tu as pris le même pseudo, il n'y rien de grave mais pour plus de lisibilité et si tu viens souvent sur XLD faudrait peut-être s'arranger là, non ?

@+

Dan
 
E

Eric

Guest
Bonjour à tous & à toutes
Bonjour Dan1 & Dan2 (Qui est qui : lol ...)

de Karl moore avec son adresse ci-dessous -- Jamais essayé --
En réserve au cas où ...

'Vous connaissez le nom d'un fichier mais pas son chemin ?

Declare Function SearchTreeForFile Lib "IMAGEHLP.DLL" _
(ByVal lpRootPath As String, _
ByVal lpInputName As String, _
ByVal lpOutputName As String) As Long

Public Const MAX_PATH = 260

'exemple
Sub test()
MsgBox FindFile("d:", "vbs121.htm")
MsgBox FindFile("d:\", "vbs121.htm")
MsgBox FindFile("", "vbs121.htm")
End Sub

Public Function FindFile(RootPath As String, FileName As String) As String
'Karl Moore, http://www.vbworld.com/files/tip529.html


Dim lNullPos As Long
Dim lResult As Long
Dim sBuffer As String

On Error GoTo FileFind_Error

'fournit par défaut le lecteur courant si non spécifié (fs)
If RootPath = "" Then RootPath = Left$(CurDir, 3)

'Allocate buffer
sBuffer = Space(MAX_PATH * 2)

'Find the file
lResult = SearchTreeForFile(RootPath, FileName, sBuffer)

'Trim null, if exists
If lResult Then
lNullPos = InStr(sBuffer, vbNullChar)
If Not lNullPos Then
sBuffer = Left(sBuffer, lNullPos - 1)
End If
'Return filename
FindFile = sBuffer
Else
'Nothing found
FindFile = vbNullString
End If

Exit Function

FileFind_Error:
FindFile = vbNullString

End Function
 
D

Dan

Guest
Eric,

Merci de ton aide.
J'ai mis au point ton pgm (rien de bien mechant). Il est maintenant fonctionel (voir ci-apres).
A tout hasard, je voudrais aussi dans que la recherche se fasse sur tous les lecteurs present sans pour autant connaitre leur lettre (C, D whatever),
connaitrais tu une solution ?


-------------------------------------------------------------------------------------------
Option Explicit

Const MAX_PATH = 260

Private Declare Function SearchTreeForFile Lib "IMAGEHLP.DLL" (ByVal lpRootPath As String, ByVal lpInputName As String, ByVal lpOutputName As String) As Long

Private Sub Find_Click()
'Gather file to find information
Dim RootName, Name, FilePath As String
RootName = ThisWorkbook.Sheets(1).Range("Root").Value
If RootName <> Empty Then RootName = RootName & ":\"
Name = ThisWorkbook.Sheets(1).Range("File_Name").Value
FilePath = ""
FilePath = FindFile(RootName, Name)
If FilePath = Empty Then FilePath = "File not found..."
ThisWorkbook.Sheets(1).Range("File_Path").Value = FilePath
End Sub

Public Function FindFile(ByVal RootPath As String, ByVal FileName As String) As String

Dim lNullPos As Long
Dim lResult As Long
Dim sBuffer As String

On Error GoTo FileFind_Error

'fournit par défaut le lecteur courant si non spécifié (fs)
If RootPath = "" Then RootPath = Left$(CurDir, 3)

'Allocate buffer
sBuffer = Space(MAX_PATH * 2)

'Find the file
lResult = SearchTreeForFile(RootPath, FileName, sBuffer)

'Trim null, if exists
If lResult Then
lNullPos = InStr(sBuffer, vbNullChar)
If Not lNullPos Then
sBuffer = Left(sBuffer, lNullPos - 1)
End If
'Return filename
FindFile = sBuffer
Else
'Nothing found
FindFile = vbNullString
End If

Exit Function

FileFind_Error:
FindFile = vbNullString

End Function
 
E

Eric

Guest
Bonsoir à tous & à toutes,

Bonsoir Dan2,

Désolé mais je n'ai pas les compétences requises.
J'ai "glané" à droite & à gauche des codes afin
de les exploiter si besoin s'en fait mais je n'y
connait rien en programmation à l'inverse de Vous.
Moi, je travaille au feeling, CA MARCHE où CA NE MARCHE PAS.
If Rep="CA MARCHE" then OK else
APPEL AU SECOURS FORUM des GRANDS

A ++ Eric C
 
D

Dan

Guest
Eric,

Je me suis penche sur les API, et j'ai trouve la solution...
Ci dessous, le pgm complet

--------------------------------------------------------------------------------------------
Option Explicit

Const MAX_PATH = 260

Private Declare Function SearchTreeForFile Lib "IMAGEHLP.DLL" (ByVal lpRootPath As String, ByVal lpInputName As String, ByVal lpOutputName As String) As Long

Private Declare Function GetLogicalDrives Lib "KERNEL32" () As Long

Private Sub Find_Click()
'Gather connected drive

Dim strDrives() As String
Dim intCount As Integer
Dim intIndex As Integer
Dim intDriveCount As Integer

intDriveCount = GetLogicalDrives
For intCount = 0 To 25
If (intDriveCount And 2 ^ intCount) <> 0 Then
ReDim Preserve strDrives(intCount) As String
strDrives(intCount) = Chr$(65 + intCount) & ":\"
End If
Next intCount
Dim iRow, iColumn, i As Integer
iRow = ThisWorkbook.Sheets(1).Range("First_Drive").Cells.row
iColumn = ThisWorkbook.Sheets(1).Range("First_Drive").Cells.column

For i = 0 To UBound(strDrives)
If strDrives(i) = Empty Then strDrives(i) = "..."
ThisWorkbook.Sheets(1).Cells(iRow + i, iColumn).Value = strDrives(i)
Next i


'Gather file to find information
Dim RootName, Name, FilePath As String
RootName = ThisWorkbook.Sheets(1).Range("Root").Value
If RootName <> Empty Then RootName = RootName & ":\"
Name = ThisWorkbook.Sheets(1).Range("File_Name").Value
FilePath = ""
FilePath = FindFile(RootName, Name)
If FilePath = Empty Then FilePath = "File not found..."
ThisWorkbook.Sheets(1).Range("File_Path").Value = FilePath
End Sub

Public Function FindFile(ByVal RootPath As String, ByVal FileName As String) As String
''Karl Moore, http://www.vbworld.com/files/tip529.html
'

'


Dim lNullPos As Long
Dim lResult As Long
Dim sBuffer As String

On Error GoTo FileFind_Error

'fournit par défaut le lecteur courant si non spécifié (fs)
If RootPath = "" Then RootPath = Left$(CurDir, 3)

'Allocate buffer
sBuffer = Space(MAX_PATH * 2)

'Find the file
lResult = SearchTreeForFile(RootPath, FileName, sBuffer)

'Trim null, if exists
If lResult Then
lNullPos = InStr(sBuffer, vbNullChar)
If Not lNullPos Then
sBuffer = Left(sBuffer, lNullPos - 1)
End If
'Return filename
FindFile = sBuffer
Else
'Nothing found
FindFile = vbNullString
End If

Exit Function

FileFind_Error:
FindFile = vbNullString

End Function
 
E

Eric

Guest
Bonjour à tous & à toutes
Bonjour Dan2

Retrouver dans mes archives quelque chose de pas mal &
surtout clair et réutilisable pour nous les petits débutant



'Lister les lecteurs disponibles sur le PC

Sub LecteursDispos()



'Chip Pearson, mpep, traduction/adaptation fs



Dim FSO As Object
Dim Drv As Object
Dim Msg$

Set FSO = CreateObject("Scripting.FileSystemObject")
Msg = "Votre système a " & FSO.Drives.Count & " lecteurs :" & vbLf & vbLf
For Each Drv In FSO.Drives
With Drv
Select Case .DriveType
Case 0 ' unknown
Msg = Msg & "Lecteur: " & .DriveLetter & " est de type inconnu." & vbLf
Case 1 ' removable, e.g., zip
Msg = Msg & "Lecteur: " & .DriveLetter & " est un disque amovible." & vbLf
Case 2 ' fixed, hard drive
Msg = Msg & "Lecteur: " & .DriveLetter & " est un disque dur." & vbLf
Case 3 ' remote
Msg = Msg & "Lecteur: " & .DriveLetter & " est un disque réseau." & vbLf
Case 4 ' CDROM
Msg = Msg & "Lecteur: " & .DriveLetter & " est un CDROM." & vbLf
Case 5 ' ram disk
Msg = Msg & "Lecteur: " & .DriveLetter & " est un disque virtuel." & vbLf
End Select
End With
Next Drv
MsgBox Msg, , "Lecteurs du système"
End Sub


A ++ Eric C
 

Discussions similaires

Statistiques des forums

Discussions
312 333
Messages
2 087 370
Membres
103 528
dernier inscrit
maro