trouver un fichier sur le PC

  • Initiateur de la discussion Initiateur de la discussion Dan
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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
 
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
 
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
 
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
145
Retour