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 SubCordialement
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 Subklin89
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