XL 2013 Valeur proche

oussema wis

XLDnaute Nouveau
Bonjour,

voila mon problème j'ai deux feuilles qui contient des listes des clients chaque feuille est saisie par une personne donc les noms des clients ne sont pas les mêmes dans les deux feuilles je veux rapprocher les noms par la fonction valeur proche pour recherche le pin de la deuxième feuille dans la première .ci joint une fichier excel

Merci beaucoup.
 

Pièces jointes

  • valeur proche.xlsx
    8.2 KB · Affichages: 19

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Voici une proposition sur la base d'un module vb trouvé là : http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=9353&lngWId=1

La fonction de ce module renvoie un score (entre 0 et 1) de similarité entre deux chaines de caractères.

A partir d'elle j'en ai créé une autre (LaPlusProche) qui compare une chaine à une plage de cellules contenant les chaînes à comparer à la première, elle renvoie la chaine ayant le score de similarité le plus proche.

A utiliser parcimonieusement pour éviter les ralentissements de calculs.

Prévoir des aides à la saisie pour vos utilisateurs plutôt que ce système de correction qui ne sera jamais assez fiable.

Cordialement

[Edition] petite amélioration de la fonction, prenant maintenant en compte une scoremini de similarité à trouvé entre 0 et 1 :
VB:
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
 

Pièces jointes

  • valeur proche.xlsm
    21.3 KB · Affichages: 10
Dernière édition:

Discussions similaires

Réponses
8
Affichages
355

Statistiques des forums

Discussions
312 100
Messages
2 085 290
Membres
102 851
dernier inscrit
didine501