EXCEL 2003 compter des cellules de même couleur

Le
djeel
Salut !
J'utilise excel 2003.
J'ai un tableau comportant environ 1100 cellules ; certaines (environ 300)
sont coloriées (couleur de remplissage) avec une dizaine de couleurs
différentes, les autres restant en blanc.
Je voudrais comptabiliser le nombre de cellules de chaque couleur.
Est-ce possible pour un utilisateur lambda comme moi ?
Merci de votre aide et cordialement

--
Djeel
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DanielCo
Le #24052531
Bonjour,
Sélectionne la plage à traiter et exécute la macro ci-dessous. Elle
ajoute une feuille avec les couleurs en colonne A et le nombre de
cellules correspondant en colonne B.

Sub test()
Dim Tabl1() As Double, Tabl2() As Double
Dim c As Range, Coul As Variant
ReDim Tabl1(0)
ReDim Tabl2(0)
With Application
For Each c In Selection
If c.Interior.ColorIndex <> xlNone Then
Coul = .Match(c.Interior.Color, Tabl1(), 0)
If IsNumeric(Coul) Then
Tabl2(Coul - 1) = Tabl2(Coul - 1) + 1
Else
ReDim Preserve Tabl1(UBound(Tabl1()) + 1)
ReDim Preserve Tabl2(UBound(Tabl2()) + 1)
Tabl1(UBound(Tabl1())) = c.Interior.Color
Tabl2(UBound(Tabl2())) = 1
End If
End If
Next c
Sheets.Add
[A1].Resize(UBound(Tabl1())) = .Transpose(Tabl1())
[B1].Resize(UBound(Tabl2())) = .Transpose(Tabl2())
End With
End Sub

Cordialement.
Daniel

djeel a écrit
Salut !
J'utilise excel 2003.
J'ai un tableau comportant environ 1100 cellules ; certaines (environ 300)
sont coloriées (couleur de remplissage) avec une dizaine de couleurs
différentes, les autres restant en blanc.
Je voudrais comptabiliser le nombre de cellules de chaque couleur.
Est-ce possible pour un utilisateur lambda comme moi ?
Merci de votre aide et cordialement
Maude Este
Le #24052521
Bonsour®

"djeel" a écrit
J'utilise excel 2003.
J'ai un tableau comportant environ 1100 cellules ; certaines (environ 300)
sont coloriées (couleur de remplissage) avec une dizaine de couleurs
différentes, les autres restant en blanc.
Je voudrais comptabiliser le nombre de cellules de chaque couleur.
Est-ce possible pour un utilisateur lambda comme moi ?

préalables :
1 - comment sont attribuées les couleurs ???
- manuellement
- mise en forme conditionnelle

2 - le changement de couleur n'est pas un évènement lié au recalcul.
i.e. il faut efffectuer un recalcul après chaque changement de couleur

3 - relativement au référentiel "utilisateur lambda" et aux 2 points précédents
:
soit dénombrement selon conditions (MEFC)
soit solutions via macro VBA (dénombrement selon remplissage)
soit une solution via macro XL4

http://www.ozgrid.com/VBA/sum-count-cells-by-color.htm
http://www.ozgrid.com/VBA/Sum.htm
http://excelabo.net/trucs/addition_rouge
Gloops
Le #24053181
djeel a écrit, le 10/12/2011 10:11 :
Salut !
J'utilise excel 2003.
J'ai un tableau comportant environ 1100 cellules ; certaines (environ
300) sont coloriées (couleur de remplissage) avec une dizaine de
couleurs différentes, les autres restant en blanc.
Je voudrais comptabiliser le nombre de cellules de chaque couleur.
Est-ce possible pour un utilisateur lambda comme moi ?
Merci de votre aide et cordialement




Bonjour,

Il me semble que VBA a toute sa place pour faire ça.

Il convient de commencer par renseigner les valeurs représentant les
couleurs, en les lisant avec un code VBA, au besoin on peut y revenir.
Il faut vérifier dans l'aide de Interior la propriété BackColor, po ur
laquelle j'ai un petit doute (dommage, je m'en suis servi hier). Si il
s'agit de couleurs fixes, qu'on peut les mettre en dur dans le code, ça
peut donner quelque chose comme ça :

