Excel : tester la couleur dans formule

Résolu
alainjjb Messages postés 747 Date d'inscription   Statut Membre Dernière intervention   -  
 lenou76p -
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. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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
  2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  3. alainjjb Messages postés 747 Date d'inscription   Statut Membre Dernière intervention   112
     
    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
  4. alainjjb Messages postés 747 Date d'inscription   Statut Membre Dernière intervention   112
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    De mon coté je te prépare un exemple pour dans quelques minutes

    A+
    0
  7. alainjjb Messages postés 747 Date d'inscription   Statut Membre Dernière intervention   112
     
    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
  8. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  9. alainjjb Messages postés 747 Date d'inscription   Statut Membre Dernière intervention   112
     
    Mike,
    je te joins un exemple :
    http://www.cijoint.fr/cjlink.php?file=cj200901/cijdK7uZxV.xls

    Merci
    Alain
    0
  10. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Oui tu as compris ton exemple est bon, mais récupères mon exemple avec d'autre possibilités

    https://www.cjoint.com/?bgazfGZg2L

    A+
    0
  11. alainjjb Messages postés 747 Date d'inscription   Statut Membre Dernière intervention   112
     
    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
  12. alainjjb Messages postés 747 Date d'inscription   Statut Membre Dernière intervention   112
     
    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
  13. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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
  14. alainjjb Messages postés 747 Date d'inscription   Statut Membre Dernière intervention   112
     
    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
  15. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    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. lenou76p
       
      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
  16. alainjjb Messages postés 747 Date d'inscription   Statut Membre Dernière intervention   112
     
    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
  17. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Salut,

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

    Merci A+
    0