> Tous les forumsBureautique

 Excel : somme si couleur = noir
Statut du sujet : NON RESOLU Imprimer
 pitchaf_75
  Posté le 04/05/2006 @ 09:27  
 Petit astucien

2 Messages
Salut à tous, [hello] Dans une feuille Excel 2003, certaines cellules contiennent des chiffres. Je souhaite faire la somme de ces chiffres uniquement si la couleur de la cellule est noire. Est-il possible de le faire autrement qu'avec du VB ? L'idéal serait une formule de type : somme d'une plage si couleur de la cellule = noir. Au cas où on ne peut faire autrement qu'en VB, comment faire pour déclencher le calcul ?
 
 Aller en bas de la page  
 
Publicité
 galopin01  Posté le 04/05/2006 à 10:22  
  Astucien

5772 Messages

Bonjour et bienvenue sur PCA,
La réponse est différente selon qu'il s'agit de compter des couleurs mises par l'utilisateur ou s'il s'agit de couleur issues d'une Mise en Forme Conditionnelle (MFC).
Les couleurs issue de MFC ne peuvent être comptées sur leur couleur, mais uniquement sur la condition de mise en forme.
Dans beaucoup de cas, celà passe par une macro, cependant pour les conditions simples on arrive parfois à s'en tirer avec quelque chose comme ça :
=NB.SI(plage,Condition de la MFC)
si plage est A1 et condition est >10 celà donnera :
= NB.SI(A1;">10")

Voici une macro qui compte les couleurs mises par l'utilisateur

Function NBCOLOR(Cible As Range, oRef As Range) As Long
Dim o, i%, k%
Application.Volatile
k = oRef.Interior.ColorIndex
For Each o In Cible
If o.Interior.ColorIndex = k Then i = i + 1
Next
NBCOLOR = i
End Function

Une fois installée dans un module supplémentaire (Module1) cette macro s'utilise comme une fonction standart d'Excel (rubrique : Fonctions personnalisées)
Pour installer cette macro faire :
Outils/Macro/Nouvelle macro.../Ok (mémoriser le nom proposé)
Outils/Macro/Arrêter l'enregistrement
Outils/Macro/Macros.../Modifier (la macro mémorisée)
Remplacer tout le texte de la macro enregistrée par le code qui précéde.
Revenir dans Excel par Alt + Q
Pour compter les couleurs (identiques à B1) de la zone A1:A10 il faut mettre cette formule
=NBCOLOR(A1:A10;B1)


Au lieu de passer par une cellule échantillon de couleur, il est également possible de passer directement le code de couleur en paramètre (encore faut-il les connaître par coeur).
Dans ce cas utiliser la macro suivante :


Function NBC(Cible As Range, k As Integer) As Long
Dim o, i%
Application.Volatile
For Each o In Cible
If o.Interior.ColorIndex = k Then i = i + 1
Next
NBC = i
End Function

Pour la même plage et la couleur noire, la formule sera alors :
=NBC(A1:D$10;1)
Pour la couleur rouge :
=NBC(A1:D$10;3)

A noter que les deux fonctions ne réagissent pas directement aux changements de couleur (car les changements de couleurs ne provoquent pas de recalcul)
Dans ca cas, il faut forcer le recalcul par F9 ou par quelque autre moyen...

Pour le calcul sur MFC reformuler la question SVP
A+



Modifié par galopin01 le 11/03/2007 18:28
 Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Haut de la page 

 > Tous les forumsBureautique

 
Forum PC Astuces© 1997-2014 WebastucesAller en haut de la page