Isoler des doublons potentiels dans une table

Bonjour,

Je dois nettoyer des donnees avant de les integrer dans une Bdd.

Pour cela j'aimerai pouvoir isoler les doublons potentiels. J'ai deja effectue un nettoyage pour les "purs doublons" mais je seche un peu pour isoler les doublons potentiels, comme par exemple:
- Elizabethe / Elisabethe / Elisabeth
ou
- F345 / F-345

Une idee serait de comparer le pourcentage de caracteres identiques et au dessus d'un certain pourcentage de mettre en valeur la ligne. Malheureusement j'ai quelques soucis qd a la realisation...

Est ce que quelqu'un aurait une idee?
Nota: les donnees sont sur excel a l'heure actuelle mais je n'ai rien contre utiliser un autre outil qui permettrait de faire ca.

Merci pour vos reponses !

3 réponses

  1. Modérateur
    Salut,

    tu pourrais peut-être explorer la voie de suppression des caractères spéciaux afin d'éliminer les -,. et autres joyeusetés.

    Par contre, pour la graphie différente des noms, à part un truc du genre soudex...
    0
    1. Comme j'ai bien peur que tu aies peu de réponses supplémentaires, j'aurais tendance à te conseiller d'explorer la voie avec soundex et de prévoir le traitement du reliquat avec des méthodes rudimentaires de ton cru (filtrer sur une différence d'1 car non alphanum par ex) en attendant l'arrivée d'une méthode polyvalente

      bon courage
      0
      1. Merci Flu,

        Malheureusement, dans mon cas ce que tu appelles le reliquats correspond a 90% des enregistrements... :))
        Je ne desespere pas: si quelqu'un est pris d'insomnie et veut bien m'aider, je suis preneur!

        Anyway, si quelqu'un est interresse par la creation d'une formule excel SOUNDEX(), voici le code Vba pour le faire (de peu d'utilite dans mon cas...):

        Function SOUNDEX(Surname As String) As String
        ' Developed by Richard J. Yanco
        ' This function follows the Soundex rules given at
        ' http://home.utah-inter.net/kinsearch/Soundex.html
        
            Dim Result As String, c As String * 1
            Dim Location As Integer
        
            Surname = UCase(Surname)
        
        '   First character must be a letter
            If Asc(Left(Surname, 1)) < 65 Or Asc(Left(Surname, 1)) > 90 Then
                SOUNDEX = ""
                Exit Function
            Else
        '       St. is converted to Saint
                If Left(Surname, 3) = "ST." Then
                    Surname = "SAINT" & Mid(Surname, 4)
                End If
        
        '       Convert to Soundex: letters to their appropriate digit,
        '                     A,E,I,O,U,Y ("slash letters") to slashes
        '                     H,W, and everything else to zero-length string
        
                Result = Left(Surname, 1)
                For Location = 2 To Len(Surname)
                    Result = Result & Category(Mid(Surname, Location, 1))
                Next Location
              
        '       Remove double letters
                Location = 2
                Do While Location < Len(Result)
                    If Mid(Result, Location, 1) = Mid(Result, Location + 1, 1) Then
                        Result = Left(Result, Location) & Mid(Result, Location + 2)
                    Else
                        Location = Location + 1
                    End If
                Loop
            
        '       If category of 1st letter equals 2nd character, remove 2nd character
                If Category(Left(Result, 1)) = Mid(Result, 2, 1) Then
                    Result = Left(Result, 1) & Mid(Result, 3)
                End If
            
        '       Remove slashes
                For Location = 2 To Len(Result)
                    If Mid(Result, Location, 1) = "/" Then
                        Result = Left(Result, Location - 1) & Mid(Result, Location + 1)
                    End If
                Next
            
        '       Trim or pad with zeroes as necessary
                Select Case Len(Result)
                    Case 4
                        SOUNDEX = Result
                    Case Is < 4
                        SOUNDEX = Result & String(4 - Len(Result), "0")
                    Case Is > 4
                        SOUNDEX = Left(Result, 4)
                End Select
            End If
        End Function
        
        Private Function Category(c) As String
        '   Returns a Soundex code for a letter
            Select Case True
                Case c Like "[AEIOUY]"
                    Category = "/"
                Case c Like "[BPFV]"
                    Category = "1"
                Case c Like "[CSKGJQXZ]"
                    Category = "2"
                Case c Like "[DT]"
                    Category = "3"
                Case c = "L"
                    Category = "4"
                Case c Like "[MN]"
                    Category = "5"
                Case c = "R"
                    Category = "6"
                Case Else 'This includes H and W, spaces, punctuation, etc.
                    Category = ""
            End Select
        End Function
        0
    2. Salut

      Il existe une fonction SOUNDEX() qui t'est peut-être disponible et qui renvoie une "signature vocale" de la chaine passée en argument : tu pourrais t'en servir pour dire que si deux soundex sont identiques c'est que les chaines qui en sont à l'origine sont similaires ; un bémol toutefois, je crois bien que ce soundex() ne fonctionne qu'en anglais (c'est pour ça que je m'en suis jamais servi)
      0
      1. Salut Flu,

        Merci beaucoup, j'ai explore cette piste et malheureusement cela ne marche pas des lors qu'il y a des nombres dans le mot (donc cela ne marche pas pour l'exemple F-345 et F345).

        Quelqu'un aurait-il une autre idee?
        0