[VBA] Problème de FormatConditions

4 réponses
Avatar
HD
Bonjour,

J'ai une première condition qui s'applique sur toutes les cellules d'une
feuille qui m'affiche les cellules non protégées en intérieur jaune.

Je voudrais une deuxième condition qui m'affiche les caractères des
cellules d'une plage données en orange lorsque la valeur dans celles ci
est négative... mon souci est que lorsque j'applique la condition j'ai
alors toutes les cellules non protégées de la feuille qui sont en
caractères oranges.

Cells.Select
Selection.FormatConditions.Delete

Selection.FormatConditions.Add Type:=xlExpression,
Formula1:="=CELLULE(""protege"";A1)=0"
Selection.FormatConditions(1).Interior.ColorIndex = 36

Range("J14:J20").Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess,
Formula1:="=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).Font.ColorIndex = 46

Je voudrais que les valeurs de la plage J14:J20 soit bien en caractères
de couleur orange si inférieure à 0 ET avoir en couleur de fond
d'intérieur des cellules du jaune pour les cellules non protégées.

Je dois louper quelque chose...

Merci d'avance pour votre aide.

Cordialement,

@+
HD

4 réponses

Avatar
DanielCo
Bonjour,
Quelle est ta version d'Excel ?
Cordialement.
Daniel
Le 09/11/2015, HD a supposé :
Bonjour,

J'ai une première condition qui s'applique sur toutes les cellules d'une
feuille qui m'affiche les cellules non protégées en intérieur jaune.

Je voudrais une deuxième condition qui m'affiche les caractères des cellules
d'une plage données en orange lorsque la valeur dans celles ci est
négative... mon souci est que lorsque j'applique la condition j'ai alors
toutes les cellules non protégées de la feuille qui sont en caractères
oranges.

Cells.Select
Selection.FormatConditions.Delete

Selection.FormatConditions.Add Type:=xlExpression,
Formula1:="ÎLLULE(""protege"";A1)=0"
Selection.FormatConditions(1).Interior.ColorIndex = 36

Range("J14:J20").Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess,
Formula1:="=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).Font.ColorIndex = 46

Je voudrais que les valeurs de la plage J14:J20 soit bien en caractères de
couleur orange si inférieure à 0 ET avoir en couleur de fond d'intérieur des
cellules du jaune pour les cellules non protégées.

Je dois louper quelque chose...

Merci d'avance pour votre aide.

Cordialement,

@+
HD
Avatar
MichD
Bonjour,

A ) Tu vas ralentir l'exécution de ton classeur si tu appliques
une mise en forme conditionnelle sur toutes les cellules d'une feuille de calcul.
Pourquoi ne pas te limiter de A1 à la dernière cellule de la feuille.

Exemple comment procéder pour définir cette plage :
'-----------------------------------------------------------
Sub test1()
Dim DerLig As Long, DerCol As Integer, Rg As Long

With Worksheets("feuil1")
'donne la dernière ligne occupée
'soit par une valeur ou une formule
DerLig = .Cells.Find("*", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

'donne la dernière colonne occupée
'soit par une valeur ou une formule
DerCol = .Cells.Find("*", LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

'Variable Range représentant la plage de cellules occupées
Set Rg = .Range("A1", .Cells(DerLig, DerCol))
End With
MsgBox Rg.Address
End Sub
'-----------------------------------------------------------

B ) Au lieu d'utiliser la propriété "ColorIndex", utilise plutôt la propriété "Color"
Tu t'assures que les couleurs seront les mêmes, peu importe l'ordinateur
et les paramètres d'Excel sur cet ordinateur.
Range("a1").Interior.Color = RGB(245, 125, 56)


C ) Quand tu es en VBA, tout est en ANGLAIS.
Ceci doit être traduit en anglais :
Formula1:="ÎLLULE(""protege"";A1)=0"
PAR :
Formula1:="ÎLL(""protect"",A1)=0"

Voici un exemple de code... Nom de l'onglet de la feuille à adapter
'je n'ai pas testé les conditions...
'--------------------------------------------------------------------
Sub test()

With Worksheets("Feuil1")
With Cells
.FormatConditions.Delete
.FormatConditions.Add Type:=xlFormula, _
Formula1:="ÎLL(""protect"",A1)=0"
.FormatConditions(1).Interior.ColorIndex = 36
End With

With .Range("J14:J20")
.FormatConditions.Add Type:=xlCellValue, _
Operator:=xlLess, Formula1:="=0"
.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
.FormatConditions(1).Font.ColorIndex = 46
End With
End With

End Sub
'--------------------------------------------------------------------






"HD" a écrit dans le message de groupe de discussion : n1q8mo$unq$

Bonjour,

J'ai une première condition qui s'applique sur toutes les cellules d'une
feuille qui m'affiche les cellules non protégées en intérieur jaune.

Je voudrais une deuxième condition qui m'affiche les caractères des
cellules d'une plage données en orange lorsque la valeur dans celles ci
est négative... mon souci est que lorsque j'applique la condition j'ai
alors toutes les cellules non protégées de la feuille qui sont en
caractères oranges.

Cells.Select
Selection.FormatConditions.Delete

Selection.FormatConditions.Add Type:=xlExpression,
Formula1:="ÎLLULE(""protege"";A1)=0"
Selection.FormatConditions(1).Interior.ColorIndex = 36

Range("J14:J20").Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess,
Formula1:="=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).Font.ColorIndex = 46

Je voudrais que les valeurs de la plage J14:J20 soit bien en caractères
de couleur orange si inférieure à 0 ET avoir en couleur de fond
d'intérieur des cellules du jaune pour les cellules non protégées.

Je dois louper quelque chose...

Merci d'avance pour votre aide.

Cordialement,

@+
HD
Avatar
HD
Quelle est ta version d'Excel ?



Je suis sous Excel 2007.

@+
HD
Avatar
HD
A ) Tu vas ralentir l'exécution de ton classeur si tu appliques
une mise en forme conditionnelle sur toutes les cellules d'une
feuille de calcul.



Merci de ces précieux conseils. Effectivement, en VBA j'avai un peu trop
tendance à appliquer les mises en forme conditionnelle à toutes les
cellules d'une ou de plusieurs feuilles de calcul (avec l'extension xlsb
et donc avec de très grandes quantités de cellules).

B ) Au lieu d'utiliser la propriété "ColorIndex", utilise plutôt la
propriété "Color"
Tu t'assures que les couleurs seront les mêmes, peu importe
l'ordinateur
et les paramètres d'Excel sur cet ordinateur.



Intéressant à savoir car effectivement il m'est souvent arrivé d'avoir
des couleurs changeantes suivant les postes et les versions d'Excel.

@+
HD