Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Mise en forme conditionnelle et format R1C1

  • Initiateur de la discussion Initiateur de la discussion PierreP
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

PierreP

XLDnaute Nouveau
Bonjour,

Je cherche à faire une mise en forme conditionnelle:

For Each Rcell In theRange
Rcell.FormatConditions.Delete
Rcell.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, Formula1:="=RC(" & offset_simulation_NewtoOld & ")"
Rcell.FormatConditions(1).Font.Bold = True
Next Rcell

Seulement ce code ne fonctionne pas. Pour le faire fonctionner, je dois transformer le 'RC' en 'LC'. Toutefois mon code doit etre international et j'ai peur que 'LC' ne passe pas...
Des idées?

Merci!

Pierre
 
Re : Mise en forme conditionnelle et format R1C1

Bonjour.
Je vous propose cette fonction qui renvoit un nouveau FormatConditions ajouté basé sur une expression booleenne R1C1:
VB:
Private Function FmtCondAdd(Rg As Range, ExprR1C1 As String) As FormatCondition
Dim SvgFmt As String, SvgFml As String
With Rg.Rows(1)
   SvgFmt = .NumberFormat: SvgFml = .Formula
   .NumberFormat = "General": .FormulaR1C1 = "=" & ExprR1C1: .Select
   Set FmtCondAdd = Rg.FormatConditions.Add(Type:=xlExpression, Formula1:=.FormulaLocal)
   .Formula = SvgFml: .NumberFormat = SvgFmt
   End With
End Function
Et aussi un exemple d'utilisation:
VB:
Private Sub FmtCondAddDeleted()
For Each Rg In Intersect(Me.[AidVM:AidDescr], RgLst.EntireRow).Columns
   With FmtCondAdd(Rg, "RC1=""X""").Interior: .PatternColor = RGB(255, 128, 192): .Pattern = xlUp: End With
   Next Rg
End Sub
Et pendant qu'on y est le brouillon de votre cas de figure (brouillon parce qu'à tester)
VB:
With Application: .Calculation = xlCalculationManual: .EnableEvents = False: End With
For Each RCol In theRange.Columns
      RCol.FormatConditions.Delete
      FmtCondAdd(RCol,"RC<>RC[" & offset_simulation_NewtoOld & "]").Font.Bold = True
      Next RCol
With Application: .Calculation = xlCalculationAutomatic: .EnableEvents = True: End With
Cordialement.
 
Dernière édition:
Re : Mise en forme conditionnelle et format R1C1

Bonjour Dranreb,

Merci pour votre réponse. J'ai intégré votre fonction, la formule conditionnelle est bien prise en compte mais ma référence relative est transformée en absolue:
Si je rentre FmtCondAdd(MyRange, "RC <> RC(12)")

J'obtiens in fine dans la formule conditionnelle: 'H7 <> H7(12)' (par exemple).
Alors qu'il faudrait: 'LC <> LC(12)'
 
Dernière édition:
Re : Mise en forme conditionnelle et format R1C1

Oui, ce sont des crochets qu'il faut dans les décallages d'expressions R1C1 natives et non des parenthèses. J'ai d'ailleurs fini par modifier mon message en y ajoutant, un peut tardivement, l'exemple adapté à votre cas.
Par ailleurs c'est normal que la formule soit resservie en A1 local. C'est pareil dans la barre de formule pour une formule entrée en R1C1 natif par VBA.
Cordialement.
 
Dernière édition:
Re : Mise en forme conditionnelle et format R1C1

Ok, merci, avec les crochets ça fait prends en compte le décalage.
Par contre la formule est toujours traduite en 'H7 <> T7', n'est il pas possible d'obtenir le format LC?
 
Re : Mise en forme conditionnelle et format R1C1

Parce que derrière je copie la ligne (je pense qu'insérer la mise en forme conditionnelle PUIS copier la ligne est plus rapide que copier la ligne n fois puis ecrire la mise en forme sur ces n cellules) et du coup la référence absolu ne correspond plus à ce que je veux faire.

Edit: Dans d'autres cellules, j'ai des formule en R1C1 qui restent écrites en R1C1, sans changement de format. Par exemple j'écris RC(1) + 5 (meme sans crochet) en VBA qui est traduit en LC(1) + 5 et affiché pareil.
 
Dernière édition:
Re : Mise en forme conditionnelle et format R1C1

N'auriez vous pas dans Outils, Options, Général, la case "Style de référence L1C1" cochée ?
Sinon vous pouuriez essayer d'utiliser .FormulaR1C1Local au lieu de .FormulaLocal dans la fonction mais j'ignore si ça marche.

L'important c'est d'entrer du natif et de ressortir du local n'est ce pas, puisque votre appli est internationale, chez les anglo le local sera identique au natif et chez les autre adapté à leur pays.

Je n'ai pas vu de référence absolue dans vos expressions, et ma fonction est pensée pour mettre d'un coup une MEFC sur toutes les lignes d'une plage verticale d'une seule colonne. Si la MEFC doit s'appuyer sur une même autre ligne pour toutes, spécifier ce N°de ligne derrière R et du coup le N° de ligne sera précédé d'un $ en notation A1.
 
Dernière édition:
Re : Mise en forme conditionnelle et format R1C1

Merci encore de votre aide,
Je me méfie un peu du Local, car (pour faciliter la chose...) mon code doit être international, donc ce qui est local pour moi ne doit surement pas l’être dans un autre pays.
Je continue mes tests!
 
Re : Mise en forme conditionnelle et format R1C1

J'ai fini par arriver à mes fins, voila le code:
Code:
For Each Rcell In theRange
     Rcell.FormatConditions.Delete
     expression = "=" &       Rcell.Offset(0,Offset_simulation_NewtoOld).AddressLocal(ReferenceStyle:=xlR1C1,    RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Rcell)
            Rcell.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual,            Formula1:=expression
      Rcell.FormatConditions(1).Font.Bold = True
Next Rcell
 
Re : Mise en forme conditionnelle et format R1C1

Bonjour.
Oui, bien sûr. Ma solution était plus simple à utiliser et plus générale, c'est tout.
Une remarque: On devrait pouvoir affecter cette MEFC d'un coup à tout theRange puisque tout est relatif. Il suffit de préciser theRange(1,1).Offset(... etc. au lieu de Rcell.Offset(... etc.
À+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…