Excel : tester la couleur dans formule
Résolu/Fermé
alainjjb
Messages postés
785
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
13 janvier 2025
-
5 janv. 2009 à 20:49
lenou76p - 6 janv. 2009 à 16:29
lenou76p - 6 janv. 2009 à 16:29
A voir également:
- Excel : tester la couleur dans formule
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
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
244
5 janv. 2009 à 21:18
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
la 2eme :
La formule à utiliser pour sommer les cellules qui ont une font rouge
Formule Matricielle à valider en appuyant simultanément sur CTRL + SHIFT + ENTREE
Si la validation est correcte, des {} encadrent automatiquement la formule
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
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
5 janv. 2009 à 21:38
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+
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+
alainjjb
Messages postés
785
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
13 janvier 2025
110
5 janv. 2009 à 22:26
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
je ne sais pas si j'ai tout compris mais je vais me lancer ... Je vous tiens au courant.
Alain
alainjjb
Messages postés
785
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
13 janvier 2025
110
5 janv. 2009 à 22:40
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
5 janv. 2009 à 22:42
5 janv. 2009 à 22:42
De mon coté je te prépare un exemple pour dans quelques minutes
A+
A+
alainjjb
Messages postés
785
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
13 janvier 2025
110
5 janv. 2009 à 22:58
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
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
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
5 janv. 2009 à 23:03
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+
Sinon on peut la forcer avec un autre code
A+
alainjjb
Messages postés
785
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
13 janvier 2025
110
5 janv. 2009 à 23:18
5 janv. 2009 à 23:18
Mike,
je te joins un exemple :
http://www.cijoint.fr/cjlink.php?file=cj200901/cijdK7uZxV.xls
Merci
Alain
je te joins un exemple :
http://www.cijoint.fr/cjlink.php?file=cj200901/cijdK7uZxV.xls
Merci
Alain
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
5 janv. 2009 à 23:39
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+
https://www.cjoint.com/?bgazfGZg2L
A+
alainjjb
Messages postés
785
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
13 janvier 2025
110
5 janv. 2009 à 23:40
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
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
alainjjb
Messages postés
785
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
13 janvier 2025
110
5 janv. 2009 à 23:52
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
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
wilfried_42
Messages postés
907
Date d'inscription
mardi 19 août 2008
Statut
Contributeur
Dernière intervention
8 décembre 2009
244
5 janv. 2009 à 23:55
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
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
wilfried_42
Messages postés
907
Date d'inscription
mardi 19 août 2008
Statut
Contributeur
Dernière intervention
8 décembre 2009
244
6 janv. 2009 à 00:12
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
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
alainjjb
Messages postés
785
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
13 janvier 2025
110
6 janv. 2009 à 00:19
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
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
wilfried_42
Messages postés
907
Date d'inscription
mardi 19 août 2008
Statut
Contributeur
Dernière intervention
8 décembre 2009
244
6 janv. 2009 à 00:36
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
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
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 !!
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 !!
alainjjb
Messages postés
785
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
13 janvier 2025
110
6 janv. 2009 à 10:51
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
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
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
6 janv. 2009 à 10:54
6 janv. 2009 à 10:54
Salut,
N'oublies pas de mettre ton statut en résolu
Merci A+
N'oublies pas de mettre ton statut en résolu
Merci A+