Comparaison deux tableaux Excel (recherche sur lignes et co
Bonjour ,
Je viens vers vous pour un coup de main , merci d'avance . En gros je voudrais comparer deux tableaux excel sur 2 feuilles d'un même workbook , avec un nombre de lignes et de colonnes différents.
la recherche porte à la fois sur les lignes et les colonnes puisqu'elles sont identifiées par des étiquettes de lignes et de colonnes et du coup par exemple l'information a comparer dans la cellule (ligne56,colonne60) sur la tableau1 se trouverait dans la cellule (ligne102,colonne30)du tableau2.
une fois la comparaison effectuée des couleurs de Highlight doivent apparaitre sur les cases changées du tableau2.
Dans la pièce jointe
les deux tableaux à comparer
le code que j'utilise actuellement effectue une recherche sur les lignes seulement.
Merci
Sub Compare()
'
' Macro1 Macro
'
' compare two different worksheets in the active workbook
CompareWorksheets Worksheets("Sheet1"), Worksheets("Sheet2")
End Sub
Sub CompareWorksheets(ws1 As Worksheet, ws2 As Worksheet)
Dim diffB As Boolean
Dim r As Long, c As Integer, m As Integer
Dim lr1 As Long, lr2 As Long, lc1 As Integer, lc2 As Integer
Dim maxR As Long, maxC As Integer, cf1 As String, cf2 As String
Dim rptWB As Workbook, DiffCount As Long
Application.ScreenUpdating = False
Application.StatusBar = "Creating the report..."
Application.DisplayAlerts = True
With ws1.UsedRange
lr1 = .Rows.count
lc1 = .Columns.count
End With
With ws2.UsedRange
lr2 = .Rows.count
lc2 = .Columns.count
End With
maxR = lr1
maxC = lc1
If maxR < lr2 Then maxR = lr2
If maxC < lc2 Then maxC = lc2
DiffCount = 0
For c = 1 To maxC
For i = 2 To lr2
diffB = True
Application.StatusBar = "Comparing cells " & Format(i / maxR, "0 %") & "..."
For r = 2 To lr1
cf1 = ""
cf2 = ""
On Error Resume Next
cf1 = ws1.Cells(r, c).FormulaLocal
cf2 = ws2.Cells(i, c).FormulaLocal
On Error GoTo 0
If cf1 = cf2 Then
diffB = False
Exit For
End If
Next r
If diffB Then
DiffCount = DiffCount + 1
ws2.Cells(i, c).Select
Selection.Font.Bold = True
ws2.Cells(i, c).Interior.ColorIndex = 19
End If
Next i
Next c
Application.StatusBar = "Formatting the report..."
'Columns("A:IV").ColumnWidth = 10
m = maxR - DiffCount - 1
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox m & " cells contain different values!", vbInformation, _
"Compare " & ws1.Name & " with " & ws2.Name
End Sub
Parfait Banzai64 ! merci beaucoup , juste deux points et la macro sera complète
- considérer les cases vides des deux tableaux comme des zéros: actuellement le programme s'il trouve une valeur dans la sheet2 et une case vide dans la sheet1 il ne change pas la couleur, il change de couleur dans le cas inverse ( cad valeur dans sheet1, case vide dans sheet2) et moi je voudrais détecter tous les changements (ajout , modification, suppression)
- colorier les lignes (toute la ligne) des fichiers de la sheet2 qui n'existent pas dans la sheet1 (actuellement le programme saute la ligne)
- colorier la colonne(toute la colonne) des erreurs de la sheet2 qui n'existent pas dans la sheet1 (actuellement le programme saute la colonne)
Merci encore une fois , vous m'aidez beaucoup
Bonsoir Banzai64,
Merci encore une fois pour votre aide , ça marche dans tous les cas sauf lorsque:
une ligne change de position + (une valeur sur cette ligne dans sheet2 ,vide dans sheet1) ---> Macro ne détecte pas ce changement
ou
une colonne change de position + (une valeur sur cette colonne dans sheet2 ,vide dans sheet1)---> Macro ne détecte pas ce changement
Curieusement le changement est détecté si on a : (valeur dans sheet1 ,vide dans sheet2).
Je me suis cassé la tête toute la journée en comparant les deux bouts de code que vous appelez : "Vérification des données de la page 1 par rapport aux données de la page 2" et "Vérification des données de la page 2 par rapport aux données de la page 1" mais j'ai pas pu comprendre pourquoi ça va dans un sens mais pas dans l'autre !
Voici un exemple avec changement de position d'une colonne: (même problème si on change position ligne)
Dans la pièce jointe 1 (fichier1)
: j'ai inversé dans le sheet2 la colonne C et D (C141 prends la place de C147) et je place par exemple à la ligne 7 (Adc_LLD.c) colonne D (C141) la valeur '9' et le tableau de la sheet1 reste vide , si vous démarrez la macro rien ne se passe. Message: "suite à 14 vérifications , il y a 0 cellules différentes dans sheet1 !"
Dans la pièce jointe 2 (fichier2)
: j'ai inversé dans le sheet2 la colonne C et D (C141 prends la place de C147) et je place cette fois-ci dans la sheet1 à la ligne 7 (Adc_LLD.c) colonne C (C141) la valeur '9' et le tableau de la sheet2 reste vide , si vous démarrez la macro la ligne 7 (Adc_LLD.c) colonne D (C141) dans sheet2 va changer de couleur. Message: "suite à 1 vérifications , il y a 1 cellules différentes dans sheet1 !"
Bonsoir
Ah ce copier/coller
En plus mélange entre F1.Cells(Ligne,Colonne) et F1.Cells(J,I) etc ....
A tester (code commentée pour suivre ma logique)
Y a pas mieux !! le code est parfait , je vous remercie beaucoup
Merci pour l'effort , le temps et la qualité du code
A+
ghassenfocus