OVH Cloud OVH Cloud

Mise en forme conditionnelle

4 réponses
Avatar
Mac Bolan
bonjour,
je voudrais avoir la possibilité de dépasser les trois mises en forme
conditionnelle, j'ai essayé avec une macro mais j'obtiens systématiquement
un message d'erreur !
HELP !!!!

4 réponses

Avatar
ChrisV
Bonjour Mac,

Un exemple avec une MEFC appliquée sur la plage Zn
(dans la feuille de code de l'onglet concerné)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Not Intersect(Target.Cells, Range("Zn")) Is Nothing Then
For Each c In Target
Select Case c.Value
Case "a": c.Font.ColorIndex = 3
Case "b": c.Font.ColorIndex = 2
Case "c": c.Font.ColorIndex = 4
Case "d": c.Font.ColorIndex = 23
Case "e": c.Font.ColorIndex = 13
Case "f": c.Font.ColorIndex = 9
Case "g": c.Font.ColorIndex = 5
Case Else: c.Font.ColorIndex = xlAutomatic
End Select
Next
End If
End Sub


ChrisV


"Mac Bolan" a écrit dans le message de news:
OfwKE3F#
bonjour,
je voudrais avoir la possibilité de dépasser les trois mises en forme
conditionnelle, j'ai essayé avec une macro mais j'obtiens systématiquement
un message d'erreur !
HELP !!!!




Avatar
Michel Gaboly
Re,

Un détail :

Avec ton code tu ne limites pas la MEFC à la plage Zn : tu l'appliques
à Target si l'intersection de Target et de Zn n'est pas vide.

Il faudrait remplacer

For Each c In Target

par

For Each c In Intersect(Target.Cells, Range("Zn"))



Bonjour Mac,

Un exemple avec une MEFC appliquée sur la plage Zn
(dans la feuille de code de l'onglet concerné)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Not Intersect(Target.Cells, Range("Zn")) Is Nothing Then
For Each c In Target
Select Case c.Value
Case "a": c.Font.ColorIndex = 3
Case "b": c.Font.ColorIndex = 2
Case "c": c.Font.ColorIndex = 4
Case "d": c.Font.ColorIndex = 23
Case "e": c.Font.ColorIndex = 13
Case "f": c.Font.ColorIndex = 9
Case "g": c.Font.ColorIndex = 5
Case Else: c.Font.ColorIndex = xlAutomatic
End Select
Next
End If
End Sub

ChrisV

"Mac Bolan" a écrit dans le message de news:
OfwKE3F#
bonjour,
je voudrais avoir la possibilité de dépasser les trois mises en forme
conditionnelle, j'ai essayé avec une macro mais j'obtiens systématiquement
un message d'erreur !
HELP !!!!





--
Cordialement,

Michel Gaboly
http://www.gaboly.com


Avatar
ChrisV
tu l'appliques à Target si l'intersection de Target et de
Zn n'est pas vide


Pas d'accord Michel...
la procédure ne s'applique justement que si la condition
If Not Intersect(Target.Cells, Range("Zn")) Is Nothing
est vérifiée...

si l'intersection d'une cellule R appartenant à la plage P avec Zn n'est pas
vide, c'est que R appartient aussi à Zn...

Tu peux me donner moi un exemple plus précis ou la proc ne fonctionne pas
correctement.


ChrisV


Supposons Zn en C1:D20
"Michel Gaboly" a écrit dans le message de news:

Re,

Un détail :

Avec ton code tu ne limites pas la MEFC à la plage Zn : tu l'appliques
à Target si l'intersection de Target et de Zn n'est pas vide.

Il faudrait remplacer

For Each c In Target

par

For Each c In Intersect(Target.Cells, Range("Zn"))



Bonjour Mac,

Un exemple avec une MEFC appliquée sur la plage Zn
(dans la feuille de code de l'onglet concerné)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Not Intersect(Target.Cells, Range("Zn")) Is Nothing Then
For Each c In Target
Select Case c.Value
Case "a": c.Font.ColorIndex = 3
Case "b": c.Font.ColorIndex = 2
Case "c": c.Font.ColorIndex = 4
Case "d": c.Font.ColorIndex = 23
Case "e": c.Font.ColorIndex = 13
Case "f": c.Font.ColorIndex = 9
Case "g": c.Font.ColorIndex = 5
Case Else: c.Font.ColorIndex = xlAutomatic
End Select
Next
End If
End Sub

ChrisV

"Mac Bolan" a écrit dans le message de news:
OfwKE3F#
bonjour,
je voudrais avoir la possibilité de dépasser les trois mises en forme
conditionnelle, j'ai essayé avec une macro mais j'obtiens
systématiquement



un message d'erreur !
HELP !!!!





--
Cordialement,

Michel Gaboly
http://www.gaboly.com






Avatar
Michel Gaboly
Salut Chris,

Je n'avais pas vu ta réponse hier, ;-))

J'ai bien vu que la procédure ne s'applique que si la condition

If Not Intersect(Target.Cells, Range("Zn")) Is Nothing

est vérifiée...

Cela suffit si une seule cellule est modifiée à la fois mais pas
nécessairement si ube formule est entrée en une fois dans plusieurs
cellules : si l'intersection n'est pas vide, la MEFC s'applique à toutes
les cellules de Target et pas seulement à celles faisant partie de
l'intersection.

Voici donc un exemple :

1 - Entre les lettres "a" à "g" dans les cellules A1 à A7

2 - Définis la zone "Zn" comme se référant à B1 à B7

3 - Entre la formule = A1 dans la plage B1 à D7 en validant
avec Ctrl + Enter.

Tu verras que la MEFC s"applique à toute la plage B1 à D7
et pas seulement à Zn (B1 à B7.

C'est pourquoi

For Each c In Intersect(Target.Cells, Range("Zn"))

à la place de

For Each c In Target

est nécessaire.

Comme je le disais, cest un détail ; en pratique, ta procédure
fonctionne dans 99 % des situations.


"ChrisV" a écrit dans le message de news:
#VFlahI#
tu l'appliques à Target si l'intersection de Target et de
Zn n'est pas vide


Pas d'accord Michel...
la procédure ne s'applique justement que si la condition
If Not Intersect(Target.Cells, Range("Zn")) Is Nothing
est vérifiée...

si l'intersection d'une cellule R appartenant à la plage P avec Zn n'est
pas

vide, c'est que R appartient aussi à Zn...

Tu peux me donner moi un exemple plus précis ou la proc ne fonctionne pas
correctement.


ChrisV


Supposons Zn en C1:D20
"Michel Gaboly" a écrit dans le message de news:

Re,

Un détail :

Avec ton code tu ne limites pas la MEFC à la plage Zn : tu l'appliques
à Target si l'intersection de Target et de Zn n'est pas vide.

Il faudrait remplacer

For Each c In Target

par

For Each c In Intersect(Target.Cells, Range("Zn"))



Bonjour Mac,

Un exemple avec une MEFC appliquée sur la plage Zn
(dans la feuille de code de l'onglet concerné)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Not Intersect(Target.Cells, Range("Zn")) Is Nothing Then
For Each c In Target
Select Case c.Value
Case "a": c.Font.ColorIndex = 3
Case "b": c.Font.ColorIndex = 2
Case "c": c.Font.ColorIndex = 4
Case "d": c.Font.ColorIndex = 23
Case "e": c.Font.ColorIndex = 13
Case "f": c.Font.ColorIndex = 9
Case "g": c.Font.ColorIndex = 5
Case Else: c.Font.ColorIndex = xlAutomatic
End Select
Next
End If
End Sub

ChrisV

"Mac Bolan" a écrit dans le message de news:
OfwKE3F#
bonjour,
je voudrais avoir la possibilité de dépasser les trois mises en
forme




conditionnelle, j'ai essayé avec une macro mais j'obtiens
systématiquement



un message d'erreur !
HELP !!!!





--
Cordialement,

Michel Gaboly
http://www.gaboly.com