Re,
Bé voilà, Monsieur je râle tout le temps.
Option Explicit
' // Constante à adapter !!!
Const Dossier As String = ""
Private Sub UserForm_Activate()
If Dossier = vbNullString Then MsgBox "Vous devez définir la constante : Dossier": Unload Me
End Sub
Private Sub BtExit_Click()
Unload Me
End Sub
Private Sub BtOuvrir_Click()
Dim selectedFile As String
If ListBox1.ListIndex <> -1 Then
selectedFile = ListBox1.List(ListBox1.ListIndex, 1)
Call Shell("explorer.exe """ & selectedFile & """", vbNormalFocus)
Else
MsgBox "Vous devez d'abord sélectionner un fichier dans la liste.", vbExclamation
End If
End Sub
Private Sub FillListPdfFiles(Control As Object, Dossier As String)
With Control
.Clear
.List = GetPdfFiles(Dossier, Me.TextBox1.Value)
End With
End Sub
Sub GetFiles(folder As Object, PdfFiles As Collection, filter As String, fso As Object)
Dim subFolder As Object
Dim file As Object
For Each file In folder.Files
If LCase(fso.GetExtensionName(file.Name)) = "pdf" And InStr(1, file.Name, filter, vbTextCompare) > 0 Then
PdfFiles.Add file
End If
Next file
For Each subFolder In folder.SubFolders
Call GetFiles(subFolder, PdfFiles, filter, fso)
Next subFolder
End Sub
Function GetPdfFiles(directory As String, filter As String) As Variant
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim PdfFiles As Collection
Set PdfFiles = New Collection
Dim folder As Object
Set folder = fso.GetFolder(directory)
GetFiles folder, PdfFiles, filter, fso
Dim Result() As Variant
ReDim Result(1 To PdfFiles.Count, 1 To 2)
Dim Counter As Long
For Counter = 1 To PdfFiles.Count
Result(Counter, 1) = PdfFiles(Counter).Name
Result(Counter, 2) = PdfFiles(Counter).Path
Next Counter
GetPdfFiles = Result
End Function
Private Sub TextBox1_Change()
FillListPdfFiles ListBox1, Dossier
End Sub