Excel 2003 : somme sous deux conditions (couleur de fond de cellule et

Excel 2003 : somme sous deux conditions (couleur de fond de cellule et - Logiciels - Windows & Software

Marsh Posté le 20-09-2010 à 20:40:04    

Bonjour à tous,
je souhaiterais pouvoir faire la somme de toutes les cellules identiques c'est à dire la somme des cellules avec la même couleur de fond (11 couleurs de fond différents) et le texte écrit dans la cellule. n'étant pas un pro en vba, je serais très heureux de savoir si cela est faisable.
Si vous avez besoin d'autres infos, n'hésitez pas...
par avance merci bcp.

Reply

Marsh Posté le 20-09-2010 à 20:40:04   

Reply

Marsh Posté le 21-09-2010 à 15:42:25    

Hello
 
C'est tout a fait faisable, il me semblait avoir déjà répondu a ceci ici mais je ne le retrouve pas.
 
Premiere fonction, qui permet de définir le numéro de couleur sur lequel on va faire la somme. Je pense que tu ne connais pas tous les numéros de couleur, cette fonction sera donc bien pratique :

Code :
  1. Function CouleurSelect(Cellule As Range)
  2.     CouleurSelect = Cellule.Interior.ColorIndex
  3. End Function

Ex :
En A1 tu saisis 1, tu mets un fond "Rouge"
En B1 tu saisis la fonction qui retrouve la couleur :
=CouleurSelect(A1)
Et excel te renverra 3
3 c'est rouge
 
 
 
Ensuite, la fonction qui va te permettre de sommer en fonction de la couleur de fond. C'est une simple boucle qui va passer toutes les cellules que tu as sélectionnées, et qui va les aditionner si le fond est de la couleur demandée

Code :
  1. Function SommeCouleur(Plage As Range, Couleur As String)
  2.     Application.Volatile True
  3.     For Each Cellule In Plage
  4.         If Cellule.Interior.ColorIndex = Couleur Then TotalSomme = TotalSomme + Cellule.Value
  5.     Next
  6.     SommeCouleur = TotalSomme
  7. End Function

Ex:
A1 : 1
A2 : 2   Fond Rouge
A3 : 3
A4 : 4
A5 : 5   Fond Rouge
A6 : 6
A7 : 7
A8 : 8   Fond Rouge
A9 : 9
 
En B1 :
=SommeCouleur(A:A;CouleurSelect(A2))
* 1er parametre de la fonction qui est la plage sur laquelle tu veux sommer
* 2nd parametre de la fonction. Comme on l'a vu dans l'exemple plus haut, on se sert de la fonction CouleurSelect() pour determiner quelle couleur est a sommer. En effet pour le Rouge ou le Bleu c'est facile. Mais va retrouver le code couleur de "Bleu Ciel" (C'est 33). Donc la on lui dit "Prend la couleur de fond de la cellule A2"
 
Excel te renvoit bien 15 (2+5+8)
 
 
 
Voila voila, si tu as des questions n'hesite pas ;)


Message édité par SuppotDeSaTante le 21-09-2010 à 15:46:48

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 21-09-2010 à 20:31:24    

Hello dje69r,
en faite j'ai du mal m'expliquer...lol la fonction de recherche de la couleur de la cellule sera comme tu dis nécessaire...
par contre il y a deux conditions pour faire la somme des cellules identiques :  
la 1ère (que tu as déjà détaillé dans ta réponse) est qu'il faut que les cellules possèdent la même couleur de fond, ensuite il faut vérifier si le texte écrit dans ces cellules de mêmes couleurs de fond est identique. ensuite l'idée est de faire la somme de ces cellules identiques pour en connaitre le nombre total...
dans une feuille par exemple :
 
A1 : bonjour Fond vert
A2 : bonsoir   Fond Rouge
A3 : salut Fond jaune  
A4 : excel Fond rouge
A5 : bonsoir   Fond Rouge
A6 : salut Fond jaune  
A7 :  
A8 :  excel Fond violet
A9 :  excel Fond violet
 
je souhaiterais le total des cellules identiques c'est à dire :  
- 1 (cellule) : "bonjour" avec un fond vert
- 2 (cellules) : "bonsoir" avec un fond rouge
- 2 (cellules) : "salut" avec un fond jaune
- 1 (cellule) : "excel" avec un fond rouge
- 3 (cellules) : "excel" avec un fond violet
 
j'espère avoir été plus clair dans mes explication.
 
Merci d'avance...

Reply

Marsh Posté le 21-09-2010 à 21:31:40    

Et ben ?
Tu retranches ceux qui ne sont pas egaux a ton texte avec un Somme.Si...
Pas besoin de vb pour ca... Non ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-09-2010 à 08:09:34    

le problème est que lorsque dans la cellule il y a un texte, la formule ne fonctionne plus... #valeur!
 
re-voici mon exemple :
 
A1 : bonjour Fond vert
A2 : bonsoir   Fond Rouge
A3 : salut Fond jaune  
A4 : excel Fond rouge
A5 : bonsoir   Fond Rouge
A6 : salut Fond jaune  
A7 :  
A8 :  excel Fond violet
A9 :  excel Fond violet
A10 : excel Fond violet
 
 
je souhaiterais avoir le total des cellules identiques comme ci-dessous :  
- 1 (cellule) : "bonjour" avec un fond vert
- 2 (cellules) : "bonsoir" avec un fond rouge
- 2 (cellules) : "salut" avec un fond jaune
- 1 (cellule) : "excel" avec un fond rouge
- 3 (cellules) : "excel" avec un fond violet  
 
encore merci...

Reply

Marsh Posté le 23-09-2010 à 08:15:25    

je ne sais pas si ma réponse a bien été envoyé...

Reply

Marsh Posté le 23-09-2010 à 10:14:58    

Mais tu as quoi dans tes cellules ? Tu veux sommer ou compter le nb d'occurence ?
 
Donne un vrai exemple stp


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-09-2010 à 10:28:50    

Ok, ôtën pour moi, j'avais mal lu...
 
Donc pour résoudre ton souci :

Code :
  1. Function SommeCouleur(Plage As Range, CouleurCell As Range, ValTxt)
  2.     Application.Volatile True
  3.     Couleur = CouleurCell.Interior.ColorIndex
  4.    
  5.     For Each Cellule In Plage
  6.         If Cellule.Interior.ColorIndex = Couleur And Cellule.Value = ValTxt Then
  7.             TotalSomme = TotalSomme + 1
  8.         End If
  9.     Next
  10.     SommeCouleur = TotalSomme
  11. End Function


Donc avec ton exemple, pour connaitre le nb de mot "Excel" en violet, en partant du principe qu'ils sont saisi en colonne A :
=SommeCouleur(A:A ; A8 ; "excel")
 
* A:A ---)> La plage sur laquelle tu veux faire le test
* A8 ---)> La cellule ayant la couleur de fond qui t'interresse pour le test
* "excel" ---)> Le texte à tester
 
