Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim os As Byte 'déclare la variable os (OffSet)
Range("D16:E16").ClearContents 'efface le contenu de la plage D16:E16
If Application.Intersect(Target, Range("D16:E16")) Is Nothing Then Exit Sub 'si le double-clic a lieu ailleurs que dans la plage D16:E16, sort de la procédure
If Range("B16").Value = "" Then MsgBox "Veuillez renseigner un Critère Ville !": Range("B16").Select: Exit Sub 'si B16 est vide message, sort de la procédure
If Range("C16").Value = "" Then MsgBox "Veuillez renseigner un Critère Année !": Range("C16").Select: Exit Sub 'si C16 est vide message, sort de la procédure
Cancel = True 'annule le mode édition lié ua double-clic
Application.ScreenUpdating = False 'masque les rafraîchiseements d'écran
dl = Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière cellule éditée dl de la colonne 1 (=A)
Set pl = Range("A2:A" & dl) 'définit la plage pl
Select Case Target.Address(0, 0) 'agit en fonction de l'adresse de la cellule double-cliquée
Case "D16" 'cas D16
os = 3 'définit l'offset os
Range("E16").Value = "" 'vide la cellule E16
Case "E16" 'cas E16
os = 4 'définit l'offset os
Range("D16").Value = "" 'vide la cellule D16
End Select 'fin de l'action en fonction de...
Range("A1").AutoFilter 'active le filtre automatique
Range("A1").AutoFilter field:=1, Criteria1:=Range("B16").Value 'filtre la colonne 1 avec la ville en B16 comme critère
For Each cel In pl.SpecialCells(xlCellTypeVisible) 'boucle sur toutes les cellules visibles de la plage pl
'condition : si l'année est comprise entre les bornes Min/max
If Range("C16").Value <= cel.Offset(0, 2) And Range("C16").Value >= cel.Offset(0, 1).Value Then
Target.Value = cel.Offset(0, os).Value 'place dans la cellule double-cliquée la valeur de la cellule décalée de os colonnes à droite
Exit For 'sort de la boucle
End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
Range("A1").AutoFilter 'désactive le filtre automatique
Application.ScreenUpdating = True 'affiche les rafraîchiseements d'écran
End Sub