Macros VB : récupérer le format réel d'une cellule ?
4 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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 ?
--
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 ?
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 ?
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+
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.
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+
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
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
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