Excel : tester la couleur dans formule

Résolu
Bonjour,
Tout d'abord à tous les Excellentissimes ... Bonne année 2009.
Voici mon Pb : J'ai en ligne des chiffres que je ne veut prendre en compte dans la cellule "Total" de cette même ligne que si la police du nombre est d'une certaines couleur (rouge par ex.) Est-ce possible ?
Ex. A1 = 100, B1 = 100(rouge), C1 = 100, D1 = Total = 200
Merci d'avance
Alain
Configuration: Windows XP
Firefox 3.0.1

17 réponses

  1. Contributeur
    Bonjour

    Question : Les couleurs sont elles mises avec une Mise en Forme Conditionnelle ?
    si non : Voici 2 Fonctions personnalisées qui permettent de travailler sur des format de cellules
    Ces fonctions SonT à placer dans un module Standard
    Public Function M_Cellule(Target As Range) As Variant
        Application.Volatile
        Dim tablo(1 To 10) As Variant
        tablo(1) = Target.Font.Bold
        tablo(2) = Target.Font.ColorIndex
        tablo(3) = Target.Font.FontStyle
        tablo(4) = Target.Font.Italic
        tablo(5) = Target.Font.Strikethrough
        tablo(6) = Target.Font.Underline
        tablo(7) = Target.Interior.ColorIndex
        tablo(8) = Target.Interior.Pattern
        tablo(9) = Target.Interior.PatternColorIndex
        tablo(10) = Target.NumberFormat
        M_Cellule = tablo
    End Function

    la 2eme :
    Public Function M_Format(ByVal gw_typ As Integer, plage As Range, Optional feuilles As String = "") As Variant
        Dim gw_c As Range, i As Long, j As Integer
        Dim  tablo() As Variant, maplage As Range
        Dim feuille1 As String, feuille2 As String
        Application.Volatile
        If gw_typ < 1 Or gw_typ > 10 Then trg_mfc_plage = "#ERREUR": Exit Function
        i = -1
        If feuilles = "" Then feuilles = ActiveSheet.Name & ":" & ActiveSheet.Name
        feuille1 = Left(feuilles, InStr(feuilles, ":") - 1)
        feuille2 = Right(feuilles, Len(feuilles) - InStr(feuilles, ":"))
        For j = ActiveWorkbook.Sheets(feuille1).Index To ActiveWorkbook.Sheets(feuille2).Index
            Set maplage = ActiveWorkbook.Sheets(j).Range(plage.Address)
            For Each gw_c In maplage
                i = i + 1
                ReDim Preserve tablo(i)
                tablo(i) = M_Cellule(gw_c)(gw_typ)
            Next
        Next j
        M_Format = tablo
    End Function

    La formule à utiliser pour sommer les cellules qui ont une font rouge
    =somme(si(M_Format(2;MaPlage)=3;MaPlage;0))

    Formule Matricielle à valider en appuyant simultanément sur CTRL + SHIFT + ENTREE
    Si la validation est correcte, des {} encadrent automatiquement la formule
    0
    1. Salut,

      Oui avec une fonction personnalisée, tu mets ce code dans un module macro et dans une cellule tu appelle la fonction Insertion/fonction personalisée sélectionnes Somcouleur(ta plage);"rouge")

      Function SomCouleur(Zne As Range, Couleur As String)
      Application.Volatile True
      Select Case Couleur
      Case "rouge"
      Couleur = 3
      Case "vert"
      Couleur = 50
      Case "jaune"
      Couleur = 6
      Case "bleu"
      Couleur = 5
      Case "gris"
      Couleur = 15
      Case "orange"
      Couleur = 40
      End Select
      For Each cell In Zne
      If cell.Font.ColorIndex = Couleur Then cvSomme = _
      cvSomme + cell.Value
      Next
      SomCouleur = cvSomme
      End Function

      A+
      0
      1. Merci à tous les 2,
        je ne sais pas si j'ai tout compris mais je vais me lancer ... Je vous tiens au courant.

        Alain
        0
        1. Re,
          ce qui était prévisible ... C'est l'échec !
          - comment crée-t-on une fonction personnalisée (je sais ... enfin j'ai déjà créé des macros).
          Merci
          Alain
          0
          1. De mon coté je te prépare un exemple pour dans quelques minutes

            A+
            0
            1. Mike,
              après quelques tests je pense avoir réussi mais je ne comprends pas quand se met à jour le Total (cellule ou j'ai fait appel à la fonction). En cliquant plusieurs fois sur une cellule quelconque ... ça marche. Y a-t-il un moyen pour que cette maj soit auto ?
              Alain
              0
              1. Normalement dés que tu change une valeur dans la plage que tu as défini la cellule qui contient la formule doit se mettre a jour automatiquement.

                Sinon on peut la forcer avec un autre code

                A+
                0
                1. Mike,
                  je te joins un exemple :
                  http://www.cijoint.fr/cjlink.php?file=cj200901/cijdK7uZxV.xls

                  Merci
                  Alain
                  0
                  1. Wilfried,
                    j'ai également testé ta fonction (la 1ère). Mais que dois-je mettre dans la cellule "Total". J'ai inséré une fonction personnalisée "M-Cellule" qui me demande de saisir "Target". A quoi correspond cette zone "Target" ?

                    Merci
                    Alain
                    0
                    1. Mike,
                      pourquoi ta cellule C21 se met à jour automatiquement alors que la mienne, je dois cliquer plusieurs fois n'importe ou pour cette maj ?? Que dois-je faire de + sur mon tableau ?
                      Alain
                      0
                      1. Contributeur
                        re:

                        il faut mettre les deux fonctions, la 2eme utilise la première, je t'ai donné un exemple de formule pour le calcul
                        je ne pourrai t'envoyer un fichier exemple que demain, là je suis au boulot et je n'ai pas tous mes fichiers
                        0
                        1. Wilfried,
                          même problème que la solution de Mike. Le total ne se met pas à jour aussitôt. Je n'arrive pas à avoir les crochets. Ceci expliquant peut-être cela ?

                          Fini pour ce soir. Bon courage à toi au boulot.
                          A demain
                          Alain
                          0
                          1. Contributeur
                            re:
                            ce qui explique que les calculs ne se font que lorsque tu appuies sur F9 ou si tu modifies une valeur c'est que ces actions provoque un calcul de la feuille. L'application d'une couleur ne provoque pas le lancement des calculs donc les formules ne se calculent pas. l'utilisation du pinceau (copie format), provoque lui le calcul de la feuille mais si tu modifie le format par les paletes couleurs ca ne le fait pas, il te faut lancer le calcul manuellement (F9)

                            Pour ce qui est des {} je l'ai expliqué dans mon premier post, elle encadrent des formules matricielles et se mettent automatiquement si la validation de telles formules est correctement effectuée. Pour valider une formule matricielle, il faut appuyer sur les 3 touches ! Ctrl + Shift + Entrée
                            0
                            1. Salut !

                              Je viens d'essayer ta solution, et ca marche !! par contre, ca n'a l'air de fonctionner que si les valeurs sont sur une ligne, et pas sur une colonne. Saurais tu pourquoi?
                              je crois que ca vient de :

                              If feuilles = "" Then feuilles = ActiveSheet.Name & ":" & ActiveSheet.Name
                              feuille1 = Left(feuilles, InStr(feuilles, ":") - 1)
                              feuille2 = Right(feuilles, Len(feuilles) - InStr(feuilles, ":"))

                              Mais je ne vois pas trop quoi faire. Pourrais tu m'aider, car j'ai besoin de réaliser cette somme de valeurs situées dans une colonne?
                              Je me suis basée sur ton exemple bga7irgX2r_calcul_format.xls

                              Merci !!
                              0
                          2. Bonjour,

                            et merci à tous les 2. Vous m'aurez encore appris une nouvelle technique d'Excel : la fonction personnalisée (enfin ! plutôt qu'apprendre ... approcher). Maintenant à moi de "jouer".
                            Alain
                            0
                            1. Salut,

                              N'oublies pas de mettre ton statut en résolu

                              Merci A+
                              0