Comparaison de deux tableaux en VBA

Fermé
Brice-hb Messages postés 2 Date d'inscription vendredi 5 juillet 2013 Statut Membre Dernière intervention 5 juillet 2013 - 5 juil. 2013 à 10:55
Brice-hb Messages postés 2 Date d'inscription vendredi 5 juillet 2013 Statut Membre Dernière intervention 5 juillet 2013 - 5 juil. 2013 à 11:59
Boujour,

Voila mon problème :
Je souhaiterai comparer deux tableaux, case à case, situés sur 2 feuilles différentes (ces tableaux ont la même dimension).
Ensuite, je voudrai notifier les différence sur le deuxième tableau en changeant la couleur de fond.
Voila le programme que j'ai réalisé et qui ne marche pas ... :

Sub Compare()
Dim Lig1 As Long, Derlig1 As Long, Dercol As Long, Cp As Variant

Derlig1 = Sheets("Feuil1").Range("A65535").End(xlUp).Row
Dercol = Sheets("feuil2").Range("A65535").End(xlToLeft).Column

With Sheets("Feuil2")
For Lig1 = 1 To Derlig1
For j = 65 To 65 + Dercol
Cp = Sheets("feuil1").Cells(Lig1, Chr(j))
If Cp <> .Cells(Lig1, Chr(j)) Then
.Cells(Lig1, Chr(j)).Interior.ColorIndex = 9
Else
.Cells(Lig1, Chr(j)).Interior.ColorIndex = 0
End If
Next j
Next Lig1
End With





End Sub


Merci de votre aide !
A voir également:

3 réponses

Bonjour,

Effectivement dans ton code il y a quelques soucis notamment au niveau du cacul du nombre de colonne.

Dercol = Sheets("feuil2").Range("A65535").End(xlToLeft).Column
Si tu veux calculer le nombre de colonne tu aurais du mettre Range("IV1") à la place de Range("A65535")

Je te propose le code ci dessous qui devrait fonctionner normalement.
Si j'ai bien compris ton code le tableau en feuille 1 démarre à la ligne 1 alors qu'en Feuille 2 il démare à la ligne 65.


Sub New_Compare()
Dim Col1 As Long, LigT1 As Long, Derlig1 As Long, Dercol As Long, Cp As Variant

Derlig1 = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
Dercol = Sheets(1).Range(1, Columns.Count).End(xlToLeft).Column

For Col1 = 1 To Dercol
For LigT1 = 1 To Derlig1
Info_cell_T1 = Sheets(1).Cells(LigT1, Col1)
Info_cell_T2 = Sheets(2).Cells(LigT1+65, Col1)
If Info_cell_T1 <> Info_cell_T2 Then
Sheets(2).Cells(LigT2, Col1).Interior.ColorIndex = 9
Else
Sheets(2).Cells(LigT2, Col1).Interior.ColorIndex = 0
End If
Next LigT1
Next Col1
End Sub


WeaponEDGE
1
IWOBER Messages postés 15 Date d'inscription mercredi 14 mars 2012 Statut Membre Dernière intervention 18 octobre 2016 1
5 juil. 2013 à 11:24
Le texte de ta macro est conforme à TA logique.
Chacun peut la comprendre comme il veut.

Pour que tout le monde comprenne la même chose, il faut y mettre des commentaires.
A titre personnel, j'utilise un truc contraignant mais qui m'aide beaucoup par la suite: 1 ligne de code = 1 ligne de commentaire.

En outre, quand on se soumet ce genre de contrainte, on découvre souvent immédiatement le bug de raisonnement qu'on a fait.
0
Brice-hb Messages postés 2 Date d'inscription vendredi 5 juillet 2013 Statut Membre Dernière intervention 5 juillet 2013
5 juil. 2013 à 11:59
En fait la variable j permettait d'incrementer les colonnes et j'utilisais la fonction Chr pour convertir le code en ascii (65 correspond à 1).
Mais je vois que je me suis grandement compliqué la tâche !!!

En tout cas ton programme fonctionne à merveil !

Merci beaucoup !
0