Nombre de cases colorées

  • Initiateur de la discussion Dok'
  • Date de début
D

Dok'

Guest
Bonjour à tous,

Une petite question d'utilisation de visual basic :

Je voudrais écrire en A12 le nombre de cases coloriées d'une certaine couleur (par exemple en rouge, code : 3) sur l'élément de ligne A1:A10, puis le faire sur B1:B10 (l'écrire en B12), ...., jusqu'à la dernière ligne où la colonne A prend une valeur (par exemple à la ligne 100).

J'espère que je me suis bien expliqué.

Merci d'avance.

Dok'
 
Y

Yo

Guest
Salut,
Essaye ça :

Sub Compte_Couleur()
Dim i, Compteur, j

i = 1
While Cells(i, 1) <> ""
Compteur = 0
For j = 1 To 10
If Cells(i, j).Interior.ColorIndex = 3 Then Compteur = Compteur + 1
Next j
Cells(i, 12) = Compteur
i = i + 1
Wend

End Sub
 
D

Dok'

Guest
Merci beaucoup, j'ai adapté un peu ton programme car je voulais le faire en fonction du nombre de lignes de mon fichier (ici m = nombre de lignes = 100)--> voir mon programme à la fin de ce texte.

Le problème que j'ai maintenant, c'est qu'en fait ce programme marche très bien tant que les cases cooriées l'ont été faites "à la main".
En réalité il en est tout autre dans mon fichier et les cases coloriées en rouge sont issues d'une macro qui disait, en gros :

IF Valeur de la case non comprise entre x et y, alors colorier la case en rouge

Et la nouvelle macro ne repère plus les cases en rouge et marque donc 0 dans les cases de la colone 12 !

Comprends-tu ce que je veux dire ?
COMMENT FAIRE ???

Merci encore d'avance pour ton aide ou celle d'une autre personne



Sub Compte_Couleur()
Dim i, Compteur, j

k = 100
i = 1
Do Until IsEmpty(ActiveCell = True)
Compteur = 0
For j = 1 To 10
If Cells(i, j).Interior.ColorIndex = 3 Then Compteur = Compteur + 1
Next j
Cells(i, 12) = Compteur
i = i + 1
If i > k Then GoTo fin
Loop
fin:
End Sub
 
Y

Yo

Guest
Ton probleme en fait, c'est que tu ne sais pas à quel numero correspond ta couleur.

Rajoute la ligne :

MsgBox Cells(i, j).Interior.ColorIndex
dans la fonction comme ci-dessous :

Sub Compte_Couleur()
Dim i, Compteur, j

k = 100
i = 1
Do Until IsEmpty(ActiveCell = True)
Compteur = 0
For j = 1 To 10
If Cells(i, j).Interior.ColorIndex = 3 Then Compteur = Compteur + 1
MsgBox Cells(i, j).Interior.ColorIndex
Next j
Cells(i, 12) = Compteur
i = i + 1
If i > k Then GoTo fin
Loop
fin:
End Sub


Comme ça, pour chacune des cellules à balayer, tu récupèrera le n° correspondant à la couleur.
Après, tu n'auras plus qu'à mettre cette valeur à la place de 3

Tiens-moi au courrant par le forum.
 
Y

Yo

Guest
Correction de la procedure ci-dessus.
J'ai mis n'importe quoi.

Il faut mettre ça :

Sub Compte_Couleur()
Dim i, Compteur, j

k = 100
i = 1
Do Until IsEmpty(ActiveCell = True)
Compteur = 0
For j = 1 To 10
MsgBox Cells(i, j).Interior.ColorIndex
If Cells(i, j).Interior.ColorIndex = 3 Then Compteur = Compteur + 1
Next j
Cells(i, 12) = Compteur
i = i + 1
If i > k Then GoTo fin
Loop
fin:
End Sub
 
D

Dok'

Guest
J'avais déjà essayé... en fait le message box me met toujours la valeur
-4142, que la acse soir rouge ou non coloriée.... je coimmence à désespérer... ce ne doit quand même pas être si compliqué que ça, non ?

Faut dire aussi que je suis un vrai novice de Visual Basic...
 
Y

Yo

Guest
Salut,
Je comprends pas. Ca marche chez moi.
Je poste un classeur tout simple pour que tu essayes.
Ca m'a permis de voir que la couleur verte avait la valeur 35.
 

Pièces jointes

  • Classeur2.xls
    22.5 KB · Affichages: 99
  • Classeur2.xls
    22.5 KB · Affichages: 97
  • Classeur2.xls
    22.5 KB · Affichages: 103

Discussions similaires

Statistiques des forums

Discussions
312 963
Messages
2 093 998
Membres
105 906
dernier inscrit
aifa