Bonjour
Dans un premier temps j'écrirais en VBA une fonction pour chaque critère qui déterminera le nombre de points à retourner pour ce critère. Exemple pour un code postal :
1 2 3 4 5 6 7 8 9
| Function CompareCP(strSource As String, strCompareA As String) As Integer
'Retourne 10pts si même CP
'Retourne 5 pts si même dept
If strSource = strCompareA Then
CompareCP = 10
ElseIf Left(strSource, 2) = Left(strCompareA, 2) Then
CompareCP = 5
End If
End Function |
La fonction CompareCP retourne 10 points si les deux enregistrements sont dans le même secteur, 5 si uniquement dans le même département et 0 dans le reste des cas. Pour chaque fonction il faudra donc déterminer comment pondérer les résultats.
Ensuite, il sera facile d'écrire une requête qui permettra de faire les comparaisons entre la saisie utilisateur depuis le formulaire et la valeur du champ concerné pour chaque enregistrement. On peut aussi utiliser un recordset qui sera chargé de ramener les infos de la fiche incident concernée mais le principe est le même puisqu'il s'agit de construire la requête en VBA.
Exemple si l'utilisateur a saisi le CP : 69006
SELECT IDIncident, CompareCp("69006",CPIncident) FROM TblIncident
On aura donc comme ça, et en ajoutant autant de fonctions qu'il le faut le taux de rapprochement pour chaque colonne.
SELECT IDIncident, CompareCp("69006",CPIncident), CompareMontantDommage(10000,MontantDommageIncident) FROM TblIncident
Après, on peut en faire la somme, un pourcentage : ce que tu appelles le matching level.
En triant sur cette somme en ordre décroissant et en prenant les X premières valeurs on aura donc les X cas les plus approchant.
Techniquement, ce n'est pas compliqué. Le seul bémol est que ma solution n'est pas très souple. Si on se rend compte avec le temps que les règles de calculs sont trop généreuse ou à l'inverse imprécise, il faudra remodifier le code VBA. Cependant si les critères sont bien établis dès le début et avec suffisament de tests, l'affinage des recherches pourra rentrer dans le cadre de la maintenance évolutive et non corrective. Car si tu souhaites quelques choses de beaucoup plus souple avec par exemple la possibilité de donner à l'utilisateur de pondérer les critères, ce sera tout de suite beaucoup plus compliqué 
Et comme je suis trop aimable
je te colle même en lien une fonction de recherche phonétique qui va déjà te permettre de donner du poids à des recherches avec exactitude ou similitude phonétique :
http://access.developpez.com/sources...quete#Soundex1
Partager