Microsoft 365 Compare cellules entre deux onglets suivant valeur + remplissage

AIr-V

XLDnaute Junior
Bonjour,

J'aimerais pouvoir comparer les cellules d'une feuille excel avec d'autres cellules de ma seconde feuille en fonction de leur valeur mais aussi de leur couleur de remplissage.

Je m'explique :

Feuil1 : toutes les cellules à comparer se trouvent dans les colonnes D et H. Je souhaite les comparer avec chaque cellule des colonnes D et H de ma Feuil2. Certaines pouvant être mélangées, supprimées, voir ajoutées.

Exemple : si la valeur et le remplissage de la cellule D9 (Feuil1) se trouve dans la colonne D ou H (Feuil2), je ne fais rien.
Inversement, si je ne retrouve nul part cette cellule (valeur ou remplissage ou les deux), je la signale d'une couleur bien spécifique (rose par exemple).
Bien évidemment, il faudra que je fasse la même démarche de la Feuil2 vers la Feuil1.

Je ne sais pas si je suis assez précis, je joins le fichier afin de pouvoir mieux s'y retrouver. Si besoin de plus d'information, n'hésitez pas à me le signaler.

Merci par avance pour votre aide. :):)
 

Pièces jointes

  • Macro_Compare.xlsm
    15 KB · Affichages: 11

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
Ci joint une solution avec vba très basique .... c'est le résultat qui compte !!
1 essai possible seulement car le fond passe en Rose et ne peut revenir à l'origine , sinon quitter sans sauvegarder pour chaque autre essai
 

Pièces jointes

  • Compare_cel.xlsm
    29.4 KB · Affichages: 7

AIr-V

XLDnaute Junior
Bonjour,

Merci pour ce retour. C'est effectivement ce que je recherche, néanmoins, si je reprends par exemple : D25E25F25 sur la Feuille 2, la macro l'affiche en rose alors que je retrouve cette même cellule sur la Feuille1.
Il en est de même avec la cellule A25B25C25. je n'arrive à l'expliquer car le code me parait pourtant très clair.

Autre petit point, la macro fait une comparaison de cellule à cellule, elle prend donc en compte leur valeur mais prend-t-elle également en compte la mise en forme de la cellule (c-a-d son remplissage)?

Très belle soirée à vous. :)
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
Voilà la version corrigée : erreur de der ligne : -1 retiré et prise en compte de la couleur
Comme j'ai remarqué que l'on ne pouvait faire qu'une passe car une fois les erreurs détectées le fond passe en Rose et y reste , donc si l'on veut changer une cellule le test est faussé
ex : une cellule passe au Rose , je restaure les couleurs je met sa valeur et le fond dans l'autre feuille ainsi je peux relancer pour vérifier
j'ai tenté d'améliorer dans ce sens ... au cas ou !
Donc avant le test je mémorise la couleur des fonds dans un autre onglet (mem1 et mem2) et si l'on veut refaire des modifs on restaure les couleurs d'origine
espérant que cela te conviendra
 

Pièces jointes

  • Compare_cel v2.xlsm
    46.7 KB · Affichages: 7

AIr-V

XLDnaute Junior
Bonjour herve62,

J'ai essayé de retranscrire ce code sur mon modèle. Mais je constate que ma variable "y" ne s'incrémente pas (après "Next y" passe directement à "End With").
Sachant que la macro est saisie à travers un module (et non sur la feuille en private sub).

Je ne sais dire pourquoi le code ne balaye pas toutes les cellules du tableau2.
Serais-tu en mesure de m'aider à ce sujet?

Ci-dessous l'extrait du code saisi :

Sub CP12_Click()
trouve = 0
fond = 0

Application.ScreenUpdating = False

'TRAITEMENT PREMIERE COLONNE E DE TABLEAU1

Sheets("tableau1").Select
For x = 2 To Range("E30000").End(xlUp).Row
val1 = Cells(x, 5)
ind = Cells(x, 5).Interior.ColorIndex
With Worksheets("tableau2")

For y = 2 To .Range("E30000").End(xlUp).Row
CP1 = .Cells(y, 5): indE = .Cells(y, 5).Interior.ColorIndex
CP2 = .Cells(y, 11): indK = .Cells(y, 11).Interior.ColorIndex
If val1 = CP1 Or val1 = CP2 Then
trouve = 1

If ind = indE Or ind = indK Then
fond = 1
End If
End If
Next y
End With
If trouve = 0 And fond = 0 Then Cells(x, 5).Interior.ColorIndex = 38
trouve = 0
fond = 0
Next x

'
'TRAITEMENT DEUXIEME COLONNE K DE TABLEAU1 - on duplique simplement le code
' en changeant E en K
'

Sheets("tableau1").Select
For x = 2 To Range("K30000").End(xlUp).Row - 1
val1 = Cells(x, 11)
ind = Cells(x, 11).Interior.ColorIndex
With Worksheets("tableau2")

For y = 2 To .Range("K30000").End(xlUp).Row - 1
CP1 = .Cells(y, 5): indE = .Cells(y, 5).Interior.ColorIndex
CP2 = .Cells(y, 11): indK = .Cells(y, 11).Interior.ColorIndex
If val1 = CP1 Or val1 = CP2 Then
trouve = 1

If ind = indE Or ind = indK Then
fond = 1
End If
End If
Next y
End With
If trouve = 0 And fond = 0 Then Cells(x, 11).Interior.ColorIndex = 38
trouve = 0
fond = 0
Next x

Application.ScreenUpdating = True

End Sub

Merci par avance, très belle journée. :)
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour Air-v
ouh là !! sans fichier impossible de débugger
J'ai quand même essayé de mettre ta sub dans mon fichier mais en créant un bouton "Formulaire" car tu as écris que ton code est dans Module , donc le bouton ActiveX ne va plus , là tu as dû affecter une macro au bouton ? alors que moi c'était auto. : tu fais: "voir le code" et il t'amène dans le Vbe d'une feuille mais jamais dans un module
Donc déjà as tu procédé comme ça ?
De cette manière ta sub fonctionne ; Pour vérifier > Tu mets un point d'arrêt au niveau du 'for y' ( clic gauche dans la marge) tu ensuite tu te mets en haut de la sub , tape sur F5 execution et s'arrête puis avances avec F8 le code s'execute ligne à ligne et là tu peux voir les valeurs en laissant la souris sur le nom
ex : selon l'image arrêt sur ind , tu dois voir CP1="A10" ( ici y=2) puis F8 et idem tu te mets sur indE tu auras sa valeur .....etc ... tu peux aussi mettre directement ton arrêt à for y = ........
Voilà ce que je peux dire , le code sûr il fonctionne donc ce ne peut être qu'un Pb de nom ou d'emplacement
A suivre .....
 

Pièces jointes

  • debug.jpg
    debug.jpg
    17.1 KB · Affichages: 18

AIr-V

XLDnaute Junior
Bonjour herve62,

J'ai effectivement déjà réalisé toutes ces manœuvres (affecter la macro au bouton formulaire, execution manuelle via F8 pour visualiser l'évolution des variables, etc...).

D'où le fait que j'ai du mal à comprendre d'où pourrait provenir l'erreur.

Je peux t'envoyer le fichier en question par mail, comment peut-on procéder?

Merci par avance; très belle journée.
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG