Comparer deux tableaux ds 2 feuilles

S

Sara

Guest
Bonjour à tous,

Je souhaite comparer un couple de colonne dans une feuille 1 avec un autre couple de colonnes dans la feulle 2. Si par exemple un couple de valeur de la feuille 1 (C21,D21) est le même que la feuille 2 (C16,D16), alors on mis en jaune le fond de la cellule résultat de la feuille 1. Exemple fichier ci-dessous.
Je voudrais savoir s'il vous plait s'il faut déclarer un tableau (avec deux dimensions) et comment dans VBA et surtout comment jongler entre deux feuilles ?
Merci beaucoup

Sara
[file name=essai_20050913162904.zip size=2676]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/essai_20050913162904.zip[/file]
 

Pièces jointes

  • essai_20050913162904.zip
    2.6 KB · Affichages: 35

Hervé

XLDnaute Barbatruc
Bonjour sara, le forum

une proposition en pièce jointe.

Sub Bouton1_QuandClic()
Dim tablo1 As Variant
Dim tablo2 As Variant
Dim premiereligne As Byte
Dim i As Byte, j As Byte
'ici on stocke le numero de la premiere lignes des données de la feuille 1
premiereligne = 15
'sur la feuille1 les données commencent ligne 16, mais on s'arrete à 15
'pour tenir compte du option base 1

'creation des 2 tableaux
tablo1 = Sheets('feuil1').Range('c16:d29')
'feuille1
tablo2 = Sheets('feuil2').Range('c10:d23')
'feuille2

'ensuite on boucle sur chaque ligne du tablo1
For i = 1 To UBound(tablo1)
   
'puis sur chaque ligne du tablo2
   
For j = 1 To UBound(tablo2)
       
'si la colonne 1 du tablo 1 =la colonne 1 du tablo 2, alors
       
If tablo1(i, 1) = tablo2(j, 1) Then
           
'si la colonne 2 du tablo 1 =la colonne 2 du tablo 2, alors
           
If tablo1(i, 2) = tablo2(j, 2) Then
           
'on colore la plage de la feuille 1
               
With Sheets('feuil1')
                    .Range(.Cells(premiereligne + i, 3), .Cells(premiereligne + i, 4)).Interior.ColorIndex = 6
               
End With
           
End If
       
End If
   
Next j
Next i
End Sub

salut

[file name=essai_20050913171740.zip size=9674]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/essai_20050913171740.zip[/file]
 

Pièces jointes

  • essai_20050913171740.zip
    9.4 KB · Affichages: 47

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Sara, Hervé, Wilfried, bonjour le forum,

Même combat qu'Hervé (trop rapide pour moi...) mais sans les tableaux :


Option Explicit 'oblige à déclarer toutes les variables

Sub Macro1()
Dim O As Worksheet, C As Worksheet 'déclare les variables O (Origine) et C (Cible)
Dim Po As Range, Pc As Range 'déclare les varoable Po (Plage origine) et Pc (Plage cible)
Dim celO As Range, CelC As Range 'déclare les variables CelO (Cellule Origine) et CelC (Cellule Cible)

Set O = Sheets('Feuil1') 'définit la varaible O
Set C = Sheets('Feuil2') 'définit la variable C
Set Po = O.Range('C16:C29') 'définit la variable Po
Set Pc = C.Range('C10:C23') 'définit la variable Pc

For Each celO In Po 'boucle sur ttoutes les cellule de la Plage origine
For Each CelC In Pc 'boucle sur toutes les cellule de la Plage cible
'condition : si les cellules sont identiques et que les cellulues à droite le sont aussi
If celO.Value = CelC.Value And celO.Offset(0, 1).Value = CelC.Offset(0, 1).Value Then
'la deuxième cellule à droite se colore de jaune
celO.Offset(0, 2).Interior.ColorIndex = 6
Exit For 'sor de la boucle (CelC)
End If 'fin de la condition
Next CelC 'prochaine cellule de la Plage cible
Next celO 'prochaine cellule de la Plage Origine
End Sub
 

WILFRIED

XLDnaute Impliqué
RE-

Voici ma propostion :


Option Explicit

Sub mise_forme_sara()
'déclaration des variables

Dim plage_source_Col1 As Range 'plage d'entrée
Dim plage_compar_col1 As Range 'plage de comparaison

Dim ws_source As Worksheet
Dim ws_trav As Worksheet
Dim m_cell_src As Range
Dim m_cell_comp As Range

Set ws_source = ActiveSheet
Set ws_trav = Worksheets('Feuil2')

ws_source.Select
Set plage_source_Col1 = Range('C16', Range('C65536').End(xlUp))
ws_trav.Select
Set plage_compar_col1 = Range('C10', Range('C65536').End(xlUp))
ws_source.Select
For Each m_cell_src In plage_source_Col1
ws_trav.Select
For Each m_cell_comp In plage_compar_col1
If m_cell_src.Value = m_cell_comp.Value And m_cell_comp.Offset(0, 1).Value = m_cell_src.Offset(0, 1).Value Then
m_cell_comp.Offset(0, 2).Interior.ColorIndex = 6
Exit For
End If
Next
ws_source.Select
Next
End Sub

J'espére que cela t'aidera,

A+


:angry: :angry: décidément j'ai du mal aujourd'hui avec le rafraichissement ..... Salut Robert....

Message édité par: wilfried, à: 13/09/2005 17:40
 
S

Sara

Guest
Merci encore une fois les mecs ! ça marche à merveille mais j'ai un petit souci, je voudrais plutot comparer par couple de celule via une boucle 'FOR' et non pas identifier toute la plage et après faire la comparaison...

Sara
 

Discussions similaires

Statistiques des forums

Discussions
312 393
Messages
2 087 960
Membres
103 686
dernier inscrit
maykrem