Excel renvoi bien 3


Message édité par SuppotDeSaTante le 23-09-2010 à 10:30:40

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 26-09-2010 à 08:34:30    

malheuresement il me retourne comme valeur, #valeur !
pourtant je pense avoir bien déclarer les variables comme suit :  
 
 Function SommeCouleur(Plage As Range, CouleurCell As Range, ValTxt)
 
   Dim cellule As Range, TotalSomme As Double
   Dim couleur As Range
   
   Application.Volatile True
   couleur = CouleurCell.Interior.ColorIndex
 
   For Each cellule In Plage
   'si même couleur de fond et si le texte est identique
   If cellule.Interior.ColorIndex = couleur And cellule.Value = ValTxt Then
   TotalSomme = TotalSomme + 1
   End If
   Next
 
aurais-tu une idée du problème ?
 
Merci

Reply

Marsh Posté le 26-09-2010 à 13:13:16    

Couleur c'est pas un Range, mais un numerique.
Dim Couleur as integer
 
Faut tester ce que je te mets avant de l'adapter pr voir justement ce que contiennent les variables.


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 26-09-2010 à 13:13:16   

Reply

Marsh Posté le 29-09-2010 à 10:34:35    

oui merci, cela fonctionne très bien...
merci encore de ton aide mon pb est résolu !

Reply

Marsh Posté le 29-09-2010 à 20:29:42    

Reply

Marsh Posté le 23-01-2015 à 16:17:12    

Bonjour DJ69r,  
 
j'ai utilisé ta fonction et elle marche très bien.  
Cependant, j'aimerais l'améliorer mais je ne suis très bon en codage...  
 
Voici ma problématique : Dans la plage à laquelle j'applique la fonction SommeCouleur, il se trouve que j'ai des cellules qui contiennent du texte ou des dates, ce qui affiche un message d'erreur. Ma piste d'amélioration serait de définir dans le code le type de cellules concernées par la somme, à savoir celles qui contiennent des nombres uniquement.
 
merci d'avance pour ton aide

Reply

Marsh Posté le 23-01-2015 à 21:27:04    

Hello
 
Je suis sur mon téléphone, donc faudra peut être adapter
 
Mais, juste avant le Then, tu mets : AND isnum(cellule.value)
 
Tiens moi au jus, si ça marche Pas j'irai sur le pc
 
Édit : en fait, même avec une date ou un nombre ça devrait marcher... VBA ne pose pas de souci il me semble pour comparer deux variables de type different...  
Je testerai


Message édité par SuppotDeSaTante le 23-01-2015 à 21:32:29

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 26-01-2015 à 11:28:33    

Bonjour,
 
Merci pour ta réponse rapide!
ça ne marche malheureusement pas. J'ai le message d'erreur suivant : " Erreur de compliation : Sub ou Function non définie" avec surlignement de la fonction isnum.
 

Reply

Marsh Posté le 26-01-2015 à 11:38:55    

Aurais tu une idée du probleme?!
D'avance merci

Reply

Marsh Posté le 26-01-2015 à 21:12:39    

Reply

Marsh Posté le 27-01-2015 à 15:46:57    

Merci beaucoup, la fonction marche bien!

Reply

Marsh Posté le 29-01-2015 à 22:14:33    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed