IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Evaluer la similitude entre 2 chaines de caractères [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Par défaut Evaluer la similitude entre 2 chaines de caractères
    Bonjour,
    Dans le cadre d'une saisie d'une identité par 2 textbox (Nom et prénom) que je concatène, je souhaite comparer cette chaine de caractère à une liste pour m'assurer que ce nom-prénom n'a pas déjà été saisie mais d'une manière approchante.

    Vérifier l'exactitude de 2 chaines de caractères n'est pas un problème, par contre je voudrai passer outre les problèmes de saisies liés à des caractères inversés, des tirets saisie ou pas dans les prénoms composés, des caractères accentués ou pas ... en évaluant un niveau de similitude, du coup si la similitude est supérieur à 80% (12 caractères sur 15 correct) un message alertant l'utilisateur apparait.

    Merci de votre aide, car là, je ne vois vraiment pas comment faire...

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Ci-dessous une possibilité. Dans l'exemple je compare la cellule A1 à la cellule B1, à adapter avec tes TextBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub test()
    Dim Long1 As Integer, Long2 As Integer, Verif As Double, x As Integer
     
    Long1 = Len([A1])
    Long2 = Len([B1])
     
    If Long1 < Long2 Then
        For x = 1 To Long1
            If Mid([A1], x, 1) = Mid([B1], x, 1) Then Verif = Verif + 1
        Next
        If Verif >= Long2 * 0.8 Then
            MsgBox "NOMS SIMILAIRES"
        Else
            MsgBox "NOMS DIFFERENTS"
        End If
    Else
        For x = 1 To Long2
            If Mid([A1], x, 1) = Mid([B1], x, 1) Then Verif = Verif + 1
        Next
        If Verif >= Long1 * 0.8 Then
            MsgBox "NOMS SIMILAIRES"
        Else
            MsgBox "NOMS DIFFERENTS"
        End If
    End If
    End Sub

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Par défaut
    Merci Fring,
    Juste pour bien comprendre le fonctionnement, ta macro compare pour la même position l'équivalence entre les caractères de chaque chaine. J'ai bien compris ?

    En tout cas c'est un très bon début, par contre, il faut que je complète par une équivalence des lettres accentuées ou pas.

    Mais je suis déjà très content car je ne voyais vraiment par quel bout prendre cette comparaison.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    on traite habituellement ce pb en préparant les deux chaines
    évacuation des accents espaces tirets mise en majuscule

    cela pourrait ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Function prepare(x As String) As String
    Dim i As Integer
    Dim moncar As String
    For i = 1 To Len(x)
    moncar = Mid(x, i, 1)
    Dim tempo As String
    Select Case moncar
      Case "é", "è", "ê", "ë"
      moncar = "e"
      Case "â"
      moncar = "a"
      Case moncar = "ù"
      moncar = "u"
      Case " ", "-"
      moncar = ""
    End Select
    tempo = tempo & UCase(moncar)
    Next i
    prepare = UCase(tempo)
    End Function

    ensuite la distance de levensthein permet de mesurer l'écart entre les chaines

    tu trouveras une implémentation ici http://www.merriampark.com/ld.htm#VB

  5. #5
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par Monjarno Voir le message
    Juste pour bien comprendre le fonctionnement, ta macro compare pour la même position l'équivalence entre les caractères de chaque chaine. J'ai bien compris ?
    Oui

    Pour ce qui est des accentués, Random t'a donné la solution, insérer les deux chaînes de caractères dans deux variables de type String après les avoir nettoyées de tous les caractères parasites et ensuite passer ces deux variables dans la boucle de vérification ou via la solution plus pro de Levenshtein (que je ne connaissais pas, merci Random )

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Par défaut
    Merci beaucoup, grâce à votre aide, je vais pouvoir avancer sérieusement.

    Et hop résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/06/2008, 21h14
  2. Réponses: 6
    Dernier message: 15/05/2008, 15h20
  3. requête where entre deux chaines de caractères
    Par soltani1 dans le forum Développement
    Réponses: 2
    Dernier message: 04/10/2007, 09h34
  4. requête where entre deux chaines de caractères
    Par soltani1 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/10/2007, 09h34
  5. espace entre deux chaines de caractères
    Par Pitou5464 dans le forum Access
    Réponses: 2
    Dernier message: 09/08/2006, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo