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

50comp-tab.xlsx (214.25 Ko)

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

Bonsoir

A vérifier

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

Bonjour

Comme d'habitude à vérifier

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)

21fichier1.xlsx (9.34 Ko)

: 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)

21fichier1.xlsx (9.34 Ko)

: 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 !"

19fichier2.xlsx (9.33 Ko)

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

Rechercher des sujets similaires à "comparaison deux tableaux recherche lignes"