Comparaison de 2 tableaux

Bonjour,

Ayant quelques bases VBA, je me suis lancé dans le développement de quelques ligne afin de comparer 2 tableaux Excel.

Je dispose de 2 tableaux (chacun dans une feuille Excel). Je souhaiterais mettre en évidence les différences avec une couleur.

1. Pour cela, je me base sur un ID unique (cf : adresse email) toujours présent en colonne C. Cet ID peut se positionner sur un numéro de ligne différente (ex : Feui1 : toto@excel.com en C2 - Feui2 toto@excel.com en C10).

Il faut que je puisse déterminer le numéro de ligne avec une boucle.

2. Une fois, les lignes de mes ID identifiées, je veux comparer les colonnes sur ces 2 lignes.

(ex : Si ID1 en C2 et ID2 en C10 alors comparer A1 avec A10, comparer B1 avec B10, D1 avec D10 ...).

3. Enfin, si il y a une différence alors changer la couleur de la cellule différente. La première feuille ayant les données de référence.

Voici le début de mon travail, suis je sur la bonne voie ?

Sub Compare()
Dim Lig1 As Long, Derlig1 As Long, Derlig2 As Long, Cp As Variant
Dim Lig2 As Long
    Derlig1 = Sheets("Sheet1").Range("A65535").End(xlUp).Row
    Derlig2 = Sheets("Sheet2").Range("A65535").End(xlUp).Row
    With Sheets("Sheet2")
        For Lig1 = 2 To Derlig1
            Cp = Sheets("Sheet1").Cells(Lig1, "A")
            For Lig2 = 2 To Derlig2
                If Cp = .Cells(Lig2, "A") Then
                    .Cells(Lig2, "A").Interior.ColorIndex = 6
                End If
            Next Lig2
        Next Lig1
    End With
End Sub

Cordialement

55compare.xlsx (17.02 Ko)

Bonsoir guillaum75

Comme ceci :

Option Explicit
Sub Comparaison()
Dim i As Long, j As Long, x As Range, dico As Object
    Application.ScreenUpdating = False
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    With Sheets(1).Cells(1).CurrentRegion
        For i = 1 To .Rows.Count
            dico(.Cells(i, 3).Value) = .Rows(i).Value
        Next
    End With
    With Sheets(2).Cells(1).CurrentRegion
        .Interior.ColorIndex = xlNone
        For i = 1 To .Rows.Count
            If dico.exists(.Cells(i, 3).Value) Then
                For j = 1 To .Columns.Count
                    If .Cells(i, j).Value <> dico(.Cells(i, 3).Value)(1, j) Then
                        If x Is Nothing Then
                            Set x = .Cells(i, j)
                        Else
                            Set x = Union(x, .Cells(i, j))
                        End If
                    End If
                Next
            End If
        Next
        If Not x Is Nothing Then x.Interior.ColorIndex = 6
    End With
    Application.ScreenUpdating = True
End Sub

klin89

Bonjour Klin89,

Je viens de tester en customisant la couleur et y ajoutant un bouton. C'est fonctionnel.

Merci beaucoup Klin pour ton temps. A bientôt

Guillaume

Rechercher des sujets similaires à "comparaison tableaux"