Mise en forme conditionnelle VBA

  • Initiateur de la discussion Initiateur de la discussion nak
  • Date de début Date de début

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 !

nak

XLDnaute Occasionnel
Bonjour,

Je recherche un code VBA pour faire une mise en forme conditionnelle dans le but de faire une comparaison entre deux feuille.
J'ai donc un fichier avec deux feuilles (deux bases de plusieurs milliers de lignes), je voudrais les comparer suivant ceci:
Déjà sur les deux feuilles en colonne A il y a le code commun. L'ordre est différent, le nombre aussi. Je veux faire ma mise en forme sur la première feuille.
-Je voudrais comparer la colonne E de ma feuille 1 avec la colonne D de ma feuille 2, ceci uniquement si la colonne A correspond. Dans ce cas je passe l'intérieur de ma cellule en vert.
-Lorsque je retrouve le code en colonne A mais que je ne retrouve pas la valeur de la colonne E dans la feuille 2 (D), je voudrais passer en orange.
-Enfin lorsque je retrouve la première condition mais que la colonne E de la feuille 2 contient le texte "attention", je voudrais quelle passe en rouge.

J'espère être assez clair dans ma demande. Je pense le faire en VBA mais peut être que la fonction mise en forme conditionnelle suffit.
Je joins un petit fichier Excel pour expliquer plus clairement.

Si vous avez un bout de code je suis preneur...

Merci
 

Pièces jointes

Re : Mise en forme conditionnelle VBA

Bonsoir nak,

il faut pas être pressé comme ça...
En plus tu écris ton message à une heure creuse.
Bref, ci-joint une solution avec le format conditionnelle.
J'ai créé le champs nommé "liste" sur la feuille 2.
Les cellules E1 E2 et E3 ont déjà le format conditionnelle opérationnelle.
Recopie le format dans les autres cellules de la colonne.
 

Pièces jointes

Re : Mise en forme conditionnelle VBA

Bonsoir et merci,
Cela ne fonction pas totalement, j'ai des cellules orange qui devraient être verte...
il n'y a pas une petite erreur dans ta formule :
Vert :
=ET(NON(ESTNA(EQUIV(A1;liste;0)));DECALER(INDIRECT("Feuil2!" & ADRESSE(EQUIV(A1;liste;0);1));0;3)=DECALER(A1;0;4);DECALER(INDIRECT("Feuil2!" & ADRESSE(EQUIV(A1;liste;0);1));0;4)<>"attention")

Rouge:
=ET(NON(ESTNA(EQUIV(A1;liste;0)));DECALER(INDIRECT("Feuil2!" & ADRESSE(EQUIV(A1;liste;0);1));0;3)=DECALER(A1;0;4);NON(DECALER(INDIRECT("Feuil2!" & ADRESSE(EQUIV(A1;liste;0);1));0;4)<>"attention"))

Orange:
=ET(NON(ESTNA(EQUIV(A1;liste;0)));NON(DECALER(INDIRECT("Feuil2!" & ADRESSE(EQUIV(A1;liste;0);1));0;3)=DECALER(A1;0;4));DECALER(INDIRECT("Feuil2!" & ADRESSE(EQUIV(A1;liste;0);1));0;4)<>"attention")

Moi je ne comprends pas trop, elles sont bien trop longue 🙂

merci
 
Re : Mise en forme conditionnelle VBA

merci haonv,
ta forme fonctionne très bien.
seul souci et de taille la mise en forme conditionnelle ne va pas fonctionner...
Ma feuille 1 comporte 10000 lignes, la feuille 2 5x plus.
Bref je suis bien bloqué 🙁
 
Re : Mise en forme conditionnelle VBA

Bonjour forum

