OVH Cloud OVH Cloud

Macros VB : récupérer le format réel d'une cellule ?

4 réponses
Avatar
GILLES
Comment récupérer la couleur réelle d'affichage d'une cellule ? VB par défaut
donne soit la couleur de base (Range.ColorIndex) soit la couleur "VRAI" du
format conditionnel(Range.FormatConditions(1).ColorIndex). En fait je
recherche à récupérer le booléen résultant du test conditionnel n°1, celui
qui va conditionner la couleur réelle d'affichage de la cellule.
J'ai tout essayé, en vain....
Cordialement

4 réponses

Avatar
anonymousA
bonjour,

Si dans ton programme tu testes le test conditionnel , tu auras la
réponse pour savoir s'il est vrai ou faux. Auquel cas, s'il est vrai ,
tu connais la couleur (p.e) de la police qui doit se produire dans la
cellule considérée.
En effet, il n'est pas possible de déterminer par les méthodes
habituelles la couleur de la police ( en faisant p.e
range("tat").font.colorindex) .

A+


GILLES (effacer) wrote:
Comment récupérer la couleur réelle d'affichage d'une cellule ? VB par défaut
donne soit la couleur de base (Range.ColorIndex) soit la couleur "VRAI" du
format conditionnel(Range.FormatConditions(1).ColorIndex). En fait je
recherche à récupérer le booléen résultant du test conditionnel n°1, celui
qui va conditionner la couleur réelle d'affichage de la cellule.
J'ai tout essayé, en vain....
Cordialement


Avatar
GILLES
--
Cordialement


"anonymousA" wrote:

bonjour,

Si dans ton programme tu testes le test conditionnel , tu auras la
réponse pour savoir s'il est vrai ou faux. Auquel cas, s'il est vrai ,
tu connais la couleur (p.e) de la police qui doit se produire dans la
cellule considérée.
En effet, il n'est pas possible de déterminer par les méthodes
habituelles la couleur de la police ( en faisant p.e
range("tat").font.colorindex) .

A+


GILLES (effacer) wrote:
Comment récupérer la couleur réelle d'affichage d'une cellule ? VB par défaut
donne soit la couleur de base (Range.ColorIndex) soit la couleur "VRAI" du
format conditionnel(Range.FormatConditions(1).ColorIndex). En fait je
recherche à récupérer le booléen résultant du test conditionnel n°1, celui
qui va conditionner la couleur réelle d'affichage de la cellule.
J'ai tout essayé, en vain....
Cordialement



Mais c'est justament ça mon problème : Comment tester la formule du format

dans mon programme ??? pourrais-tu être un peu plus explicite si tu as le
temps ?


Avatar
anonymousA
p.e si la MEFC de la cellule A1 est telle que la police de ta cellule
A1 devient rouge quand il y a la valeur "toto" dans la cellule. Cet
exemple est vraiment basique mais c'est juste didactique

Msgbox range("A1").value="toto" te renverra VRAI si la valeur stricte
toto est en cellule A1 .Donc en exécutant cette instruction , tu
exécutes formellement ce que réalise pour toi la MEFC.
En conséquence, cette instruction est l'équivalent d'un point de vue
fonctionnel de la MEFC qui teste si "la valeur de la cellule " est
égale à "toto". Si la formule est vraie et donc
range("A1").value="toto" renvoie VRAI , alors la couleur devrait être
rouge, ce qui revient à déterminer que la cellule A1 est en police
rouge.

Bien sur, les conditions peuvent être beaucoup plus complexes mais le
principe est toujours le même.

A+
Avatar
PMO
Bonjour,

J'extrapole votre question et cela donne:

