Forum Excel

Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

posez Vos questions

Le Deal du moment : -45%
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre ...
Voir le deal
339 €

4 participants

    Un petit défi : déterminer la couleur appliquée par une MFC

    JNP
    JNP
    Forumeur(euse) Nouveau
    Forumeur(euse) Nouveau


    Messages : 7
    Date d'inscription : 15/02/2009
    Age : 60
    Localisation : Vosges

    Un petit défi : déterminer la couleur appliquée par une MFC Empty Un petit défi : déterminer la couleur appliquée par une MFC

    Message par JNP Sam 21 Fév - 11:20

    Bonjour à tous Smile ,
    Nous sommes un peu en manque de "questionneurs" (ce qui est logique vu que beaucoups d'inscrits sont plutôt des "répondeurs" Very Happy ). C'est pourquoi je vous propose un petit défi, qui, si je ne m'abuse, n'a jamais trouvé réponse : Comment récupérer la couleur générée par une MFC, pour, par exemple, l'appliquer à toute la ligne. A la base, vous me direz qu'il y a peu d'intérêt, vu qu'il suffit de rechercher les conditions de la MFC pour reproduire en VBA les mêmes effets. Pourtant, pour les utilisateurs de 2007, les MFC ont trouvés une nouvelle jeunesse. Nous ne sommes plus limités à 3 couleurs et les effets sont particulièrement réussis... Ainsi, il est possible de colorer la cellule graduellement en fonction de la valeur, avec une teinte intermédiaire pour chaque valeur. Et là, en VBA, il va falloir faire un paquet de tests pour récupérer ce qui se fait en 1 clic... Voilà pourquoi je pense que ça peut être très intérressant de s'y pencher.
    A vous lire Cool
    wilfried_42
    wilfried_42
    Forumeur(euse) Nouveau
    Forumeur(euse) Nouveau


    Messages : 8
    Date d'inscription : 18/02/2009

    Un petit défi : déterminer la couleur appliquée par une MFC Empty Re: Un petit défi : déterminer la couleur appliquée par une MFC

    Message par wilfried_42 Sam 21 Fév - 12:33

    Bonjour JNP

    C'est déja écrit : Ici

    mais c'est un peu lourd, même si c'est une fonction, elle ne peut s'utiliser qu'à l'intérieur d'un Sub, Excel (dans le cas des formules MFC) faisant évoluer les adresses en fonction de la cellule active, on est dans l'obligation de sélectionner la cellule chose impossible dans une fonction classique.

    le code :
    Code:
    Public Function Q_MFC(Target As Range, couleur As Integer, code As Integer) As Double
    ' Procedure originelle de Laurent LONGRE modifiée par Wilfried_42
        Dim fc As FormatCondition, F1, F2
        Dim c As Range
        Q_MFC = 0
        Set c = ActiveWorkbook.ActiveSheet.Cells.Find(Empty)
    ' la fonction est appelée par une procedure Sub donc pas de probleme, je peux selectionner la cellule
    '
    ' Cette selection est necessaire, un desagremment d'Excel fait varier les plages des formules MFC en fonction de la
    ' cellule active (Plages non figées)
        Target.Select
    '
    ' Cette partie de la macro est tirée de la macro de Laurent LONGRE
    '
        For Each fc In Selection.FormatConditions ' on scrutte toute les MFC
            c.FormulaLocal = fc.Formula1: F1 = c ' Si c'est une formule, mise en place de cette formule dans une cellule, resultat Vrai ou Faux
            If fc.Type = xlCellValue Then ' si le type de MFC est : La valeur de la cellule (ce n'est pas une formule)
                Select Case fc.Operator ' Selon l'opérateur utilisé : on réalise le test et on met 1 quand c'est Ok
                    Case xlBetween, xlNotBetween: '
                        c.FormulaLocal = fc.Formula2: F2 = c
                        If fc.Operator = xlBetween Then If ActiveCell >= F1 And ActiveCell <= F2 Then Q_MFC = 1
                        If fc.Operator = xlNotBetween Then If ActiveCell < F1 Or ActiveCell > F2 Then Q_MFC = 1
                Case xlEqual ' Egalité
                    If ActiveCell = F1 Then Q_MFC = 1
                Case xlGreater ' Plus grand
                    If ActiveCell > F1 Then Q_MFC = 1
                Case xlGreaterEqual ' Plus grand ou egal
                    If ActiveCell >= F1 Then Q_MFC = 1
                Case xlLess ' Plus petit
                    If ActiveCell < F1 Then Q_MFC = 1
                Case xlLessEqual ' Plus petit ou egal
                    If ActiveCell <= F1 Then Q_MFC = 1
                Case xlNotEqual ' Différent
                    If ActiveCell <> F1 Then Q_MFC = 1
                End Select
            Else ' C'est une formule on regarde le resultat de la formule
                If F1 = True Then Q_MFC = 1
            End If
            If Q_MFC = 1 Then
                Select Case code
                    Case 0
                        MsgBox fc.Interior.ColorIndex
                        Q_MFC = 0
                    Case 1
                        If fc.Interior.ColorIndex <> couleur Then Q_MFC = 0
                    Case 2
                        Q_MFC = Target.Value
                        If fc.Interior.ColorIndex <> couleur Then Q_MFC = 0
                    Case 3
                        Q_MFC = fc.Interior.ColorIndex
                    Case Else
                        Q_MFC = 0
                End Select
                Exit For
            End If
        Next fc
        c.ClearContents
    End Function

    bonne journée
    JNP
    JNP
    Forumeur(euse) Nouveau
    Forumeur(euse) Nouveau


    Messages : 7
    Date d'inscription : 15/02/2009
    Age : 60
    Localisation : Vosges

    Un petit défi : déterminer la couleur appliquée par une MFC Empty Re: Un petit défi : déterminer la couleur appliquée par une MFC

    Message par JNP Sam 21 Fév - 16:09

    Bonjour Wilfried Smile ,
    le résultat est ici... Beau travail que tu as réalisé, mais, sur 2007, plantage...
    La fonction que tu proposes parait sympathique, mais je veux juste avoir comme argument d'entrée Target, et avoir en sortie le code couleur de la MFC...
    Le défi court toujours...
    Bonne journée Cool
    Brigitte
    Brigitte
    Forumeur(euse) Nouveau
    Forumeur(euse) Nouveau


    Messages : 4
    Date d'inscription : 03/02/2009
    Age : 66
    Localisation : Nantes

    Un petit défi : déterminer la couleur appliquée par une MFC Empty Re: Un petit défi : déterminer la couleur appliquée par une MFC

    Message par Brigitte Sam 21 Fév - 20:40

    Bonjour tout le monde,

    Moi je veux bien me pencher... Allez, tiens c'est fait...

    Reste à savoir si cela apportera de l'eau à ton moulin (;-)

    Allez c'était juste pour un ti clin d'oeil, longtemps que je ne t'ai croisé, et pour saluer tout le monde.

    Moi j'ai posté sur xld, si le coeur vous en dit...
    wilfried_42
    wilfried_42
    Forumeur(euse) Nouveau
    Forumeur(euse) Nouveau


    Messages : 8
    Date d'inscription : 18/02/2009

    Un petit défi : déterminer la couleur appliquée par une MFC Empty Re: Un petit défi : déterminer la couleur appliquée par une MFC

    Message par wilfried_42 Dim 22 Fév - 12:12

    re: JNP, Bisous Brigitte

    Une petite précision, Cette macro est à l'origine celle de Laurent Longre, que j'ai omis de citer précédemment.

    dans la fonction tu as 3 paramètres
    1 - la cellule
    2 - Le code couleur
    3 - un Code de 0 à 3

    le Code de 0 à 3
    0 --> affiche le code couleur dans un message
    1 --> teste si le code couleur = au fond de la cellule
    2 --> teste si la code couleur = à la couleur des caractères
    3 --> Renvoie le code couleur de la MFC prise en compte

    si code 1 ou 2 : renvoie 1 s'il y a égalité sinon renvoi 0

    La fonction telle quelle ne peut fonctionner et ne fonctionnera jamais à cause du désagrément d'Excel précédemment cité.
    Dés que tu utilises des Formules (6ème choix Excel 2007) avec des références cellule relatives ça ne peut pas marcher.
    Si tu n'utilises que des références de cellule figées, il suffit d'enlever une ligne de la Macro : Target.Select
    On ne peut en aucun cas sélectionner une cellule dans une Fonction
    Et comme Excel Fait varier les références relatives des MFC selon la cellule Active et non pas la cellule qui contient la MFC, ça devient un problème insurmontable.... Sauf en trichant comme je l'ai fait dans le lien donné et en utilisant l'interruption Calculate. Mais la ça devient une usine à gaz. Very Happy
    wilfried_42
    wilfried_42
    Forumeur(euse) Nouveau
    Forumeur(euse) Nouveau


    Messages : 8
    Date d'inscription : 18/02/2009

    Un petit défi : déterminer la couleur appliquée par une MFC Empty Re: Un petit défi : déterminer la couleur appliquée par une MFC

    Message par wilfried_42 Jeu 26 Fév - 13:22

    re:

    voici un fichier un peu plus élaboré qui permet aussi à l'aide de formules matricielles de calculer selon les couleurs des MFC. j'ai refait sub un autre principe pour que la macro aille plus vite...

    Calcul MFC

    voici un lien c-joint, volatile No Calcul MFC


    Dernière édition par wilfried_42 le Ven 27 Fév - 9:00, édité 1 fois
    Admin
    Admin
    Admin


    Messages : 23
    Date d'inscription : 31/01/2009

    Un petit défi : déterminer la couleur appliquée par une MFC Empty Re: Un petit défi : déterminer la couleur appliquée par une MFC

    Message par Admin Jeu 26 Fév - 15:32

    Bonjour Wilfried_42,JNP

    le sujet a l'aire tres interessant j'ai pas pu telecharger le fichier je ne sais pas pourquoi ?

    si quelqu'un a une idée.

    Cordialement
    wilfried_42
    wilfried_42
    Forumeur(euse) Nouveau
    Forumeur(euse) Nouveau


    Messages : 8
    Date d'inscription : 18/02/2009

    Un petit défi : déterminer la couleur appliquée par une MFC Empty Re: Un petit défi : déterminer la couleur appliquée par une MFC

    Message par wilfried_42 Jeu 26 Fév - 16:43

    bonjour Administrateur

    j'ai mis le fichier sur mon site mais non lie à une page
    Sur google chrome (que j'ai) çà affiche une page blanche mais le fichier est à télécharger en bas à gauche
    sur Internet Explorer, ça affiche directement la fenêtre de téléchargement
    Pour les autres firefox.... etc, je ne sais pas

    Contenu sponsorisé


    Un petit défi : déterminer la couleur appliquée par une MFC Empty Re: Un petit défi : déterminer la couleur appliquée par une MFC

    Message par Contenu sponsorisé

      Sujets similaires

      -

      La date/heure actuelle est Ven 3 Mai - 10:42