Comparaison et "coloriage"

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Romain31

XLDnaute Occasionnel
Bonsoir à tous,

Je recherche à mettre en évidence des données identiques contenues dans la colonne A de la feuille 1 et de la feuille 2.
A - A (colorié)
B - B (colorié)
A - C
C - C (colorié)

Le problème :
seule la première donnée est colorié
Egalement, je souhaiterais colorier les deux cellules et non la ligne entière.

Je pense que j'ai un souci de variable ou avec l'emploi d'offset.

Je joins le fichier.

Merci pour votre aide

Romain
 

Pièces jointes

Re : Comparaison et "coloriage"

Bonsoir,

Est-ce que ceci peut convenir ?

Code:
Sub Compare()
Application.ScreenUpdating = False
Sheets("Feuil1").Select
    
For i = 2 To Sheets("Feuil1").Range("a65000").End(xlUp).Row
    If Sheets("Feuil1").Range("a" & i) = Sheets("Feuil2").Range("a" & i) Then Sheets("Feuil1").Range("a" & i).Interior.ColorIndex = 7
Next
    Application.ScreenUpdating = True
End Sub

G
 
Re : Comparaison et "coloriage"

Bonsoir Gelinotte,

Effectivement, cela fonctionne très bien et je t'en remercie.
Par contre, je me posais la question si je veux sélectionner quand même les lignes entières.
J'ai modifié après then... range par rows, mais cela ne fonctionne pas.

Romain
 
Re : Comparaison et "coloriage"

Bonsoir Romain31,

Votre code:
Code:
Public i, c

Sub Compare()
Application.ScreenUpdating = False
Sheets("Feuil1").Select
For i = 0 To Sheets("Feuil1").Range("a65000").End(xlUp).Row - 2
  For c = 0 To Sheets("Feuil2").Range("a65000").End(xlUp).Row - 2
    If Sheets("Feuil1").Range("a2").Offset(i, 0) = Sheets("Feuil2").Range("a2").Offset(c, 0) Then
      Sheets("Feuil1").Range(a + 2 & ":" & a + 2).Interior.ColorIndex = 7
    End If
  Next
Next
Application.ScreenUpdating = True
End Sub

Public i, c
Il n'y a aucune raison de déclarer ces deux variables de boucle comme étant des variables publiques. Déclarez les avec l'instruction DIM dans le corps de Compare()

Vous n'avez pas utilisé l'option "Option Explicit" en tête de module1; les déclarations de variables ne sont donc pas obligatoires. Ainsi vous utilisez une variable a non déclarée. Cette variable intervient dans un calcul (a + 2) donc visual basic la considère comme un nombre et l'initialise à 0.

Donc Range(a + 2 & ":" & a + 2) sera égal à Range(0+2 & " :" & 0 + 2) soit 2 & " :" & 2 soit Range("2:2") qui désignera toujours la ligne 2. Donc c'est toujours toute la ligne 2 qui sera coloriée et que cette ligne là.

Si vous voulez désigner la cellule à colorier ce serait sans doute plus:
Sheets("Feuil1").Range("a2").Offset(i, 0).Interior.ColorIndex = 7 et / ou
Sheets("Feuil2").Range("a2").Offset(c, 0).Interior.ColorIndex = 7
 
Dernière édition:
Re : Comparaison et "coloriage"

Bonsoir Gelinotte,

Effectivement, cela fonctionne très bien et je t'en remercie.
Par contre, je me posais la question si je veux sélectionner quand même les lignes entières.
J'ai modifié après then... range par rows, mais cela ne fonctionne pas.

Romain

Excuse-moi, je ne croyais pas que colorier la ligne entière était voulu.

Un préjugé préconçu d'avance ... ça ce n'est pas drôle. 🙄

G
 
Re : Comparaison et "coloriage"

Bonsoir Romain31, Gelinotte 🙂

Attention, les deux algorithmes ne font pas la même chose.

1) celui de Romain31 examine pour chaque cellule de feuil1 si dans feuil2 il existe une valeur identique (que les valeurs soient sur la même ligne ou non)

2) celui de Gelinotte compare les cellules deux à deux situées sur la même ligne dans feuil1 et dans feuil2.

Pour colorier une ligne entière, tu peux utiliser la propriété EntireRow:
Sheets("Feuil1").Range("a" & i).EntireRow.Interior.ColorIndex = 7
 
Re : Comparaison et "coloriage"

Merci à Mapomme pour les explications concernant les variables.
Effectivement, Gelinotte, je souhaite bien sélectionner les cellules et ton code est parfait. Mais, éventuellement, le code pour sélectionner les lignes aurait pu me servir. Disons que c'est pour le plaisir intellectuel ou pour le fun, comme tu voudras.
Si tu as une idée, je suis preneur.
 
Re : Comparaison et "coloriage"

Bonsoir,

Dans ce cas voici la version qui colore la ligne entière ;

Code:
Sub Compare()
Application.ScreenUpdating = False
Sheets("Feuil1").Select
    
For i = 2 To Sheets("Feuil1").Range("a65000").End(xlUp).Row
    If Sheets("Feuil1").Range("a" & i) = Sheets("Feuil2").Range("a" & i) Then Sheets("Feuil1").Rows(i).Interior.ColorIndex = 7
Next
    Application.ScreenUpdating = True
End Sub

Une variante de celle de MaPomme ... que je salue en passant :

Sheets("Feuil2").Range("a" & i) Then Sheets("Feuil1").Rows(i).Interior.ColorIndex = 7
 
Re : Comparaison et "coloriage"

Bonsoir,

Au début, tu parlais de colorier sur les deux feuilles :

Code:
Sub Compare()
Application.ScreenUpdating = False
Sheets("Feuil1").Select
    
For i = 2 To Sheets("Feuil1").Range("a65000").End(xlUp).Row
    If Sheets("Feuil1").Range("a" & i) = Sheets("Feuil2").Range("a" & i) Then
    Sheets("Feuil1").Rows(i).Interior.ColorIndex = 7
    Sheets("Feuil2").Rows(i).Interior.ColorIndex = 7
    End If
Next
    Application.ScreenUpdating = True
End Sub

G
 
Re : Comparaison et "coloriage"

Je n'avais pas vu la réponse de mapomme lorsque j'ai répondu.
Merci à vous deux, cela fonctionne impec.
Effectivement, je suis parti au départ d'un code qui comparait les données non pas cellule A1 Feuil1 - Cellule A1 Feuil2, etc mais qui mettait en évidence les données manquantes dans l'une des feuilles de la colonne A (d'où les deux variables).
Faut-il employer 2 variables pour ce genre de chose, comment le modifier ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
281
Réponses
40
Affichages
2 K
Retour