VBA et Mise en forme Conditionnelle

R

Robert

Guest
Bonjour le forum,

Je râle toujours quand il n'y a pas assez d'explication dans les post alors du coup, j'ai fais un roman pour une chose toute simple pour les As, Cracs, Experts et autre Extra-terrestre qui traînent dans cet illustre forum.

Dans un tableau j'ai utilisé une mise en forme conditionnelle qui colore le fond de rouge (Interior.ColorIndex=3) si la valeur et supérieure à 5. Je voulais récupérer en VBA les cellules en rouge mais j'ai l'impression que Excel ne considère pas dans ce cas là que le fond soit rouge. Car quand je fais une boucle du style :

For Each cel In Range(montableau)
If cel.Interior.ColorIndex = 3 Then MsgBox "Ok"
Next cel

pas glop pas glop, "Ok" n'apparaît jamais bien que j'ai une grande quantité de cellules rouges.

Bien sûr je pourrais faire If Cel.Value>5 Then MsgBox "Ok"
mais ce n'est pas mon but, je voudrais vraiment me baser sur le format de la mise en forme conditionnelle et non pas sur sa condition.

Est-ce possible et si oui comment ?

Merci à tous ceux qui prendront le temps de lire ce post.

Robert
 
R

Robert

Guest
Bonjour Robert,
La meilleur façont de procéder est peut être que tu regarde déjà ce que tu as comme couleur dans les cellules....
Fais un MsgBox "Couleur =" + Str(cel.Interior.ColorIndex )
cela t'aideras certainement....
@+
 
L

léa

Guest
Bonjour Robert,

Il n'y a rien à dire à ton bout de code, il fonctionne à merveille (voir fichier joint)
Idée qui me passe par la tête, idée peut-être farfelue mais ne sait-on jamais
L'index de la couleur est-il bien 3 ? Tes cellules ne seraient-elles pas d'un rouge non "classique" , index différent de 3?


Bonne journée
Léa
 

Pièces jointes

  • rouge.zip
    14.7 KB · Affichages: 324
  • rouge.zip
    14.7 KB · Affichages: 326
  • rouge.zip
    14.7 KB · Affichages: 340
R

Robert

Guest
Ça se passe entre Robert's apparemment...

Bonjour Robert,

Merci de ton aide mais ça ne va pas. Ça me renvoie la même valeur -4142 que ce soit un cellule rouge ou sans couleur de fond. Je ne peux donc pas me baser sur cette valeur.

À plus,

Robert
 
R

Robert

Guest
Re Robert, Léa,
A tu vu l'exemple de léa, le code est exactement le tiens... Donc il doit y avoir un problème dans ton code non retranscrit.....
Si tu ne trouve pas donne un exemple réel de ton code, je regarderais...
@+
 
T

Ti

Guest
pour récupérer une couleur obtenue par format conditionnel, tu dois passer par l'objet FormatConditions

ex : Couleur = Cel.FormatConditions(1).Interior.ColorIndex
Tu auras compris que l'index 1 correspond à la couleur de la condition 1
 
R

Robert

Guest
Bonjour Lea,

Merci de ton aide. Dans ton fichier joint tu n'as pas utilisé une mise en form conditionnelle et ça marche parfaitement. Mais, je pensais avoir été assez clair, je voudrais la même chose avec une mise en forme conditionelle. Et là le code ne fonctionne plus.

À plus,

Robert
 
R

Robert

Guest
Bonjour Ti

J'ai testé mais ça ne vas pas dans mon exemple.
En effet si Couleur = Cel.FormatConditions(1).Interior.ColorIndex me renvoie bien la valeur 3.
J'ai toujours le même problème :
For Each cel In Range(montableau)
If cel.Interior.ColorIndex = couleur Then MsgBox "Ok"
Next cel

ne trouve aucune cellule rouge...

Merci Ti pour ton aide.

Robert
 
T

Ti

Guest
eh bien tu n'as qu'à modifier ta ligne comme ça !

For Each cel In Range(montableau)
If Cel.FormatConditions(1).Interior.ColorIndex= 3 Then MsgBox "Ok"
Next cel

il faut bien comprendre que la couleur de la cellule n'a rien à voir à voir la couleur obtenue par format conditionnel
 
R

Robert

Guest
Re Ti

Désolé, tu m'as donné la bonne solution mais c'est moi qu'il l'ai mal codée. Ça marche impec. Pour ceux qui liront peut-être ce fil la solution (par rapport à mon exemple du début :

For Each cel In Range(montableau)
If cel.FormatConditions(1).Interior.ColorIndex = 3 Then MsgBox "Ok"
Next cel


Mille Merci à (par ordre d'apparition à l'écran de ce Peplum Vébéahesque)
Robert (pas moi l'autre), Léa, Ti et surtout au forum.

À plus,

Robert
 
R

Robert

Guest
Ti on s'est croisé, j'arrête pas sur ce post...

Je comprends ta colère et je te prie de m'excuser. Mon petit cerveau lent à mis du temps à réagir. Je ne sais comment te remercier car tu as eu encore la gentillesse d'expliquer là où moi j'aurais craqué en disant "laisse il est trop c..."

Mille merci.

À plus,

Robert
 

Discussions similaires

Statistiques des forums

Discussions
312 331
Messages
2 087 359
Membres
103 528
dernier inscrit
hplus