Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim pl As Range 'déclare la variable pl (PLage)
Dim vac As String 'déclare la variable vac (Valeur À Chercher)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim df As Double 'déclare la variable df (DiFférence Maturité)
Dim min As Double 'déclare la variable min (valeur MINimale)
Dim li As Byte 'déclare la variable li (LIgne de la valeur minimale)
'si le double-clic à lieu ailleurs que dans la plage C16:E18, sort de la procédure
If Application.Intersect(Target, Range("C16:E18")) Is Nothing Then Exit Sub
Cancel = True 'évite le mode édition lié au double-clic
Set pl = Range("B3:B11") 'définit la plage pl
vac = Cells(Target.Row, 2) & " " & CStr(Cells(15, Target.Column)) 'définit la valeur à chercher
Set r = pl.Find(vac, , xlValues, xlWhole) 'définit la recherche r
min = 100 'définit un valeur de départ pour la valeur minimale
If Not r Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
pa = r.Address 'définit la première adresse pa
Do 'exécute
df = Abs(CDbl(r.Offset(0, 1)) - CDbl(Cells(15, Target.Column))) 'définit la variable df (en valeur absolue)
If df < min Then min = df: li = r.Row 'si df est inférieur à min alors min = df, définit la ligne li
Set r = pl.FindNext(r) 'redéfinit r (prochaine occurrence)
Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en pa
Else 'sinon (si il n'y a pas d'occurrence)
Exit Sub 'sort de la procédure
End If 'fon de la condition
Target.Value = Cells(li, 4).Value 'place dans la celluel double-cliquée le spread correspondant
End Sub