Nak ,je ne vois pas trop où est le problème.
Il suffit de :
-saisir les mises en forme conditionnelles de la cellule "E1"
-copier "E1" ,
-sélectionner la colonne "E" (clic sur l'en-tête de colonne "E")
-"collage spécial ","format".

Le format conditionnel s'applique maintenant à toutes les cellules de la colonne "E".
Si ce n'est pas ça,donne-nous un peu de détails .

Amicalement
 
Re : Mise en forme conditionnelle VBA

Bonjour,
Oui la formule fonctionne bien.
Le problème c'est que j'ai beaucoup de ligne, cela fait bloquer le fichier (avec un core 2 duo et 4Go de ram).
Donc impossible à utiliser

merci quand même
 
Re : Mise en forme conditionnelle VBA

Re bonjour,

C'est sûr que faire le calcul sur 10000 lignes, ça prend du temps...
Faut prendre un café pendant ce temps 😀.
Sérieusement, par curiosité, as-tu laissé tourné pour voir combien de temps dure le calcul?
 
Re : Mise en forme conditionnelle VBA

Bonjour haonv,nak,
Re bonjour Nak , Skoobi,

Il est vrai que les calculs doivent être longs.
Mais existent-ils une solution beaucoup plus rapide ?

Amicalement

Cela dépend de l'analyse à faire, c'est-à-dire qu'il faut analyser toutes les cellules ou au cas par cas nak? En sélectionnant un code pour connaître son état par exemple. Dans ce cas, VBA est tout indiqué.
 
Re : Mise en forme conditionnelle VBA

Bonjour Skoobi, bonjour Haonv,

Lorsque je laisse tourner il n'y a plus d'affichage sous Excel. Il ne revient pas même après 30min, et si j'ai le malheur de changer de feuille sous mon classeur... Bref impossible de travailler avec un fichier pareil.

Skoobi, il faut bien analyser toutes les cellules... Je ne comprends pas trop...Comment dire.
Feuille1, cellule A1 j'ai un code. Il peut être présent plusieurs fois en Feuille2 colonne A:A. La comparaison doit être réalisée uniquement sur c'est quelques lignes...

En tout cas merci de votre aide 😉
 
Re : Mise en forme conditionnelle VBA

Re,

je parle de la cellule colonne E qui doit être coloriée en vert, rouge ou orange.
Veux-tu tous les traiter d'un coup ou au cas par cas, sur sélection par exemple.
Quel est le but en finalité?
 
Re : Mise en forme conditionnelle VBA

Bonjour,

Le but c'est de contrôler si mes références sont identiques.
Au cas par cas cela peut fonctionner aussi. Il suffirait de parcourir le fichier pour contrôler la référence souhaitée.
Mais le problème c'est que chaque code est présent sur plusieurs lignes (1 à 20 lignes environ), c'est donc embêtant de lancer l'exécution d'une macro plusieurs fois pour un même code...
Bon, ne perd pas de temps avec ça, je vais essayer de faire autrement.
Je te remercie pour ta patience.

A+
 
Re : Mise en forme conditionnelle VBA

Re bonjour,

Bon, ne perd pas de temps avec ça, je vais essayer de faire autrement.

Trop tard😀:

Code:
Sub colore()
Dim LeCode As Range, ListeCode As Range, TrouveCode As Range
Application.ScreenUpdating = False
Set ListeCode = Range("E1:E" & [E65536].End(xlUp).Row)
ListeCode.Interior.ColorIndex = xlNone
For Each LeCode In ListeCode
  With Sheets(2)
    Set TrouveCode = .Columns(4).Find(LeCode.Value, LookIn:=xlValues, lookat:=xlWhole)
    'couleur orange
    If TrouveCode Is Nothing Then
      If Not .Columns(1).Find(LeCode.Offset(0, -4).Value, LookIn:=xlValues, lookat:=xlWhole) Is Nothing Then LeCode.Interior.ColorIndex = 45
    Else
      If TrouveCode.Offset(0, -3).Value = LeCode.Offset(0, -4).Value Then
      'couleur rouge ou vert
        LeCode.Interior.ColorIndex = IIf(TrouveCode.Offset(0, 1).Value = "attention", 3, 4)
      End If
    End If
  End With
Next
End Sub

Traité en quelques secondes 😉, si je me suis pas trompé dans l'analyse...
 
- 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
2
Affichages
105
Réponses
4
Affichages
135
Réponses
25
Affichages
618
Retour