Somme liee a la couleur de la cellule
Bonjour à tous,
Mon problème : Je cherche à sommer les éléments d'une colonne en fonction de la couleur (rouge, vert foncé, vert clair, beige,..) d'une cellule se trouvant sur une même ligne mais une colonne différente.
Mon but étant ensuite de créer sous chaque colonne plusieurs lignes qui viennent sommer les éléments d'une même couleur.
Pour exemple, dans le fichier joint si l'on travaille sur la colonne L :
Je cherche à avoir la somme des élements de la colonne H, en fonction de la couleur de ceux de la colonne L.
Pour le VERT FONCE :
H26 est VERT FONCE, donc ma somme incrémente 12 (celulle D26)
H27 est vide et pas de couleur, ma somme incrémente 0
H46 est vert donc ma somme incrémente 16 (celulle D46)
Le résultat s'affiche en H11 par exemple.
Je vais étirer la formule à l'ensemble de mes colonnes.
J'aimerai mieux une solution qui ne fait pas appel au VBA car je ne connais pas dutout ce langage et c'est plutôt obscure pour moi !
Merci pour votre aide,
Je joint une partie du fichier à ce poste.
Y-a-t'il une logique au code couleur ? De mes connaissances je ne connais pas de formule excel qui fait "=Somme.si.couleur(verte)"
Bonjour,
Il n'existe pas de fonctions natives d'Excel traitant les couleurs, ce ne peut donc être qu'une fonction personnalisée, soit écrite en VBA et qui s'utilise comme toute autre fonction d'Excel.
S'agissant de fonction personnalisée, tu as donc une assez large possibilité de choix en matière de personnalisation. 3 méthodes peuvent être principalement utilisées pour faire identifier la couleur voulue par la fonction :
1) tu fixes ta palette de couleurs, on incorpore le code des couleurs choisies à la fonction, et le choix de la couleur lors de la formulation se fait en passant un argument sous forme codée, numérique ou textuelle selon choix ;
2) toujours sous forme d'argument, la couleur est passée à la fonction en lui désignant une cellule de la couleur souhaitée, que cette cellule se trouve dans le champ calculé ou ailleurs ;
3) on colore la cellule où on insère la fonction de la couleur voulue et elle se charge elle-même de l'identifier.
Tu as donc le choix du système qui te convient le mieux...
Ce qu'il faut savoir encore c'est que si l'on programme ces fonctions de façon qu'elles soient recalculées lorsqu'Excel opère un recalcul, les modifications de couleurs ne sont pas des évènements susceptibles de provoquer un recalcul. Il se peut donc que dans certaines situation lorsque rien ne déclenche un recalcul automatique tu soies amené à le déclencher pour opérer une mise à jour.
Cordialement.
Bonjour,
Merci pour ta réponse.
La solution 3 me semble la plus explicite parmis les 3 décrites, étant donné que la palette de couleur peut être amenée à évoluer...
On peut passer en VBA alors, si c'est l'unique solution, ou alors j'essaie de trouver une solution alternative qui n'utilise pas forcément les couleurs.
Pour information le code couleur sert à repérer des statuts de commande :
Vert foncé : Validé, commande fournitures faites
Vert claire : Validé, commande de fournitures à faire
Beige : En attente de validation client
Rouge : Refus
Cordialement,
Bonjour,
C'est VBA car il faut bien un programme informatique pour toute opération quelle qu'elle soit... Mais c'est transparent à l'utilisation.
Utiliser les couleurs ou un autre critère de sélection, c'est toi que cela regarde. Si finalement tu préfères autre chose, cela peut se personnaliser aussi : les fonctions personnalisées sont utiles pour les cas non prévus et aussi pour simplifier la mise en place de formules qui seraient très compliquées avec les fonctions courantes.
Je te prépare ça après mon café. Tu pourras tester.
Cordialement.
Re,
Voilà à tester :
Function SOMMECOUL(plage As Range)
Dim c As Range, coul As Long, tot
coul = Range(Application.Caller.Address).Interior.Color
For Each c In plage
If c.Interior.Color = coul Then
If IsNumeric(c.Value) Then tot = tot + c.Value
End If
Next c
SOMMECOUL = tot
End FunctionTu copies ce code, et tu vas le coller dans un module standard de ton classeur.
[Accéder à l'éditeur VBA : onglet Développeur > Visual Basic ou raccourci clavier Alt+F11]
[Dans l'éditeur, Insertion > Module, pour générer un module standard]
Et dans le module (qui n'est qu'une feuille blanche destinée à accueillir du texte, tu colles le code.
Ensuite pour l'utiliser, comme toute fonction, là où tu veux le total tu fais comme pour d'autres fonctions :
=SOMMECOUL(A2:C10) par exemple/
Dans la plage A2:C10 tu auras pris soin de colorer les cellules que tu veux voir additionner de la même couleur que la cellule de la formule. La fonction fait le reste...
Cordialement.
Un petit oubli qui devrait être sans conséquence puisque la valeur par défaut est True. Mais c'est plus régulier :
Function SOMMECOUL(plage As Range)
Dim c As Range, coul As Long, tot
Application.Volatile
coul = Range(Application.Caller.Address).Interior.Color
For Each c In plage
If c.Interior.Color = coul Then
If IsNumeric(c.Value) Then tot = tot + c.Value
End If
Next c
SOMMECOUL = tot
End FunctionAjouter la ligne surlignée.
Je reviens suite à une discussion sur un sujet similaire... Une petite modification semble s'imposer pour fiabiliser:
Function SOMMECOUL(plage As Range)
Dim c As Range, coul As Long, tot
Application.Volatile
coul = Application.Caller.Interior.Color
For Each c In plage
If c.Interior.Color = coul Then
If IsNumeric(c.Value) Then tot = tot + c.Value
End If
Next c
SOMMECOUL = tot
End FunctionCordialement.
Bonjour MFerrand et merci pour les détails de tes réponses. Le code marche très bien, mais il ne fait pas exactement ce que j'aimerais :
Le code reconnaît bien les cellules en fonction de la couleur et somme les valeurs des cellules ciblées en fonction de la couleur choisie..
Hors ce n'est pas la valeur de la cellule en couleur que je voudrais sommer mais la valeur qui se situe sur la même ligne que la cellule dont il incrémente la valeur (pour le choix vert par exemple) mais à la colonne K et ceci pour tous les choix de couleurs.
Merci pour ton aide,
Cordialement,
Je ne suis pas sûr de comprendre :
- Tu mets la formule en ligne 11 : de H à AS
- Elle doit additionner les valeurs de la colonne D selon la couleur de la cellule correspondante dans la colonne (de H à AS)
Ce serait un SommeSiCouleurPlage(PlageCouleur;PlageSomme) ?
Voila c'est ca ! On utilise une formule de type RECHERCHEV() mais avec comme critère de reconnaissance la couleur de la cellule. Et ensuite la fonction doit sommer l'ensemble tous les éléments de la colonne.
Essaie cette adaptation. Tu fournis en arguments la plage à tester pour la couleur et la plage à sommer (dans cet ordre). Les 2 plages doivent être de dimensions égales, sinon erreur #VALEUR!
Function SOMMESICOUL(plagCoul As Range, plagSom As Range)
Dim i%, k%, coul As Long, tot
Application.Volatile
coul = Application.Caller.Interior.Color
If plagCoul.Rows.Count <> plagSom.Rows.Count Or plagCoul.Columns.Count <> _
plagSom.Columns.Count Then
SOMMESICOUL = CVErr(xlErrValue)
Exit Function
End If
For i = 1 To plagCoul.Rows.Count
For k = 1 To plagCoul.Columns.Count
If plagCoul.Cells(i, k).Interior.Color = coul Then
If IsNumeric(plagSom.Cells(i, k).Value) Then tot = tot + _
plagSom.Cells(i, k).Value
End If
Next k
Next i
SOMMESICOUL = tot
End FunctionNB- Je n'ai pas testé, j'ai juste modifié la première version, j'espère ne pas avoir fait une vulgaire faute de frappe...
Ça fonctionne ! Merci du gros coups de pouce !
Cordialement,