Mise en forme conditionnelle appliquée par VBA

Chris57

XLDnaute Occasionnel
Bonjour à tous,

je cherche à appliquer par macro des mises en formes conditionnelles par macro.
Mais je ne trouve pas la syntaxe correcte, d'autant que l'enregistreur de macros Excel 2010 n'enregistre pas les mises en formes conditionnelles :(
je souhaite que les cellules de la plage passent au rouge si la cellule au dessus est égale à 1
Puis si possible ajouter une autre condition dans une autre plage : si la cellule au dessus est différente de l'actuelle, alors en rouge.

Voici ce que j'ai pu piocher sur le net :
Cells.FormatConditions.Delete
With [C1:AA1]
.FormatConditions.Add Type:=xlExpression, Formula1:="=""SI(R[-1]C = 1;VRAI;FAUX]"""
.FormatConditions(1).Font.Color = -16776961
End With

mais ça ne fonctionne pas... il y a un problème avec la formule.




NB :
je ne souhaite pas passer par des Worksheet_Change ou des Worksheet_SelectionChange.
Je veux appliquer ces mises en formes conditionnelles par macro car chaque mois une nouvelle feuille est créé et par macro je réécrit tous les formats

merci d'avance !!
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle appliquée par VBA

Bonjour Chris57, le forum,

Quand on est sur la ligne 1 il n'y a pas de cellules au-dessus...

Donc utiliser la fonction DECALER.

Par ailleurs, en sélectionnant la plage où doit s'appliquer la MFC il n'y aura pas de souci avec les références relatives, quelle que soit la version Excel :

Code:
Sub MFC()
Dim sel As Range, P As Range, a$

Set sel = Selection 'mémorise
Application.ScreenUpdating = False
Cells.FormatConditions.Delete 'RAZ

'---1ère MFC---
Set P = [C1:AA5] 'à adapter
a = P(1).Address(0, 0) 'références relatives
P.Select
P.FormatConditions.Add xlExpression, Formula1:="=DECALER(" & a & ";-1;)=1"
P.FormatConditions(1).Font.Color = -16776961

'---2ème MFC---
Set P = [C6:AA10] 'autre plage, à adapter
a = P(1).Address(0, 0) 'références relatives
P.Select
P.FormatConditions.Add xlExpression, Formula1:="=DECALER(" & a & ";-1;)<>" & a
P.FormatConditions(1).Font.Color = -16776961

sel.Select 'sélection initiale

End Sub
Edit : salut camarchepas, pas rafraîchi...

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle appliquée par VBA

Re,

On peut ne rien sélectionner, c'est mieux, mais alors il faut tester la version Excel :

Code:
Sub MFC()
Dim v%, P As Range, a$

v = Val(Application.Version) 'version Excel
Cells.FormatConditions.Delete 'RAZ

'---1ère MFC---
Set P = [C1:AA5] 'à adapter
a = IIf(v < 12, ActiveCell, P(1)).Address(0, 0) 'références relatives
P.FormatConditions.Add xlExpression, Formula1:="=DECALER(" & a & ";-1;)=1"
P.FormatConditions(1).Font.Color = -16776961

'---2ème MFC---
Set P = [C6:AA10] 'autre plage, à adapter
a = IIf(v < 12, ActiveCell, P(1)).Address(0, 0) 'références relatives
P.FormatConditions.Add xlExpression, Formula1:="=DECALER(" & a & ";-1;)<>" & a
P.FormatConditions(1).Font.Color = -16776961

End Sub
La version 12 c'est Excel 2007.

A+
 

Chris57

XLDnaute Occasionnel
Re : Mise en forme conditionnelle appliquée par VBA

je suis une cruche !! Pourquoi je donne la plage en ligne 1 comme exemple !!

En réalité il y a plusieurs plages de 1 ligne de hauteur etc. etc... bref j'ai pas voulu rentrer dans les détails pour simplifier la demande, mais aucune de ces plage n'est à la ligne 1. Désolé !!

Par contre je ne comprends pas la fonction DECALER... J'ai testé dans un classeur, la première plage reste au noir et la seconde reste au rouge. Tu peux m'expliquer ?
 

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle appliquée par VBA

Re,

Par contre je ne comprends pas la fonction DECALER... J'ai testé dans un classeur, la première plage reste au noir et la seconde reste au rouge. Tu peux m'expliquer ?

La fonction DECALER est bien connue de tout le monde non ?

Et les 2 plages de ma macro peuvent être absolument quelconques.

Pour le reste il faudrait voir votre fichier pour comprendre ce que vous avez fait.

A+
 

Chris57

XLDnaute Occasionnel
Re : Mise en forme conditionnelle appliquée par VBA

Je n'utilise jamais de formules, je préfère nettement les macros car au moins je suis sur qu'elles ne seront pas mutilés par mégarde par les utilisateurs ;)
Bon j'ai lu quelque explications sur la toile concernant cette fonction et j'en n'ai pas compris l'utilité... En même temps j'ai pas trop le temps.

Je ne peux pas poster le classeur car il fait 530ko, mais il est très simple :
Capture.PNG

Dans cet exemple il faut que le S apparaisse en rouge par Mise en forme conditionnelle, car contrairement aux autres jours, il est différent de la cellule juste au dessus.
 

Pièces jointes

  • Capture.PNG
    Capture.PNG
    2.8 KB · Affichages: 77
  • Capture.PNG
    Capture.PNG
    2.8 KB · Affichages: 79

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle appliquée par VBA

Re,

Si vous appliquez la 2ème MFC de ma macro sur la plage adéquate, le "S" sera coloré en rouge.

Sachez que tous mes codes ont été testés, si vous n'y arrivez pas je n'y peux rien.

Bonne nuit.
 
Dernière édition:

Chris57

XLDnaute Occasionnel
Re : Mise en forme conditionnelle appliquée par VBA

Effectivement je n'avais pas testé la seconde macro ou alors j'ai commis une erreur quelque part, mais je viens de refaire un essai et ça fonctionne !! Ouf !

Merci pour ton aide, ta patience et ta bonne humeur !
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise