XL 2013 creer par vba, mise en forme conditionnelle d'après une liste

Maika

XLDnaute Nouveau
Bonjour à tous,

Je souhaiterai une macro qui créerai une mise en forme conditionnelle (dans le tableau "Liste") par rapport aux éléments (et leur mise en forme) de la liste "etat", sachant que ces éléments et leur mise en forme peuvent être modifiés.

merci d'avance pour votre aide

Maïka
 

Pièces jointes

  • Classeur2.xlsx
    10.8 KB · Affichages: 33
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir Maika,

Voir le code dans le fichier joint. La MFC du tableau de la feuille "Liste" est mise à jour à l’activation de cette feuille "Liste".
VB:
Sub DefinirMFC()
Dim PlageEtat As Range, PlageTablo, xcell, n&

  Application.ScreenUpdating = False
  Set PlageEtat = Sheets("Etat").Range("a1").CurrentRegion
  Set PlageEtat = PlageEtat.Resize(PlageEtat.Rows.Count - 1).Offset(1)
  Set PlageTablo = Range("Liste")
  With PlageTablo
    .FormatConditions.Delete
    For Each xcell In PlageEtat
      n = n + 1
      .FormatConditions.Add Type:=xlExpression, Formula1:="=EQUIV($A2;Etat!$A$1:$A$20;0)=" & n + 1
      .FormatConditions(n).SetFirstPriority
      With .FormatConditions(1).Font
          .Bold = xcell.Font.Bold
          .Italic = xcell.Font.Italic
          .ColorIndex = xcell.Font.ColorIndex
          .Color = xcell.Font.Color
          .TintAndShade = 0
      End With
      With .FormatConditions(1).Interior
          .PatternColorIndex = xlAutomatic
          .ColorIndex = xcell.Interior.ColorIndex
          .Color = xcell.Interior.Color
          .TintAndShade = 0
      End With
    .FormatConditions(n).StopIfTrue = False
    Next xcell
  End With
End Sub

nota : si vous désirez ne colorer que la colonne Etat de votre tableau de la feuille "Liste", alors remplacez dans le code With PlageTablo par With PlageTablo.Columns(1)
 

Pièces jointes

  • Maika- MFC- v1.xlsm
    24.2 KB · Affichages: 44
Dernière édition:

Maika

XLDnaute Nouveau
Bonjour,

Merci beaucoup, c'est tout a fait ce que je voulais... j'arrivais a créer des mises en formes conditionnelles par macro, mais je n'arrivais pas à copier le format de la cellule...

Pourriez-vous juste me "traduire" les deux lignes suivantes ?

VB:
Set PlageEtat = Sheets("Etat").Range("a1").CurrentRegion
Set PlageEtat = PlageEtat.Resize(PlageEtat.Rows.Count - 1).Offset(1)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour Maika,

Set PlageEtat = Sheets("Etat").Range("a1").CurrentRegion
CurrentRegion désigne la plage dont fait partie la cellule A1. C'est l'équivalent de la combinaison des touches CTRL + * quand vous êtes positionné sur la cellule A1.

Set PlageEtat = PlageEtat.Resize(PlageEtat.Rows.Count - 1).Offset(1)
La plage sélectionnée comporte la ligne 1 (celle de l'en-tête). Comme on n'en veut pas, on considère cette zone [(PlageEtat) et on va la transformer en une zone identique mais sans la première ligne. Pour cela, on redimensionne le nombre de lignes de la plage moins une ligne [Resize(PlageEtat.Rows.Count - 1)], puis, on déplace cette nouvelle plage d'une ligne vers le bas pour commencer la nouvelle plage à la ligne 2 [Offset(1)].
 

Maika

XLDnaute Nouveau
Merci beaucoup mapomme,

je comprends beaucoup mieux...

je vais abuser un peu... si je devais avoir 2 plages différentes, (identifiées dans la colonne à coté), ça compliquerai beaucoup la macro ??
 

Pièces jointes

  • Classeur2.xlsx
    11.6 KB · Affichages: 19

Maika

XLDnaute Nouveau
Re,
Le but est que la plage 1 s'étale sur tout le tableau, et que la plage 2 soit limité qu'à certaines colonnes.
c'est juste pour du visuel, pour évité que ça soit trop chargé en couleur.
par exemple pour l'état "supprimé", toute la ligne est colorié en rose.
pour d'autre, juste 4 éléments sont coloriés.

J'espère que c'est compréhensible...
Avec une exemple concret, certainement plus. ;)
Sans titre 3.jpg
 

Maika

XLDnaute Nouveau
Bonjour mapomme,

C'est exactement ce que je recherchais... merci beaucoup...
Sauf qu'un plan ne se déroule jamais sans accro, (malgré ce que peut dire Hannibal Smith):p
J'ai essayé de compiler les deux macros (car j'ai deux listes de MFC),
si je désactive l'un ou l'autre des blocs, la macro fonctionne très bien.
Si j'active les deux blocs, la numérotation pour la formule dans les MFC continue sur la 2e liste.
La formule de la MFC donne :

=EQUIV($B2;Etat;0)=10

au lieu de :

=EQUIV($B2;Etat;0)=1

Je remercie d'avance pour l'aide apportée...
 

Pièces jointes

  • test 1.xlsm
    97.2 KB · Affichages: 21

SOP

XLDnaute Nouveau
Bonjour,

Je suis intéressée par ce sujet car je souhaite faire la même chose que la question initiale : créer une mise en forme conditionnelle via vba (dans l'onglet "recap") par rapport aux éléments (et leur mise en forme) de la liste présente dans "codelists"(liste et mise en forme pouvant évoluer).

J'ai essayé de repartir du code mais je n'y arrive pas. Pouvez-vous l'adapter pour mon tableau ?

j'aimerai également y ajouter (si possible) les MFC suivantes :
- police blanche si =0
- dans la partie sous les dates mettre en trait vertical à gauche si la date est un lundi

Merci d'avance
 

Pièces jointes

  • SOP_MFC.xlsx
    27.6 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 331
Membres
103 519
dernier inscrit
Thomas_grc11