XL 2016 Création d'une mise en forme conditionnelle fonction d'une formule dans un TCD

Livio

XLDnaute Nouveau
Bonjour à tous

Je cherche à créer à partir d'une macro une mise en forme conditionnelle dans un TCD : Si ma colonne Diff est < à -25k et si ma colonne % est < à -18% alors colorer Diff.
Pour moi cela ne peut se faire qu'avec une mise en forme conditionnelle liée à une formule

Apparemment un décalage se crée (c'est la cellule de la ligne d'au dessus qui se colore !) . Je comprends que le pb est identifié chez Microsoft mais ... comment le contourner ???

Je joins un fichier avec la macro récalcitrante
Merci pour votre aide, j'en pleure...
 

Pièces jointes

  • XL_Downloads.xlsm
    425 KB · Affichages: 7

chris

XLDnaute Barbatruc
Bonjour
VB:
Sub MFC_Diff()

    ActiveSheet.PivotTables("TCD").PivotSelect "' Diff':' %'", xlDataAndLabel, True
    Selection.PivotTable.DataBodyRange.FormatConditions.Delete
    Selection.Offset(1, 0).Resize(1, 1).Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=ET($E5<-25000;$F5<-0,18)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 192
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions(1).ScopeType = xlFieldsScope
End Sub
 
Dernière édition:

Livio

XLDnaute Nouveau
Bonjour
VB:
Sub MFC_Diff()

    ActiveSheet.PivotTables("TCD").PivotSelect "' Diff':' %'", xlDataAndLabel, True
    Selection.PivotTable.DataBodyRange.FormatConditions.Delete
    Selection.Offset(1, 0).Resize(1, 1).Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=ET($E5<-25000;$F5<-0,18)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 192
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions(1).ScopeType = xlFieldsScope
End Sub
Merci Chris !
Grâce à toi, je ne pleure plus. Par contre, en quoi l'ajout des lignes 2 (DataBodyRange...) et 3 (Resize) permet d'obtenir ce miracle ?
En tout cas, un grand merci
 

chris

XLDnaute Barbatruc
Bonjour
VB:
Selection.PivotTable.DataBodyRange.FormatConditions.Delete
supprime les MFC du TCD pour ne pas les empiler. Pas forcément indispensable selon le contexte.

Pour agir sur un champ de TCD il faut sélectionner la première valeur du champ (même vide)
L'offset permet de se placer sous le titre et le resize de se limiter à une cellule

Ce qui permettrait en théorie de sélectionner la bonne cellule même si le TCD est déplacé ou des champs insérés ou supprimés faisant glisser notre champ à droite ou à gauche...
Cependant pour aller au bout de cette théorie, les adresses de la formule de MFC devraient être calculées aussi dynamiquement.
 
Dernière édition:

Discussions similaires