FormatConditions à définir en VB pour contrôler Excel
1 réponse
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 !).
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
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
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" <Bernard.Jonckers@swing.be> a écrit dans le message de
news: 3fa8052f$0$29034$ba620e4c@reader1.news.skynet.be...
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 !).
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 !).