bonjour,
une proposition via une fonction personnalisée.
Function findmatch(remisesclient, tableauremises)
'remisesclient : plage des remises d'un client
'tableauremises : plage des remises possibles, en première colonne le numéro de la remise
optimum = 999999 ' à minimiser
indexoptimum = 0 'meilleur match trouvé
For Each r In tableauremises.Rows
ctridentique = 0
ecart = 0
For Each c In r.Columns
If c.Column > 1 Then
If c = remisesclient(c.Column - 1) Then
ctridentique = ctridentique + 1
Else
ecart = ecart + Abs(c.Value - remisesclient(c.Column - 1).Value)
End If
End If
Next c
If ctridentique = r.Columns.Count - 1 Then 'modèle trouvé
findmatch = r(1).Value
Exit Function
End If
ecart = ecart + (r.Columns.Count - ctridentique) * 100
If ecart < optimum Then optimum = ecart: indexoptimum = r(1).Value
Next r
findmatch = indexoptimum
End Function
intégrée dans le fichier ci-joint, avec exemple d'utilisation (voir formules en C22:C24)