Fonction qui retourne la couleur active d'une MFC

Cette fonction retourne la valeur du format actif d'une mise en forme conditionnelle.

Avec la fonction de la démo, deux valeurs peuvent êtres retournées.

Mode = 0 : retourne la valeur de Interior.ColorIndex

Mode = 1 : retourne la valeur de Interior.Color

Mais avec quelque modifications toutes les autres propriétés peuvent êtres renvoyées.

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 = xlNone
End Function

La formule dans le tableur

=CouleurMFC(A2)

La MFC peut être avec une valeur directe ou une valeur indirecte (le contenu d'une autre cellule)

Ex 1 : >1 and <10

Ex 2 : >=D10 and <=E10

La fonction peu servir en VBA

Sur Excel =>2007, fonctionne uniquement avec les formules disponible sur Excel 97 - 2003

1'198report-mfc.zip (23.50 Ko)

Bonsoir,

Il me semblait que cette fonction correspondait exactement à ce que je cherche à faire: colorer une cellule de la même couleur que la cellule adjacente, qui elle est soumise à une MFC (dans laquelle il y a 5 ou 6 règles)

Dans un premier temps (je n'ai que peu de connaissances), j'ai créé une nouvelle fonction en recopiant le code, mais l'utilisation de cette fonction n'a rien donné.

En creusant un peu et en travaillant sur le fichier Report MFC, j'ai d'une part l'impression de faire fausse route, et d'autre part je me perds un peu...

  • dans le fichier Report MFC, je constate que les formules =CouleurMFC(---) qui sont dans les tableaux 2 et 4 renvoient les valeurs des couleurs (ou des index des couleurs et ne colorient pas le fonds de la cellule comme je le pensais: est-ce donc le rôle de cette fonction? (question naïve mais bon...)
  • mais dans mon classeur, je n'arrive pas à faire afficher ces valeurs: je n'obtiens que des 0 (sauf pour quelques cellules). Quelles peuvent en être les raisons ? (présence de plusieurs règles? méthode inadaptée ?

-Du coup pour assurer le coloriage du troisième tableau, dois-je utiliser obligatoirement le code que l'on peut lire dans le classeur?

Je l'ai essayé dans une colonne, j'obtiens bien une couleur mais elle est la même pour toutes les cellules de la colonne alors que les cellules sources n'ont pas toutes la même couleur.

-La ligne Application volatile doit-elle être laissée ou enlevée? dans quel cas?

merci d'avance pour les réponses, même si je suis conscient que cela fait beaucoup à la fois.

Bonjour,

Sans avoir ton classeur ce n'est pas facile de te répondre, mais quelque réponses quand même.

Il n'est pas nécessaire de passer par une fonction de feuille pour faire ce que tu veux.

Dans le corps de la feuille changer la sub Worksheet_Calculate() par

Private Sub Worksheet_Calculate()
Dim cel As Range, Plage As Range
    Set Plage = [J3:K16]
    For Each cel In Plage
        'cel.Interior.Color = cel.Offset(0, -3).Value
'Adapter l'offset
        cel.Interior.Color = CouleurMFC(cel.Offset(0, -7), 1)
    Next cel
End Sub

Tu peu laisser la ligne Application volatile. Dans un premier temps je pensais que ça gênerait par appel VBA mais ça ne pose pas de problème et cela laisse la fonction de feuille disponible.

Le nombre de règles est totalement pris en compte

Utilité de Application volatile dans une fonction personnelle,

Exemple 1,

En A1 la somme 10

En B1 =MaFonction(A1)

La fonction fait directement appel à la cellule cible.

Application volatile n'est pas nécessaire et même à déconseiller (ralentissement inutile du système )

Exemple 2

En A1 la somme 10

En D1 =MaFonction(B1.Offset(0,-1))

La fonction ne fait pas directement appel à la cellule cible.

Application volatile indispensable.

Si des truc pas claire hésite pas.

Si encore des problèmes dans ton classeur poste un exemple.

A+

lermite a écrit :

Bonjour, Bonsoir,

Sans avoir ton classeur ce n'est pas facile de te répondre, mais quelque réponses quand même.

Il n'est pas nécessaire de passer par une fonction de feuille pour faire ce que tu veux.

Dans le corps de la feuille changer la sub Worksheet_Calculate()

J'ai copié ce code, mais en fait je ne suis pas sûr de maîtriser l'endroit où placer ce code, et celui de la fonction CouleurMFC. Peux-tu préciser ? les deux au même endroit?

Tu peu laisser la ligne Application volatile. Dans un premier temps je pensais que ça gênerait par appel VBA mais ça ne pose pas de problème et cela laisse la fonction de feuille disponible.

Je n'ai aucune idée de ce qu'est cette ligne, mais j'ai compris ce que tu as expliqué dans les exemples.

Le nombre de règles est totalement pris en compte Est-ce que le type de règles est-important ?

Si des truc pas claire hésite pas. c'est vraiment sympa

Si encore des problèmes dans ton classeur poste un exemple.

OK, mais je vais d'abord essayer de résoudre seul car cela me permettra de progresser.

A+ Merci encore et à bientôt

Re,

La fonction CouleurMFC DOIT être mise dans un module général (Module1 par xemple)

Le code de la Sub Worksheet_Calculate() DOIT être positionner dans le module de la feuille où sont situées tes MFC.

Pour être sûre que tu ne te trompe pas... cliquer droit sur l'onfglet de la feuille --> Visualiser le code, c'est dans cette fenêtre qu'il faut coller la sub.

Est-ce que le type de règles est-important ?

A première vue je ne pense pas, si des conditions ne réponde pas convenablement tu dis, et précise le type de condition appliquer.

A+

bonjour,

Je n'étais pas très loin, mais je n'y étais pas tout à fait.

Avec cette configuration, le programme me renvoie une couleur...noire dans toutes les cellules.

Du coup j'ai travaillé en modifiant le code de la Sub Worksheet_Calculate(), pour intégrer ce que tu disais plus haut (pour ne pas avoir de noir avec la valeur 0)

Cela entraîne la disparition du noir, donc je fais l'hypothèse qu'avec mes MFC, la valeur trouvée par ta fonction est 0. Qu'en penses-tu? Vois-tu d'autres pistes?

Je continue mes essais, je vais tenter de mettre un MFC simple pour voir si cela fonctionne.

Merci pour la rapidité de tes réponses.

Re,

Pour la couleur noir quand c'est zéro, tu à bien vu pour la modif, mais il y a plus simple.

Modifier dans la fonction CouleurMFC() ;(je viens seulement d'y penser)

    CouleurMFC = 0
'Par
    CouleurMFC = xlNone

Montre un ou deux exemples des formules dans les règles de la MFC.

A+

Bonjour à tous,

Le code ci dessous m'a bien aidé pour réccupérer les couleurs de mes MFC. Cependant j'ai des MFC dont la formule est la suivante =COUNTIF($A$16:$A$41;OFFSET(B5;-MOD(ROW()-1;29)+1;0))>0

et =WEEKDAY(OFFSET(B5;-MOD(ROW()-1;29)+1;0);2)>5

les couleurs de ces MFC ne sont pas réccupérées et restent à 0. Je pense que c'est parce que ces formules ne sont pas tester dans la boucle et je ne sais pas comment les inclure...

Pourriez vous m'aider ?

Merci par avance et bonnes fêtes de fin d'année

Miss_tik76

Bonjour,

Difficile de te répondre comme ça.

Tu peu déposer un classeur qui reprendrait quelque cellules avec tes MFC ?

Bonne fin d'année à toi également.

A+

Bonjour et bonne année à tous !

Lermite j'ai joint un fichier exemple avec mes MFC.

Merci par avance pour votre aide.

Miss_tik76

515test-mfc.xlsm (58.16 Ko)

Bonjour,

J'ai continuer à chercher mais je n'ai pas encore trouvé de solution...

L'un d'entre vous a t-il une idée pour résoudre mon problème ?

Merci d'avance,

Miss_tik76

Bonjour,

Je me permets de vous relancer car malgres mes recherches je n'ai pas trouver de solutions à mon problème.

avez vous pu regarder mon problème Lermite?

Merci par avance,

Miss_tik76

Rechercher des sujets similaires à "fonction qui retourne couleur active mfc"