Comparaison de deux feuilles sur trois colonnes

kabamel

XLDnaute Occasionnel
Salut à tous, j'ai un classeur dans lequel il y a deux feuilles "BD1" et "BD2", j'aimerais comparer les 2 feuilles pour recuperer les lignes identiques et les matricules correspondant dans la feuilles "BD2". La clé de comparaison est "Noms et Prenoms", "Père" et "Mère".
Merci pour votre aide.
 

Pièces jointes

  • Compare.xlsx
    12.8 KB · Affichages: 59
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Comparaison de deux feuilles sur trois colonnes

Hello

Voir PJ pour exemple avec des tables et une formule Sommeprod

sinon, pour ne récuperer QUE les lignes communes (donc sans celles qui apparaissent avec 0)
une solution rapide d'exécution (mais que je ne saurai te faire): les dictionnaires
cf par ici
Objet dictionary
 

Pièces jointes

  • Compare.xlsx
    16.6 KB · Affichages: 40

Lolote83

XLDnaute Barbatruc
Re : Comparaison de deux feuilles sur trois colonnes

Re salut,
J'ai vite fait un comparatif entre la solution de JHA (que je salue au passage) et ma solution.
Il y a une différence d'une ligne.
Voir fichier joint pour se rendre compte de la différence.
Les valeurs ont été repérées en jaune
A voir
@+ Lolote83
 

Pièces jointes

  • Copie de KABAMEL - Compare sur 3 colonnes.xlsm
    21.5 KB · Affichages: 56

JHA

XLDnaute Barbatruc
Re : Comparaison de deux feuilles sur trois colonnes

Bonjour à tous,

Mon erreur vient de la comparaison de la BD1 sur la BD2
ci joint un exemple avec comparaison BD2 sur BD1

Bonne remarque lolote83

JHA
 

Pièces jointes

  • Compare (2).xlsx
    18.5 KB · Affichages: 37

néné06

XLDnaute Accro
Re : Comparaison de deux feuilles sur trois colonnes

Bonjour à tous,

J'ai constaté une erreur dans la feuille BD2?
Il y a deux fois le même nom/prénom avec une réf différente, se qui provoque des bugs!
J'ai préparé un programme en VBA avec Tableaux et Dictionary, qui peut être utile sur des gros fichiers.
Au début, ce programme repère les doublons en BD2 et demande de les supprimer ou modifier et sauvegarder.
Relancer le programme après sauvegarde et verifier le résultat.

Sub idem()
Set f1 = Sheets("BD1")
Set f2 = Sheets("BD2")
Set f3 = Sheets("BD1 - BD2")
Set mondico1 = CreateObject("Scripting.Dictionary")
Set mondico2 = CreateObject("Scripting.Dictionary")
Set mondico = CreateObject("Scripting.Dictionary")
'recherche doublons de col B en BD2
For Each c In f2.Range("b2", f2.[b65000].End(xlUp))
If c <> "" Then mondico.Item(c.Value) = mondico.Item(c.Value) + 1
Next c
lig = 2
For Each c In f2.Range("b2", f2.[b65000].End(xlUp))
If mondico.Item(c.Value) > 1 Then
MsgBox ("Vous avez un doublon de Nom Prénom et colonne B de la feuille BD2" & vbCr & "Corrigez cette erreur en feuille BD2, Sauvez et recommencez le test!" & vbCr & "le nom prénom est: " & c)
Exit Sub
End If
lig = lig + 1
Next c
'*******************************************
a = f1.Range("B2:B" & f1.[b65000].End(xlUp).Row)
b = f2.Range("B2:B" & f2.[b65000].End(xlUp).Row)
tablo1 = f1.Range("A2:D" & f1.[D65000].End(xlUp).Row)
tablo2 = f2.Range("A2:D" & f2.[D65000].End(xlUp).Row)
For i = LBound(a) To UBound(a)
mondico1(a(i, 1)) = ""
Next i
For i = LBound(b) To UBound(b)
mondico2(b(i, 1)) = ""
Next i
pos = 2
For Each c In b
If mondico1.exists(c) Then
If mondico2.exists(c) Then
mondico2(c) = ""
p = Application.Match(c, mondico1.keys, 0)
q = Application.Match(c, mondico2.keys, 0)
For tr = 1 To 4
f3.Cells(pos, tr) = tablo1(p, tr)
Next tr
f3.Cells(pos, 5) = tablo2(q, 1)
pos = pos + 1
End If
End If
Next c
End Sub

A+

René
 

Pièces jointes

  • Compare.xls
    55 KB · Affichages: 56

Discussions similaires