Sub Macro1()
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
Dim em As Integer 'déclare la variable em (Ecart Minimum)
Dim val As Integer 'déclare la variable val (VALeur)
Set pl = Range("D1:D14") 'définit la plage pl
Set r = pl.Find(Range("A19"), , xlValues, xlWhole) 'définit la variable r
If Not r Is Nothing Then 'condition initiale : si il existe au moins une occurrence de r dans pl
Range("D19") = r 'place l'occurrence trouvée en D19
Else 'sinon
em = Application.WorksheetFunction.Max(pl) 'définit la variable em (le chiffre le plus haut de pl)
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
If cel.Value <> "" Then 'condition 1 : si la cellule n'est pas vide
'condition 2 : si la valeur absolue de la différence A19 et la cellule est inférieure à l'écart minimum
If Abs(Range("A19").Value - cel.Value) < em Then
em = Abs(Range("A19").Value - cel.Value) 'redéfinit l'écart minimum
val = cel.Value 'définit la variable val
End If 'fin de la condition 2
End If 'fin de la condition 1
Next cel 'prochaine cellule cel de la plage pl
Range("D19") = val 'place la valeur la plus proche en D19
End If 'fin de la condition initiale
End Sub