Transformer les MFC en mises en forme non conditionnelles

Bonjour le Forum !

J'aimerais pouvoir "figer" les MFC d'une feuille, càd transformer les MFC en mises en forme normales, donc non conditionnelles.

Je pourrais le faire "manuellement", mais vu la complexité de la tâche, je me dis que ce serait parfait de le faire en VBA.

Mais ça dépasse totalement mes capacités...

Comment faire ?

Merci !!!

Bonjour,

est ce que les mfc sont créées avec une formule ?

Bonjour et merci de t'intéresser à mon sujet.

Oui, les MFC sont toutes créées avec des formules.

re,

voici un exemple,

With Range("A2")
t = Evaluate(.FormatConditions(1).Formula1)
If t Then .Interior.Color = .FormatConditions(1).Interior.Color
End With

Merci.

(je précise que mes connaissances en VBA sont extrêmement limitées – essentiellement : adapter en tâtonnant des macros créées par l'enregistreur et/ou de l'aide du forum)

1ère tentative : ça a beugué sur

t = Evaluate(.FormatConditions(1).Formula1)

Alors j'ai ajouté la ligne :

Dim t As Range

...mais ça n'a pas résolu le problème.

Voilà donc le code, en l'état actuel :

Sub Format_Convertir_MFC_en_MEF()

Dim t As Range
With Range("H11")
t = Evaluate(.FormatConditions(1).Formula1)
If t Then .Interior.Color = .FormatConditions(1).Interior.Color
End With

End Sub

Nota : pour les besoins de la cause, j'ai changé

With Range("A2")

en

With Range("H11")

Mais à terme, j'aurai besoin d'appliquer la macro sur toute une sélection, voire à toute la feuille.

re,

il ne faut pas déclarer Dim t As Range

peux-tu vérifier la valeur de f Debug.Print f

pour vérifier si la formule est bien lu

Sub Format_Convertir_MFC_en_MEF()
Dim t, f
With Range("H11")
f = .FormatConditions(1).Formula1
Debug.Print f

't = Evaluate(f)
'If t Then .Interior.Color = .FormatConditions(1).Interior.Color
End With

End Sub

Merci.

J'ai remplacé mon code par le tien.

Quand je l'exécute, il ne se passe rien.

re,

veux-tu qu'il n'y a rien dans la fenêtre d'exécution ?

Compris !

Dans la fenêtre exécution j'obtiens la formule de la 1ère condition de ma MFC :

=ET(L3C>43000;LC4<=L3C;LC6>=L3C)

Dans la fenêtre exécution j'obtiens la formule de la 1ère condition de ma MFC :

=ET(L3C>43000;LC4<=L3C;LC6>=L3C)

combien de condition y a t'il ?

faut t'il que toutes ces conditions soit vrai ?

Bonjour à toutes et tous,

ce n'est pas le plus simple de passer par .FormatConditions(1).Interior.Color

Ca nous donne que la couleur choisie, encore faut-il savoir si la règle a été appliquée, et si elle n'a pas été recouverte par une autre.

On a .DisplayFormat qui nous done le résultat suite aux règles appliquées.

Ce qui donne pour 4 colonnes par exemple :

    Dim pl As Range, c As Range
    ' on ne sélectionne que les cellules avec MFC
    Set pl = [C:F].SpecialCells(xlCellTypeAllFormatConditions)
    If Not pl Is Nothing Then ' et s'il y en a
        For Each c In pl
            c.Interior.Color = c.DisplayFormat.Interior.Color ' on récupère la couleur pour chacune
        Next c
        pl.FormatConditions.Delete ' nettoyage
    End If

eric

Bonjour eric, bien vu!

(re)bonjour, et merci à tous les 2,

@eriiic

Quand je lance ton code, ça coince sur cette ligne :

c.Interior.Color = c.DisplayFormat.Interior.Color

avec une : erreur '438' : propriété ou méthode non gérée par cet objet.

A noter que je suis sur Excel 2003, ça joue peut-être ?

J'ai aussi adapté le code pour qu'il s'applique sur d'autres colonnes

Set pl = [H:M].SpecialCells(xlCellTypeAllFormatConditions)

