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

VBA Access Discussion :

[VBA] Algo de recherche de doublons [À faire]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 27
    Points
    27
    Par défaut [VBA] Algo de recherche de doublons
    Ce n'est pas vraiment une question 100% access, mais comme c'est avec ca que je travaille:

    Je cherche à epurer une liste de clients, dans laquelle sont presents pas mal de doublons. Le probleme c'est que certains doublons ne sont pas identiques, puisque des fautes de frappes empechent Access de les reperer.
    J'ai eu sous la main il y a 3 ans un algo qui permettait de rechercher les doublons avec des differences sur 2-3 lettres. Malheureusement, je n'ai pu le garder pour cause de depart precipité de mon pays d'accueil.
    Bien sur, il sortait pas mal de faux doublons aussi, mais je recherche un algo qui pourrait faire ce travail.

    Merci d'avance à ceux qui aurait ca sous la main.

  2. #2
    Tan
    Tan est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Points : 158
    Points
    158
    Par défaut
    Il y a un forum spécial pour les algo, recherches dedans, puis poses-y ta question si tu ne trouves pas.

  3. #3
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Points : 3 264
    Points
    3 264
    Par défaut
    voila ce que je te propose:

    cette fonction permet de noter l'alignement entre deux chaines de caractères

    en entrée:
    Str1,Str2 les chaines à comparer
    ScoreMatch le score à affecter si on aligne deux caractères identiques
    ScoreMisMatch le score à affecter si on aligne deux caractères différents
    ScoreGap le score à affecter si on décide d'insérer un trou pour améliorer l'alignement
    Casse booléen pour savoir si il faut prendre en compte ou non la casse (non par défaut)


    pr les scores je te conseil des réglages du type (3,-2,-1)

    j'ai vu cet algorithme en cours, il sert à faire des alignements de séquences nucléotidiques ou protéiques mais il semble tout à fait indiqué dans ton cas. Note que le score dépend de la taille des chaines à comparer mais tu peux le pondérer en le divisant par le produit de la taille des chaines (si tu fais ca, pense à changer le type de la function qui est en Long)

    j'allais oublier le code...

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Public Function ScoreAlignement(Str1 As String, Str2 As String, _
                ScoreMatch As Integer, ScoreMismatch As Integer, _
                ScoreGap As Integer, Optional Casse As Boolean = False) _
                As Long
     
    Dim i As Long
    Dim j As Long
    Dim TempScore As Integer
    Dim Max As Long
    Dim Gauche As Long
    Dim Haut As Long
    Dim Diag As Long
     
    'enlève les espaces superflus à droite et à gauche
    Str1 = Trim(Str1)
    Str2 = Trim(Str2)
     
    'les deux chaines doivent contenir au moins un caractère
    If IsNull(Str1) Or IsNull(Str2) Then
        Exit Function
    ElseIf Len(Str1) = 0 Or Len(Str2) = 0 Then
        Exit Function
    End If
     
    ReDim TableauScore(0 To Len(Str1), 0 To Len(Str2))
     
    'initialisation du tableau de score
    TableauScore(0, 0) = 0
    For i = 1 To Len(Str1)
        TableauScore(i, 0) = TableauScore(i - 1, 0) + ScoreGap
    Next i
     
    For j = 1 To Len(Str2)
        TableauScore(0, j) = TableauScore(0, j - 1) + ScoreGap
    Next j
     
    If Casse Then
        Str1 = UCase(Str1)
        Str2 = UCase(Str2)
    End If
     
    For i = 1 To Len(Str1)
        For j = 1 To Len(Str2)
            If Mid(Str1, i, 1) = Mid(Str2, j, 1) Then
                TempScore = ScoreMatch
            Else
                TempScore = ScoreMismatch
            End If
     
            'score si on aligne le i-ème caractère de Str1 et le j-ème
            'caractère de Str2
            Diag = TableauScore(i - 1, j - 1) + TempScore
     
            'score si on aligne le j-ème caractère de Str2 avec un gap
            Gauche = TableauScore(i - 1, j) + ScoreGap
     
            'score si on aligne le i-ème caractère de Str1 avec un gap
            Haut = TableauScore(i, j - 1) + ScoreGap
     
            'on choisit le score le plus important
            Max = IIf(Diag >= Gaughe, Diag, Gauche)
            Max = IIf(Haut >= Max, Haut, Max)
            TableauScore(i, j) = Max
     
        Next j
    Next i
     
    ScoreAlignement = TableauScore(Len(Str1), Len(Str2))
     
    End Function
    je me souviens plus du nom de l'homme qui a inventé cet algo mais c'était dans les années 60-70.[/b]
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut il est po con le gars ...
    fo po oubler de mettre le tag resolu :)

  5. #5
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Ben dis-donc, il en apprend des choses, MasterOfChakhaL, dans son Corail Paris-Toulouse !! Bravo
    (\ _ /)
    (='.'=)
    (")-(")

  6. #6
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Points : 3 264
    Points
    3 264
    Par défaut
    tu sais Paris Toulouse, ca fait 6h25, ca laisse du temps...
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Je n'ai qu'une chose à rajouter: Un grandMERCI!!! 8)

    Bon, je l'ai pas encore essayer, je pense de toute maniere qu'il va falloir faire quelques tests pour voir les bonnes valeurs à passer à la fonction (je fais une recherche sur nom & Prenom)!

    En tout cas, bon voyage!

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

Discussions similaires

  1. [AC-2003] Recherche de doublons avec VBA
    Par Dokko974 dans le forum VBA Access
    Réponses: 9
    Dernier message: 30/12/2010, 21h00
  2. algo de recherche en profondeur
    Par sylsau dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/02/2005, 22h59
  3. Recherche de doublons "non strict"
    Par Oluha dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/01/2005, 09h21
  4. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13
  5. Réponses: 2
    Dernier message: 19/08/2003, 18h04

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