Comparaison sur 2 feuilles de calcul

Aladin

XLDnaute Occasionnel
Bonjour le forum
J' ai parcouru le forum à la recherche d' une comparaison de dexu feuilles et
j' ai récupéré ce modele qui fonctionne mais n' est pas adapté pour le resultat que je veux obtenir.
J' aurais voulu que les données de la feuille 2 qui ne sont pas dans la feuille 1 soient mis sur la feuille 3.
le traitement de comparaison doit se faire sur la colonne A et colonne B qui est la taille
Merci d' avance pour toute aide pour la modification de la procedure
Ci joint un fichier qui permetrra de meix comprebdre le pb
Aladin
 

Pièces jointes

  • ComparerV1.xlsm
    72.1 KB · Affichages: 63
  • ComparerV1.xlsm
    72.1 KB · Affichages: 80
  • ComparerV1.xlsm
    72.1 KB · Affichages: 84
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Comparaison sur 2 feuilles de calcul

bonjour à tous,

une solution possible qui répond, a priori, au besoin:
Code:
Sub DiffList()
    Dim i&, j&, k&, Fin1&, Fin2&, a&, Tab1, Tab2, Diff, DebList1, Deblist2, Trouvé As Boolean
    DebList1 = 4
    Deblist2 = 1
    Worksheets("Feuil4").Cells.ClearContents

    Fin1 = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
    Fin2 = Feuil2.Range("A" & Rows.Count).End(xlUp).Row
    Tab1 = Feuil1.Range("A" & DebList1 & ":C" & Fin1)
    Tab2 = Feuil2.Range("A" & Deblist2 & ":C" & Fin2)
    ReDim Diff(UBound(Tab2), 3)
    k = 1
    For i = LBound(Tab2) To UBound(Tab2)
        Trouvé = False
        For j = LBound(Tab1) To UBound(Tab1)
            If Trim(Tab2(i, 1)) = Trim(Tab1(j, 1)) Then
                    Trouvé = True
                If Tab2(i, 2) <> Tab1(j, 2) Then
                    Diff(k, 1) = Tab2(i, 1)
                    Diff(k, 2) = Tab2(i, 2)
                    Diff(k, 3) = Tab2(i, 3)
                    k = k + 1
                End If
                Exit For
            End If
       Next j
            If Trouvé = False Then
                Diff(k, 1) = Tab2(i, 1)
                Diff(k, 2) = Tab2(i, 2)
                Diff(k, 3) = Tab2(i, 3)
                k = k + 1
            End If
    Next i
    
    Worksheets("Feuil4").Range("A1").Resize(UBound(Diff, 1), UBound(Diff, 2)) = Diff

End Sub

A+
 

laetitia90

XLDnaute Barbatruc
Re : Comparaison sur 2 feuilles de calcul

bonjour JJ1,Paf,JJ1
une autre facon de l'ecrire en utilisant Dictionary bien plus rapide sur des grandes listes

Code:
Sub es()
 Dim t, t1, t2, m As Object, x As Long, x1 As Long, x2 As Long, c As Byte
 Feuil3.Cells.ClearContents
 Set m = CreateObject("Scripting.Dictionary")
 t = Feuil2.Range("a1:c" & Feuil2.Cells(Rows.Count, 1).End(3).Row)
 t2 = Feuil1.Range("a4:c" & Feuil1.Cells(Rows.Count, 1).End(3).Row)
 ReDim t1(1 To UBound(t), 1 To 3)
 For x2 = 1 To UBound(t2)
 t2(x2, 1) = Trim(t2(x2, 1))
 If Not m.Exists(t2(x2, 1) & t2(x2, 2)) Then m.Item(t2(x2, 1) & t2(x2, 2)) = ""
 Next
 For x1 = 1 To UBound(t)
 t(x1, 1) = Trim(t(x1, 1))
 If Not m.Exists(t(x1, 1) & t(x1, 2)) Then
 x = x + 1
 For c = 1 To 3: t1(x, c) = t(x1, c): Next c
 End If
 Next
 Feuil3.Range("a1").Resize(x, 3) = t1
End Sub
 

Aladin

XLDnaute Occasionnel
Re : Comparaison sur 2 feuilles de calcul

Bonjour Paf, laetitia90 et le forum
Merci à tous deux pour la réponse à mon problème, j' ai fais les test hier soir, donc pour Paf la macro plante au bout d' un certain temp, pour laetitia90 ta macro fait parfaitement la comparaison donc je l' ai adopté.
Aladin
 

Paf

XLDnaute Barbatruc
Re : Comparaison sur 2 feuilles de calcul

re bonjour

donc pour Paf la macro plante au bout d' un certain temp
,

Pas normal que ça plante.
Même si pour vous le problème est réglé, ce serait sympa de préciser le message d'erreur et sur quelle ligne et le nombre de lignes traitées , afin de ne pas reproduire cette erreur dans un prochain code .

Merci A+
 

Aladin

XLDnaute Occasionnel
Re : Comparaison sur 2 feuilles de calcul

Bonjour à tous
Pris par le temps je n' ai pas pousszé mes test et n' ai pas cherché à voir ce qui n' allait pas. Aujourdh' hui c' est fait et j' ai corrigé l' erreur de la macro. J' avais cette erreur l' indice n' appartient pas à la selection. Je pointait sur le ligne
Code:
Worksheets("Feuil4").Cells.ClearContents
J' ai remplacé Feuil4 par Feuil3 et cela fonctionne
Aladin
 

Statistiques des forums

Discussions
312 210
Messages
2 086 281
Membres
103 170
dernier inscrit
HASSEN@45