Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

FormatConditions à définir en VB pour contrôler Excel

1 réponse
Avatar
Bernard Jonckers
Salut,

Voilà mon problème :

Je crée, à partir de VB6, une feuille Excel (en fait, une série de feuilles
Excel, mais cela n'a guère d'importance).

Je remplis la feuille sur une boucle

For I = 1 to NBDonnees

Je formate les cellules (couleur, police, ...) sans problème.
Je crée des règles de validation sans problème.

Je désire ensuite créer du formatage sous condition : si le contenu de la
cellule Di (D2 si le compteur i est à 2) est inférieur à une valeur donnée,
mise en gras et changement de couleur, par exemple !

Si la valeur donnée est un nombre, pas de problème !

oSheet.Range("D" & I).FormatConditions.Add Type:=xlCellValue,
Operator:=xlLess, _
Formula1:="10"
With oSheet.Range("D" & I).FormatConditions(1)
.Font.Bold = True
.Font.ColorIndex = 3
End With

Si la valeur donnée est la réponse à un calcul effectué à partir d'une
variable déclarée, aucun problème !

oSheet.Range("D" & I).FormatConditions.Add Type:=xlCellValue,
Operator:=xlLess, _
Formula1:=MaxExa / 2
With oSheet.Range("D" & I).FormatConditions(1)
.Font.Bold = True
.Font.ColorIndex = 3
End With

Si la valeur est celle contenue dans une autre cellule Gi (G2 si le compteur
i est à 2), les problèmes commencent !

Fin = "=G" & I & "/2"

Fin contient Gi/2 (=G2/2 si le compteur i est à 2)

oSheet.Range("D" & I).FormatConditions.Add Type:=xlCellValue,
Operator:=xlLess, _
Formula1:=Fin
With oSheet.Range("D" & I).FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 3
End With

Ce code ne donne pas le résultat escompté à la lecture de la condition sur
la cellule Di (D2 si le compteur i est à 2)

J'attends dans la fenêtre de mise en forme conditionnelle :

est inférieure à =G2/2

mais j'obtiens :

est inférieure à =AB9/2 !!!!!!

Le formatage de D2 est donc conditionné par comparaison avec le contenu de
AB9 divisé par 2, et non pas par le contenu de G2 divisé par 2.

Si j'introduit des guillemets, je peux obtenir :

est inférieure à ="G2/2"

mais, évidemment, la condition n'est plus du tout pareille !


Je voudrais donc connaître la manière de conditionner, par programmation VB,
le formatage d'une cellule donnée Gi, par rapport à une condition calculée
sur le contenu d'une autre cellule Gi (i est toujours la valeur du compteur
correspondant à la ligne en cours !).

Cela est-il possible ?

Je peux évidemment, de manière manuelle, recommencer le format condition sur
chacune des cellules concernées, mais cela est fastidieux (près de cent
feuilles Excel, contenant chacune plus de 250 lignes !).

Qui peut m'aider ?

Merci d'avance à tous.

BJ

1 réponse

Avatar
Bernard Jonckers
Petite précision "oubliée" involontairement dans la question : la dellule Gi
contient une formule du genre "=SUM(RC[-5]:RC[-1])" et a donc un contenu
dynamique, qui dépend, entre autres de Di !!!

Merci

BJ


"Bernard Jonckers" a écrit dans le message de
news: 3fa8052f$0$29034$
Salut,

Voilà mon problème :

Je crée, à partir de VB6, une feuille Excel (en fait, une série de


feuilles
Excel, mais cela n'a guère d'importance).

Je remplis la feuille sur une boucle

For I = 1 to NBDonnees

Je formate les cellules (couleur, police, ...) sans problème.
Je crée des règles de validation sans problème.

Je désire ensuite créer du formatage sous condition : si le contenu de la
cellule Di (D2 si le compteur i est à 2) est inférieur à une valeur


donnée,
mise en gras et changement de couleur, par exemple !

Si la valeur donnée est un nombre, pas de problème !

oSheet.Range("D" & I).FormatConditions.Add Type:=xlCellValue,
Operator:=xlLess, _
Formula1:="10"
With oSheet.Range("D" & I).FormatConditions(1)
.Font.Bold = True
.Font.ColorIndex = 3
End With

Si la valeur donnée est la réponse à un calcul effectué à partir d'une
variable déclarée, aucun problème !

oSheet.Range("D" & I).FormatConditions.Add Type:=xlCellValue,
Operator:=xlLess, _
Formula1:=MaxExa / 2
With oSheet.Range("D" & I).FormatConditions(1)
.Font.Bold = True
.Font.ColorIndex = 3
End With

Si la valeur est celle contenue dans une autre cellule Gi (G2 si le


compteur
i est à 2), les problèmes commencent !

Fin = "=G" & I & "/2"

Fin contient Gi/2 (=G2/2 si le compteur i est à 2)

oSheet.Range("D" & I).FormatConditions.Add Type:=xlCellValue,
Operator:=xlLess, _
Formula1:=Fin
With oSheet.Range("D" & I).FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 3
End With

Ce code ne donne pas le résultat escompté à la lecture de la condition sur
la cellule Di (D2 si le compteur i est à 2)

J'attends dans la fenêtre de mise en forme conditionnelle :

est inférieure à =G2/2

mais j'obtiens :

est inférieure à «9/2 !!!!!!

Le formatage de D2 est donc conditionné par comparaison avec le contenu de
AB9 divisé par 2, et non pas par le contenu de G2 divisé par 2.

Si j'introduit des guillemets, je peux obtenir :

est inférieure à ="G2/2"

mais, évidemment, la condition n'est plus du tout pareille !


Je voudrais donc connaître la manière de conditionner, par programmation


VB,
le formatage d'une cellule donnée Gi, par rapport à une condition calculée
sur le contenu d'une autre cellule Gi (i est toujours la valeur du


compteur
correspondant à la ligne en cours !).

Cela est-il possible ?

Je peux évidemment, de manière manuelle, recommencer le format condition


sur
chacune des cellules concernées, mais cela est fastidieux (près de cent
feuilles Excel, contenant chacune plus de 250 lignes !).

Qui peut m'aider ?

Merci d'avance à tous.

BJ