Public Sub CompteCouleurs
Dim C As Range 'Cell
Couleur1 = 255
Couleur2 = 1024
.
.
.
Couleur10 = 20505415
NbCouleur1 = 0
NbCouleur2 = 0
NbCouleur3 = 0
NbCouleur4 = 0
NbCouleur5 = 0
NbCouleur6 = 0
NbCouleur7 = 0
NbCouleur8 = 0
NbCouleur9 = 0
NbCouleur10 = 0
For Each C in ActiveSheet.UsedRange
Select Case C.Interior.BackColor
Case Couleur1
NbCouleur1 = NbCouleur1 + 1
Case Couleur2
NbCouleur2 = NbCouleur2 + 1
Case Couleur3
NbCouleur3 = NbCouleur3 + 1
Case Couleur4
NbCouleur4 = NbCouleur4 + 1
Case Couleur5
NbCouleur5 = NbCouleur5 + 1
Case Couleur6
NbCouleur7 = NbCouleur6 + 1
Case Couleur7
NbCouleur7 = NbCouleur7 + 1
Case Couleur8
NbCouleur8 = NbCouleur8 + 1
Case Couleur1
NbCouleur9 = NbCouleur9 + 1
Case Couleur1
NbCouleur10 = NbCouleur10 + 1
End Select
Next
MsgBox "Voici les résultats : " + vbCrLf + _
"Couleur 1 : " + VBA.Str$(NbCouleur1) + vbCrLf + _
"Couleur 2 : " + VBA.Str$(NbCouleur2) + vbCrLf + _
"Couleur 3 : " + VBA.Str$(NbCouleur3) + vbCrLf + _
"Couleur 4 : " + VBA.Str$(NbCouleur4) + vbCrLf + _
"Couleur 5 : " + VBA.Str$(NbCouleur5) + vbCrLf + _
"Couleur 6 : " + VBA.Str$(NbCouleur6) + vbCrLf + _
"Couleur 7 : " + VBA.Str$(NbCouleur7) + vbCrLf + _
"Couleur 8 : " + VBA.Str$(NbCouleur8) + vbCrLf + _
"Couleur 9 : " + VBA.Str$(NbCouleur9) + vbCrLf + _
"Couleur 10 : " + VBA.Str$(NbCouleur10)
End Sub

ça met un bout de temps qu'il faut laisser à la machine pour faire le s
décomptes. Une amélioration peut être de renseigner une barre de
progression pour qu'on se rende compte du temps qu'il reste à attendre.

A priori il est préférable d'avoir l'option Explicit initialisée, a uquel
cas on sera obligé de déclarer comme Integer les variables Couleur1 à
Couleur10, et NbCouleur1 à NbCouleur10.
Dim NbCouleur1 As Integer
(ou Int, en pratiquant plusieurs langages je finis par avoir un doute).
Gloops
Le #24053391
Gloops a écrit, le 10/12/2011 13:23 :
djeel a écrit, le 10/12/2011 10:11 :
Salut !
J'utilise excel 2003.
J'ai un tableau comportant environ 1100 cellules ; certaines (environ
300) sont coloriées (couleur de remplissage) avec une dizaine de
couleurs différentes, les autres restant en blanc.
Je voudrais comptabiliser le nombre de cellules de chaque couleur.
Est-ce possible pour un utilisateur lambda comme moi ?
Merci de votre aide et cordialement




Bonjour,

Il me semble que VBA a toute sa place pour faire ça.

Il convient de commencer par renseigner les valeurs représentant les
couleurs, en les lisant avec un code VBA, au besoin on peut y revenir.
Il faut vérifier dans l'aide de Interior la propriété BackColor, pour
laquelle j'ai un petit doute (dommage, je m'en suis servi hier). Si il
s'agit de couleurs fixes, qu'on peut les mettre en dur dans le code, ç a
peut donner quelque chose comme ça :

