Function LaPlusProche(ByVal Nom As String, PlageCellules As Range, Optional ScoreMini As Single = 0.5) As Variant
Dim listeRefs As Variant
Dim i As Integer
Dim Res As Double, oldRes As Double
'
' Si le scoremini n'est pas entre 0 et 1 alors renvoyer #VALEUR!
If ScoreMini < 0 Or ScoreMini > 1 Then
LaPlusProche = CVErr(xlErrValue)
Exit Function
End If
'
' Valeur par défaut : Non trouvé (#NA!)
LaPlusProche = CVErr(xlErrNA)
'
' Tenter de déterminer la forme de la plage de cellules
With PlageCellules
If .Columns.Count > .Rows.Count Then
'
' Horizontale (plus de colonnes que de lignes)
' on prend la première ligne
listeRefs = Application.Transpose(PlageCellules.Rows(1))
Else
'
' Verticale ou carrée
' On prend la première colonne
listeRefs = PlageCellules.Columns(1)
End If
End With
For i = 1 To UBound(listeRefs)
'
' Score de similarité
Res = Simil(Nom, listeRefs(i, 1))
'
' Ne conserver le score et la chaine
' que si le score est supérieur à l'ancien retenu
If Res >= ScoreMini And Res > oldRes Then
oldRes = Res
LaPlusProche = listeRefs(i, 1)
End If
Next i
Erase listeRefs
End Function