Microsoft 365 Comparer 2 listes Excel

toto89

XLDnaute Junior
Bonjour à tous !

J'ai un petit problème de comparaison entre différentes listes.

Je voudrai comparer 2 listes de données d'onglet différent et faire apparaitre dans le 3eme onglet les différences.
ci joint un exemple.

Merci d'avance pour votre aide ! :D
 

Pièces jointes

  • test1.xlsx
    13.8 KB · Affichages: 13
Solution
petite question, est-ce possible d'ajouter une colonne et y mettre le nom de l'onglet auquel il appartient ? tjrs en vb
il suffit de modifier un peu le code
VB:
Sub compare()

Dim Dico1 As New dictionary ' CreateObject("Scripting.Dictionary")
Dim Dico2 As New dictionary ' CreateObject("Scripting.Dictionary")

With Sheets("Feuil1")
    fin = .Range("A" & .Rows.Count).End(xlUp).Row
    For i = 2 To fin
        clé = .Range("A" & i) & "-" & .Range("B" & i) & "-" & .Range("C" & i)
        If Not Dico1.Exists(clé) Then
            Dico1.Add clé, "Feuil1"
        End If
    Next i
End With

With Sheets("Feuil2")
    fin = .Range("A" & .Rows.Count).End(xlUp).Row
    For i = 2 To fin
        clé = .Range("A" & i) & "-" & .Range("B" & i)...

toto89

XLDnaute Junior
ah oui pardon, je n'ai pas mis le bon fichier
voici:
Petite question,
J'ai une colonne en plus ajouter, ou je modifie le code ?
J'ai ajouté la colonne D, mais après ?! .... je ne sais pas

Sub compare()

Dim Dico1 As New dictionary ' CreateObject("Scripting.Dictionary")
Dim Dico2 As New dictionary ' CreateObject("Scripting.Dictionary")

With Sheets("Feuil1")
fin = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 2 To fin
clé = .Range("A" & i) & "-" & .Range("B" & i) & "-" & .Range("C" & i) & "-" & .Range("D" & i)
If Not Dico1.Exists(clé) Then
Dico1.Add clé, i
End If
Next i
End With

With Sheets("Feuil2")
fin = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 2 To fin
clé = .Range("A" & i) & "-" & .Range("B" & i) & "-" & .Range("C" & i) & "-" & .Range("D" & i)
If Not Dico2.Exists(clé) Then
Dico2.Add clé, i
End If
Next i
End With

With Sheets("Feuil3")
' MsgBox Dico1.Count
' MsgBox Dico2.Count
For Each clé In Dico1.keys
If Not clé = "" Then
If Not Dico2.Exists(clé) Then
.Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 3) = Split(clé, "-")
End If
End If
Next clé

For Each clé In Dico2.keys
If Not clé = "" Then
If Not Dico1.Exists(clé) Then
.Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 3) = Split(clé, "-")
End If
End If
Next clé
End With
Set Dico1 = Nothing
Set Dico2 = Nothing
End Sub
 

patricktoulon

XLDnaute Barbatruc
bonjour a tout les deux
@vgendron
c'est pas bon
sauf erreur de ma part on vois bien a droite du bouton la vrai liste sans doublon dans la tienne à gauche il en manque
par exemple on voit bien que julien a disparu ainsi que marc
demo.gif
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
oui oui!! on parle bien de ligne entières non comunes
on voit bien (en autre )dans ton exemple que julien a disparu tu ne garde que julie

servez vous des outils dispos (Excel fait ça très bien )

a moins que notre camarade @toto89 ne souhaite voir que les différentes unique non doublonnées
VB:
Sub test()
Dim R1 As Range, r2 As Range
    'détermine la plage  à copier de la feuil1
    Set R1 = Feuil1.Range("A2:c2").Resize(Feuil1.UsedRange.Rows.Count)

    'détermine la plage  à copier de la feuil2
    Set r2 = Feuil2.Range("A2:c2").Resize(Feuil2.UsedRange.Rows.Count)

    With Feuil3

        'vide la feuil3 en gardant les entêtes
        .[a2:c2].Resize(.UsedRange.Rows.Count).Clear

        'copie de la plage r1 dans la première ligne dispo
        R1.Copy .Cells(Rows.Count, 1).End(xlUp).Offset(1)

        'copie de la plage r2 dans la première ligne dispo
        r2.Copy .Cells(Rows.Count, 1).End(xlUp).Offset(1)

        'et enfin on supprime les lignes en double sur 3 colonnes
        .UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes
    End With
End Sub
demo.gif
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
405

Statistiques des forums

Discussions
314 714
Messages
2 112 140
Membres
111 436
dernier inscrit
jibusigor