QUESTION
1) Je veux appliquer un format conditionnel à toutes les cellules d'une
feuille
(par exemple: la valeur de la cellule est égale à 3 => Formats/Motifs
Couleur = Rouge)
mais si j'ai plus de 3 conditions je suis limité par les possibilités
d'Excel (limite = 3)
2) Par conséquent, je veux que chaque fois que j'applique une condition les
cellules
affectées par cette dernière gardent le format qu'elle y a défini.
3) La manière de faire est, par macro, de récupérer la couleur du fonds de
la mise en forme
conditionnelle et de l'appliquer, en dur, à la propriété Interior.ColorIndex
des cellules
concernées. Je supprime alors mon format conditionnel et la couleur de fonds
est
conservée.
4) De ce fait, je peux appliquer autant de fois que je veux, et chacune à la
suite, des
mises en forme conditionnelle.

REMARQUE
Mon code ne s'occupe que d'une mise en forme conditionnelle à la fois ( en
l'occurrence
la 1). Il traite uniquement le type "valeur de cellule" et l'opérateur "est
égale" ainsi que
la couleur du fonds.
Pour aller plus loin il suffit d'écrire le code répondant aux différentes
situations.
Ce code n'est qu'un exemple.

FAIRE
1) Dans une feuille renseignée par des valeurs sélectionnez toutes les
cellules et
appliquez une mise en forme conditionnelle.
(par exemple: la valeur de la cellule est égale à 3 => Formats/Motifs
Couleur = Rouge)
2) Lancez la macro
3) Supprimez la mise en forme conditionnelle. La couleur est reproduite.
4) Appliquez une nouvelle mise en forme conditionnelle.
(par exemple: la valeur de la cellule est égale à 8 => Formats/Motifs
Couleur = Vert)
5) Lancez la macro
6) Supprimez la mise en forme conditionnelle. La couleur est reproduite.
7) etc.

'**********************
Sub PMO_RecupFondsColorindexFC()
Dim FC As FormatCondition
Dim var
Dim i&
Dim j&
Dim AnterieurExiste As Boolean
Dim C As Range
Dim R As Range
If ActiveSheet.Cells.FormatConditions.Count = 0 Then Exit Sub
Set FC = ActiveSheet.Cells.FormatConditions(1)
'---- Récupère toutes les valeurs de la feuille ----
If IsEmpty([a1]) Then [a1] = "_dummy_"
var = ActiveSheet.UsedRange
If [a1] = "_dummy_" Then [a1] = ""
'### Ne fonctionne qu'avec "la valeur ###
'### de la cellule est égale à x" et ###
'### "Formats/Motifs Couleur = y" ###
If FC.Operator = xlEqual And FC.Type = xlCellValue Then
'---- Balaie chaque valeur ----
For i& = 1 To UBound(var, 1)
For j& = 1 To UBound(var, 2)
'---- Si correspondance (valeur=formule du FC) alors ... ----
If var(i&, j&) = FC.Formula1 Then
'---- Identification de la cellule ----
Set C = Range(Cells(i&, j&), Cells(i&, j&))
'---- Union de la cellule C dans la plage R ----
If Not AnterieurExiste Then
Set R = C 'si aucune antériorité
AnterieurExiste = True
Else
Set R = Union(R, C) 'si antériorité
End If
End If
Next j&
Next i&
End If
'---- Affectation de la couleur du FC à toute la plage R ----
R.Interior.ColorIndex = FC.Interior.ColorIndex
'### Code à compléter pour les autres ###
'### cas de FC.Operator et FC.Type ###
'......
End Sub
'**********************

En espérant que c'est à cela que vous vouliez aboutir.
Cordialement.

--
PMO
Patrick Morange



Comment récupérer la couleur réelle d'affichage d'une cellule ? VB par défaut
donne soit la couleur de base (Range.ColorIndex) soit la couleur "VRAI" du
format conditionnel(Range.FormatConditions(1).ColorIndex). En fait je
recherche à récupérer le booléen résultant du test conditionnel n°1, celui
qui va conditionner la couleur réelle d'affichage de la cellule.
J'ai tout essayé, en vain....
Cordialement