recherche de doublons

apfwl.87

XLDnaute Occasionnel
Bonjour à tous

J'ai un fichier (A) avec des clients, qui sont soit des personnes privées soit des entreprises, des écoles ou des associations. J'ai un autre fichier (B) contenant également des données clients. Afin d'éviter d'avoir le client à double, j'aimerais faire une recherche entre A et B et ne garder que les clients du fichier B qui ne sont pas déjà dans le fichier A.

Le problème, c'est que le nom est parfois écrit d'une manière dans A et d'une autre dans B et quand j'écris ma formule de recherche et bien évidemment il ne trouve pas le client. Est-ce qu'il existe un moyen de trouver les doublons avec une partie de texte?

Exemple:
Fichier A, ligne 1: Ecole primaire deCharmey
Fichier B, ligne 30: Ecole de Charmey

ou encore
Fichier A, ligne 10: Entreprise de récupération
Fichier B, ligne 100: Entr. de Récup.

Merci d'avance pour votre aide.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : recherche de doublons

Bonjour,

Voir fonction perso Proche() en pj

proche.gif

Code:
Function Proche(DemClient, cata As Range)
  Set dMotsCat = CreateObject("Scripting.Dictionary")
  Set dref = CreateObject("Scripting.Dictionary")
  i = 1
  For Each c In cata
    dref(CStr(i)) = c.Value
    For Each m In Split(Trim(c.Value), " ")
      dMotsCat(sansAccent(LCase(m))) = dMotsCat(sansAccent(LCase(m))) & CStr(i) & " "
    Next m
    i = i + 1
  Next c
  DemClient = sansAccent(SansPoint(LCase(DemClient)))
  Set dDemClient = CreateObject("Scripting.Dictionary")
  For Each m In Split(DemClient, " ")
    tem = False
    For Each i In dMotsCat.keys
      If i Like m & "*" Then
        tem = True
        Exit For
      End If
    Next i
     If tem Then
      For Each ref In Split(Trim(dMotsCat(i)), " ")
        dDemClient(ref) = dDemClient(ref) + 1
      Next ref
    End If
  Next m
  '-- recherche maxi dans dDemClient
  If dDemClient.Count > 0 Then
   Maxi = Application.Max(dDemClient.items)
   MeilNotePourc = 0
   For Each ref In dDemClient.keys
     If dDemClient(ref) = Maxi Then
        notePourc = Maxi / (UBound(Split(dref(ref), " ")) + 1)
        If notePourc > MeilNotePourc Then
           MeilNotePourc = notePourc
           RefMeilNote = ref
           meilNote = Maxi & "/" & (UBound(Split(Trim(dref(ref)), " ")) + 1)
        End If
     End If
   Next ref
   Proche = dref(RefMeilNote) '& " [" & meilNote & "]"
  Else
   Proche = ""
  End If
End Function

Function SansPoint(chaine)
  a = Split(chaine, " ")
  For i = LBound(a) To UBound(a)
    If Right(a(i), 1) = "." Then a(i) = Left(a(i), Len(a(i)) - 1)
  Next i
  SansPoint = Join(a, " ")
End Function

Function sansAccent(chaine)
   codeA = "ÉÈÊËÔéèêëàçùôûïî"
   codeB = "EEEEOeeeeacuouii"
   temp = chaine
   For i = 1 To Len(temp)
    p = InStr(codeA, Mid(temp, i, 1))
    If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
   Next
   sansAccent = temp
End Function

JB
 

Pièces jointes

  • Proches2.xls
    37 KB · Affichages: 39
  • Proches3.xls
    44.5 KB · Affichages: 38
Dernière édition:

apfwl.87

XLDnaute Occasionnel
Re : recherche de doublons

Bonsoir pascal 21 et boisgontier, désolée de ne pas vous avoir répondu plus tôt. J'étais absente plusieurs jours et je ne poouvais pas consulter mes mails. merci pour vos réponse. Je vais tester ça dès demain. Merci à tous les deux pour votre aide.
 

Discussions similaires

Statistiques des forums

Discussions
312 199
Messages
2 086 159
Membres
103 147
dernier inscrit
tubaman