voilà une procédure qui fera ça assez simplement.
Option Explicit
Private Function RecupereFichiers(Rep As String)
Dim Fs As Object, Boucle As Long, Tableau()
Set Fs = Application.FileSearch
With Fs
.LookIn = Rep
.Filename = "*.xls"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
ReDim Tableau(1 To .FoundFiles.Count)
For Boucle = 1 To .FoundFiles.Count
Tableau(Boucle) = .FoundFiles(Boucle)
Next Boucle
RecupereFichiers = Tableau
Else
RecupereFichiers = False
End If
End With
End Function
Sub OuvreFichiers()
Dim NomFichier As String
Dim Dossier, Fichiers, Boucle As Long
Dim NomDernier As String, NomTemp As String, Numero As Long
Const Rapport As String = "Rapport_"
'pour récupérer le chemin du dossier si on ne le connaît pas
'sinon on peut mettre simplement :
'Dossier = "C:\...."
Dossier = Application.GetOpenFilename("Dossier (*.xls),*.xls", , "Sélectionner le premier fichier")
If Dossier = False Then Exit Sub
Dossier = Left(Dossier, InStrRev(Dossier, "\"))
Fichiers = RecupereFichiers(CStr(Dossier))
If IsArray(Fichiers) Then
For Boucle = 1 To UBound(Fichiers)
NomFichier = Fichiers(Boucle)
If InStr(1, NomFichier, Rapport, vbTextCompare) > 0 Then
NomTemp = Mid(NomFichier, InStrRev(NomFichier, "\") + 1)
NomTemp = Left(NomTemp, InStrRev(NomTemp, ".") - 1)
NomTemp = Mid(NomTemp, Len(Rapport) + 1)
If Val(NomTemp) > Numero Then
NomDernier = NomFichier
Numero = Val(NomTemp)
End If
End If
Next Boucle
End If
Workbooks.Open NomFichier
End Sub