Public Sub CompteCouleurs
Dim C As Range 'Cell
Couleur1 = 255
Couleur2 = 1024
.
.
.
Couleur10 = 20505415
NbCouleur1 = 0
NbCouleur2 = 0
NbCouleur3 = 0
NbCouleur4 = 0
NbCouleur5 = 0
NbCouleur6 = 0
NbCouleur7 = 0
NbCouleur8 = 0
NbCouleur9 = 0
NbCouleur10 = 0
For Each C in ActiveSheet.UsedRange
Select Case C.Interior.BackColor
Case Couleur1
NbCouleur1 = NbCouleur1 + 1
Case Couleur2
NbCouleur2 = NbCouleur2 + 1
Case Couleur3
NbCouleur3 = NbCouleur3 + 1
Case Couleur4
NbCouleur4 = NbCouleur4 + 1
Case Couleur5
NbCouleur5 = NbCouleur5 + 1
Case Couleur6
NbCouleur7 = NbCouleur6 + 1
Case Couleur7
NbCouleur7 = NbCouleur7 + 1
Case Couleur8
NbCouleur8 = NbCouleur8 + 1
Case Couleur1
NbCouleur9 = NbCouleur9 + 1
Case Couleur1
NbCouleur10 = NbCouleur10 + 1
End Select
Next
MsgBox "Voici les résultats : " + vbCrLf + _
"Couleur 1 : " + VBA.Str$(NbCouleur1) + vbCrLf + _
"Couleur 2 : " + VBA.Str$(NbCouleur2) + vbCrLf + _
"Couleur 3 : " + VBA.Str$(NbCouleur3) + vbCrLf + _
"Couleur 4 : " + VBA.Str$(NbCouleur4) + vbCrLf + _
"Couleur 5 : " + VBA.Str$(NbCouleur5) + vbCrLf + _
"Couleur 6 : " + VBA.Str$(NbCouleur6) + vbCrLf + _
"Couleur 7 : " + VBA.Str$(NbCouleur7) + vbCrLf + _
"Couleur 8 : " + VBA.Str$(NbCouleur8) + vbCrLf + _
"Couleur 9 : " + VBA.Str$(NbCouleur9) + vbCrLf + _
"Couleur 10 : " + VBA.Str$(NbCouleur10)
End Sub

ça met un bout de temps qu'il faut laisser à la machine pour faire les
décomptes. Une amélioration peut être de renseigner une barre de
progression pour qu'on se rende compte du temps qu'il reste à attendr e.

A priori il est préférable d'avoir l'option Explicit initialisée, auquel
cas on sera obligé de déclarer comme Integer les variables Couleur1 à
Couleur10, et NbCouleur1 à NbCouleur10.
Dim NbCouleur1 As Integer
(ou Int, en pratiquant plusieurs langages je finis par avoir un doute).




Ah, il y a deux minutes, je ne voyais aucune réponse dans le fil, mêm e
pas la mienne.

Et comme je m'apprêtais à la reposter en PDF, ça y est tout le mond e
rapplique, il y en a trois et je suis le dernier. Je ne sais pas au
juste quel maillon de la chaîne s'est montré facétieux.
djeel
Le #24053891
Le 10/12/2011 13:23, Gloops a écrit :

Il me semble que VBA a toute sa place pour faire ça.
Il convient de commencer par renseigner les valeurs représentant les
couleurs, en les lisant avec un code VBA,



Merci de ton aide, mais franchement...je n'y comprends rien !
Cordialement

--
Djeel
djeel
Le #24054021
Le 10/12/2011 11:07, DanielCo a écrit :
Bonjour,
Sélectionne la plage à traiter et exécute la macro ci-dessous. Elle ajoute
une feuille avec les couleurs en colonne A et le nombre de cellules
correspondant en colonne B.

