Function correction(plage As Range, Optional infraTerrestre As Boolean = False) As Double
Dim valeurs As Variant
Dim tmp As Double, fini As Boolean, i As Long
valeurs = Application.Transpose(Application.Index(plage.Value, , 1))
While UBound(valeurs) > 1
Do 'tri décroissant
fini = True
For i = 1 To UBound(valeurs) - 1
If valeurs(i) < valeurs(i + 1) Then
tmp = valeurs(i)
valeurs(i) = valeurs(i + 1)
valeurs(i + 1) = tmp
fini = False
End If
Next i
Loop Until fini
' correction
Select Case valeurs(UBound(valeurs) - 1) - valeurs(UBound(valeurs))
Case Is <= 1
valeurs(UBound(valeurs) - 1) = valeurs(UBound(valeurs) - 1) + 3
Case Is <= 3
valeurs(UBound(valeurs) - 1) = valeurs(UBound(valeurs) - 1) + 2
Case Is <= 9
valeurs(UBound(valeurs) - 1) = valeurs(UBound(valeurs) - 1) + 1
End Select
' éliminer 1 valeur
ReDim Preserve valeurs(1 To UBound(valeurs) - 1)
Wend
If infraTerrestre Then correction = Application.Max(30, valeurs(1)) Else correction = valeurs(1)
End Function