Excel : tester la couleur dans formule

Résolu/Fermé
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 - 5 janv. 2009 à 20:49
 lenou76p - 6 janv. 2009 à 16:29
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
A voir également:

17 réponses

wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 243
5 janv. 2009 à 21:18
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
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 078
5 janv. 2009 à 21:38
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
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
5 janv. 2009 à 22:26
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
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
5 janv. 2009 à 22:40
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 078
5 janv. 2009 à 22:42
De mon coté je te prépare un exemple pour dans quelques minutes

A+
0
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
5 janv. 2009 à 22:58
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
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 078
5 janv. 2009 à 23:03
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
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
5 janv. 2009 à 23:18
Mike,
je te joins un exemple :
http://www.cijoint.fr/cjlink.php?file=cj200901/cijdK7uZxV.xls

Merci
Alain
0
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 078
5 janv. 2009 à 23:39
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
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
5 janv. 2009 à 23:40
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
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
5 janv. 2009 à 23:52
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
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 243
5 janv. 2009 à 23:55
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
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 243
6 janv. 2009 à 00:12
re:

il faut utiliser les 2 fonction

Voici ton fichier avec plusieurs exemples (couleur de text, couleur de fond, non gras)
https://www.cjoint.com/?bga7irgX2r
0
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
6 janv. 2009 à 00:19
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
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 243
6 janv. 2009 à 00:36
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
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
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
6 janv. 2009 à 10:51
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
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 078
6 janv. 2009 à 10:54
Salut,

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

Merci A+
0