Sub test()
Dim Tabl1() As Double, Tabl2() As Double
Dim c As Range, Coul As Variant
ReDim Tabl1(0)
ReDim Tabl2(0)
With Application
For Each c In Selection
If c.Interior.ColorIndex <> xlNone Then
Coul = .Match(c.Interior.Color, Tabl1(), 0)
If IsNumeric(Coul) Then
Tabl2(Coul - 1) = Tabl2(Coul - 1) + 1
Else
ReDim Preserve Tabl1(UBound(Tabl1()) + 1)
ReDim Preserve Tabl2(UBound(Tabl2()) + 1)
Tabl1(UBound(Tabl1())) = c.Interior.Color
Tabl2(UBound(Tabl2())) = 1
End If
End If
Next c
Sheets.Add
[A1].Resize(UBound(Tabl1())) = .Transpose(Tabl1())
[B1].Resize(UBound(Tabl2())) = .Transpose(Tabl2())
End With
End Sub



Super ! Ca marche !!!
ça m'a permis de me rendre compte que mes couleurs n'étaient pas uniformes
: j'avais 2 jeunes, 2 verts, ...
J'a iencore un petit souci puisque la macro me renvoie un nombre de
cellules de couleurs blanche ne corrspondant pas au nombre de cellules
vides et donc supposées blanches, et deux nombres pour lesquels je ne
trouve pas la couleur correspondante...
Merci et cordialement

--
Djeel
djeel
Le #24054011
Le 10/12/2011 11:16, Maude Este a écrit :

préalables :
1 - comment sont attribuées les couleurs ???
- manuellement



manuellement

2 - le changement de couleur n'est pas un évènement lié au recalcul.
i.e. il faut efffectuer un recalcul après chaque changement de couleur
3 - relativement au référentiel "utilisateur lambda" et aux 2 points
précédents :
soit dénombrement selon conditions (MEFC)
soit solutions via macro VBA (dénombrement selon remplissage)
soit une solution via macro XL4



Je ne comprends pas ;-)))

http://www.ozgrid.com/VBA/sum-count-cells-by-color.htm
http://www.ozgrid.com/VBA/Sum.htm
http://excelabo.net/trucs/addition_rouge



Je regarde ça, merci de ta réponse...
La macro proposée par DanielCo fonctionne bien.

--
Djeel
DanielCo
Le #24054001
Super ! Ca marche !!!
ça m'a permis de me rendre compte que mes couleurs n'étaient pas uniformes
: j'avais 2 jeunes, 2 verts, ...
J'a iencore un petit souci puisque la macro me renvoie un nombre de cellules
de couleurs blanche ne corrspondant pas au nombre de cellules vides et donc
supposées blanches, et deux nombres pour lesquels je ne trouve pas la couleur
correspondante...
Merci et cordialement



Les cellules vides ne sont pas comptabilisées et donc pas listées. La
première ligne, il ne faut pas tenir compte, j'ai oublié de la
supprimer en fin de macro.
Si, malgré tout, il subsiste une différence charge ton classeur sur
cjint.com et poste le lien généré.

Daniel
DanielCo
Le #24054361
Super ! Ca marche !!!
ça m'a permis de me rendre compte que mes couleurs n'étaient pas uniformes
: j'avais 2 jeunes, 2 verts, ...
J'a iencore un petit souci puisque la macro me renvoie un nombre de
cellules de couleurs blanche ne corrspondant pas au nombre de cellules
vides et donc supposées blanches, et deux nombres pour lesquels je ne
trouve pas la couleur correspondante...
Merci et cordialement



Les cellules vides ne sont pas comptabilisées et donc pas listées. La
première ligne, il ne faut pas tenir compte, j'ai oublié de la supprimer en
fin de macro.
Si, malgré tout, il subsiste une différence charge ton classeur sur cjint.com
et poste le lien généré.

Daniel



Oups cjoint.com
djeel
Le #24054631
Le 10/12/2011 17:13, DanielCo a écrit :

Les cellules vides ne sont pas comptabilisées et donc pas listées. La
première ligne, il ne faut pas tenir compte, j'ai oublié de la supprimer en
fin de macro.
Si, malgré tout, il subsiste une différence charge ton classeur sur
cjint.com et poste le lien généré.




Voici :
http://cjoint.com/?ALksIOMW6oZ

la macro me compte 10 couleurs, je crois n'en utiliser que 9 !
Si tu trouves la solution ...
Bien cordialement



--
Djeel
Publicité
Poster une réponse
Anonyme