VBA Mise en forme conditionnelle de toutes les pages de mon classeur

paulise

XLDnaute Nouveau
Bonjour,
j'ai bien lu tous les posts parlant de la mise en forme conditionnelle mais c'est trop compliqué pour moi.
Ma question est assez simple (je pense)
j'ai un classeur avec 24 feuilles, je souhaiterai que toutes les valeurs négatives présentes dans ce classeur dans les cellules G7:I51 de chaque page apparaissent en rouge quelque soit leur format (j'ai des valeurs numériques simples et des pourcentages).
J'ai besoin du code mais aussi de l'endroit où l'enregistrer.
Je vous remercie infiniment de votre aide.
 

Softmama

XLDnaute Accro
Re : VBA Mise en forme conditionnelle de toutes les pages de mon classeur

Bonjour paulise,

ce code à placer dans le module de ton classeur (thisworkbook) devrait réaliser ce que tu souhaites :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sh.Range("G7:I51").NumberFormat = "#,##0.00;[Red]-#,##0.00"
End Sub
 

paulise

XLDnaute Nouveau
Re : VBA Mise en forme conditionnelle de toutes les pages de mon classeur

Bonsoir
alors cela résout une partie de mes questions par contre cela modifie le format de mes cellules en pourcentage, je souhaite juste que les valeurs négatives soient rouges, mais qu'elles ne changent pas de format.
Merci en tout cas pour cette réponse si rapide.
 

Softmama

XLDnaute Accro
Re : VBA Mise en forme conditionnelle de toutes les pages de mon classeur

re,

ha oui, pardon, remplace le code précédent par ceci, cela devrait mieux coller.

VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
dim c as Range
On error resume next
For each c in sh.Range("G7:I51").specialcells(xlcelltypeconstants, 1)
  c.font.colorindex= iif( c< 0,3, 1)
next c
End Sub
 

paulise

XLDnaute Nouveau
Re : VBA Mise en forme conditionnelle de toutes les pages de mon classeur

Bonjour à tous,
après plusieurs essais j'ai finalement fais le choix de ce code :
Private Sub Workbook_sheetActivate(ByVal Sh As Object)
Dim c As Range
On Error Resume Next
For Each c In Sh.Range("C7:I51")
If c.Value < 0 Then c.Font.ColorIndex = 3
If c.Value >= 0 Then c.Font.ColorIndex = 0
Next c
End Sub

j'ai supprimé le "specialcells(xlcelltypeconstants,1)" d'abord parce que je ne comprenais pas ce que cela voulait dire et ensuite parce que ça marche très bien sans.
J'ai rajouté c.Value parce que sinon cela ne passait en rouge que les cases où j'avais des valeurs brutes qui n'étaient pas le résultat d'un calcul.
maintenant il me reste une autre question : est-il possible que les cellules passent en rouge sans que j'ai besoin de quitter la page et y revenir ?
j'ai essayé de remplacer SheetActivate par SheetChange mais j'ai un message d'erreur.

Je remercie Softmama de m'avoir si bien avancé.
 

Softmama

XLDnaute Accro
Re : VBA Mise en forme conditionnelle de toutes les pages de mon classeur

Bonjour,

Tu peux un peu blinder le truc en multipliant le déclenchement de la macro :
VB:
Private Sub Workbook_sheetActivate(ByVal Sh As Object)
  Mise_en_forme Sh
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Mise_en_forme Sh
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  Mise_en_forme Sh
End Sub

Private Sub Mise_en_forme(she As Object)
Dim c As Range
On Error Resume Next
 For Each c In she.Range("C7:I51").SpecialCells(xlCellTypeConstants, 1)
  c.Font.ColorIndex = IIf(c.Value < 0, 3, 0)
 Next c
End Sub

le SpecialCells permet de ne gérer que les cellules qui contiennent des valeurs numériques, afin de gagner un peu de temps.
 

Discussions similaires

Statistiques des forums

Discussions
312 199
Messages
2 086 157
Membres
103 137
dernier inscrit
Billly