(parce que dans ma feuille, il n'y avait pas de MFC dans [C:F] ), mais ça n'a rien changé...

re,

remplace

c.Interior.Color = c.DisplayFormat.Interior.Color

par

c.Interior.Color = c.FormatConditions(1).Interior.Color

Ah oui, ça n'existait pas encore sur 2003.

Isabelle, ça ne suffira pas.

c.FormatConditions(1).Interior.Color est la couleur choisir pour cette condition, mais rien ne dit que le test l'a appliquée.

Il faut d'abord contrôler si les conditions sont remplies. Ca va de simple à très très compliqué selon la formule et s'il y a plusieurs MFC sur la cellule

eric

Retrouvé dans mes archives, par lermitte222

Lui mettre 1 en 2nd paramètre pour avoir .Color :

Public Function CouleurMFC(RG As Range, Optional Mode As Byte = 0) As Variant
Dim e As Long, i As Byte, LoTest As Boolean
Dim LoMFC As FormatCondition
    Application.Volatile
    'boucle sur le nombre de condition(s)
    'Si pas de MFC .FormatConditions.Count renvoi 0
    For i = 1 To RG.FormatConditions.Count
        Set LoMFC = RG.FormatConditions(i)
        If LoMFC.Type = xlCellValue Then
        'tester le type de la formule entrée
            Select Case LoMFC.Operator
            Case xlEqual
                LoTest = RG = Evaluate(LoMFC.Formula1)
            Case xlNotEqual
                LoTest = RG <> Evaluate(LoMFC.Formula1)
            Case xlGreater
                LoTest = RG > Evaluate(LoMFC.Formula1)
            Case xlGreaterEqual
                LoTest = RG >= Evaluate(LoMFC.Formula1)
            Case xlLess
                LoTest = RG < Evaluate(LoMFC.Formula1)
            Case xlLessEqual
                LoTest = RG <= Evaluate(LoMFC.Formula1)
            Case xlNotBetween
                LoTest = (RG < Evaluate(LoMFC.Formula1) Or RG > Evaluate(LoMFC.Formula2))
            Case xlBetween
                LoTest = (RG >= Evaluate(LoMFC.Formula1)) And (RG <= Evaluate(LoMFC.Formula2))
            End Select
            If LoTest Then
                'Peu ajouter d'autre format si nécessaire,
                'comme la bordure, la police etc..
                Select Case Mode
                Case 0
                    CouleurMFC = LoMFC.Interior.ColorIndex
                Case 1
                    CouleurMFC = LoMFC.Interior.Color
                End Select
                Exit Function
            End If
        End If
    Next i
    CouleurMFC = 0
End Function

re,

une autre possibilité,

Sub TestMFC()
Dim c As Range, a As Integer, i As Integer, x As String, t
For Each c In Sheets("Feuil1").Range("B4:B7") '<------ plage à adapter
 c.Select
   ' test de 1 à x (possibilité de 3 formules de MFC)
    For i = 1 To c.FormatConditions.Count
        t = Evaluate(c.FormatConditions(i).Formula1)

        'vérifier si le résultat de la formule est vrai
        'si une des trois formules de MFC est vrai, a=1
        If t Then a = 1
    Next i

    'si une des 3 formules MFC n'est vrai, on récupere la couleur
    If a = 1 Then
        c.Interior.Color = c.FormatConditions(i).Interior.Color
    End If

    'remet le test à 0 pour la prochaine cellule à vérifier
    a = 0
Next c
End Sub

Merciiii à tous les 2 !

J'avoue que je ne sais pas quoi faire de la proposition d'eriiic donc je n'ai fait que tester celle d'i20100.

Ça coince sur :

If t Then a = 1

avec une erreur 13 'incompatibilité de type'

Bonjour à tous

Les format des MFC agissent sur quoi ?

Couleur de fond ? Si oui unie ? Couleur du thème ou couleur fixe ?

Couleur de police ? Couleur du thème ou couleur fixe ?

Autre paramétres de le police ? Si oui lesquels ?

Bordures ? Si oui lesquelles ?

Format de nombre ?

Bonjour et merci,

Dans ce cas, mes MFC agissent sur couleur de fond (couleur unie) et bordure uniquement.

Pour être plus précis, j'ai collé une cellule avec la principale MFC qui m'importe dans le classeur joint.

4classeur4.xls (13.50 Ko)
Rechercher des sujets similaires à "transformer mfc mises forme conditionnelles"