Dénombrement de cases coloriées

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

Dok'

Guest
Bonjour à tous,
j'ai un petit problème que je dois résoudre urgemment.... et cherche quelqu'un pour m'aider, car je suis un novice en VBA !

Voilà mon programme :


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

ce programme écrit en A12,B12,... le nombre de cases rouges de la plage A1:A10, B1:B10,...
Ce dernier fonctionne très bien quand j'ai des cases colriées "à la main".
Le problème est qu'en ce qui concerne mes fichiers, les cases colriées en rouge sont issues d'une macro (qui colorie en rouge les cases dont les valeurs sont comprises entre x et y).... et là, mon programme (ci-dessus) ne reconnait pas les cases coloriées !!

Comment faire, quelqu'un peut-il m'aider SVP

Un grand merci d'avance.....
 
A

Alain

Guest
Bonjour,


Il faut en fait récupérer le n° de la couleur (ColorIndex) par macro dans une cellule déjà coloriée par la macro.

Tu sélectionnes une cellule coloriée puis tu lances la macro :
Sub Recup_Couleur()
Couleur = ActiveCell.Interior.ColorIndex
MsgBox "N° couleur =" & Couleur
End Sub


Ensuite, tu remplaces le 3 par le n° que tu auras trouvé.


@+
 
D

Dok'

Guest
Merci mais j'ai un problème....
Quelquesoit la case sélectionnée (qu'elle soir rouge ou non coloriées), la valeur qui m'est renvoyée est -4142 !!!

Je ne comprends pas...

Que dois-je donc faire ?
 
D

Dok'

Guest
J'ai un fichier à vous envoyer mais il fait 500 KO et je n'arrive pas à le zipper (ne sait pas pourquoi !!!)

Je vous explique donc (désolé) un exemple de fichier



A partir de la ligne 3 et jusqu’à la ligne 1287 (dans mon fichier, mais j’en ai d’autres dont le nombre de lignes est différent)

colonne A : valeur de 0 ou de 1 (0=on;1=off)
colonne B : valeurs de températures en celcius (en gros peu importe les valeurs)
colonne C : idem
colonne D : valeurs de pressions en bars, c'est-à-dire entre 0 et X (peu importe)
colonnes E et f : idem

colonne G : =SI(A17=0;C17-B17;"")
colonne H : =SI(A17=0;E17-D17;"")
colonne I : =SI(A17=0;F17-D17;"")

Voilà pour les chiffres.

Ensuite 1ère macro :

Sub Validité()

n = 1287

Range("G3:" & "G" & n).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, _
Formula1:="20", Formula2:="100"
Selection.FormatConditions(1).Interior.ColorIndex = 3


Range("H3:" & "H" & n).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, _
Formula1:="3", Formula2:="25"
Selection.FormatConditions(1).Interior.ColorIndex = 3


Range("I3:" & "I" & n).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, _
Formula1:="0", Formula2:="1.2"
Selection.FormatConditions(1).Interior.ColorIndex = 3

End Sub

Qui colorie en rouge les cases
de G dont les valeurs ne sont pas comprises entre 20 et 100
de H ……………………………………..3 et 25
de I …………………………………….0 et 1.2

Voilà alors qu’arrive mon problème :

2ème macro dénombrant le nombre de cases rouges de la ligne (écriture dans la colonne K=11ème colonne)

Sub Compte_Couleur()
Dim i, Compteur, j

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


Et là….. CA MARCHE PAS (la colonne K n’est remplie que de 0)


Est-il possible de m’aider.. ? ?

DESOLE DE VOUS EMBETER AVEC TOUT CA ET UN GRAND MERCI D’AVANCE

Dok’
 
Y

Yo

Guest
Re-Salut,

Essaye ça :
remplace la ligne
If Cells(i, j).Interior.ColorIndex = 3 Then Compteur = Compteur + 1

par
If Cells(i, j).FormatConditions(1).Interior.ColorIndex = 3 Then Compteur = Compteur + 1

ou par

If Cells(i, j).FormatConditions(1).ColorIndex = 3 Then Compteur = Compteur + 1
 
A

Alain

Guest
Rebonjour,


En fait, c'est parce que tes cellules sont coloriées par une mise en forme conditionnelle.
Interior.ColorIndex ne marche pas sur une mise en forme conditionnelle.

Ii te faut modifier la 1ère macro.


@+
 
D

Dok'

Guest
Bon en fait si je remplace par

If Cells(i, j).FormatConditions(1).ColorIndex = 3 Then Compteur = Compteur + 1

ça ne marche pas.

Par contre quand je remplace par
If Cells(i, j).FormatConditions(1).ColorIndex = 3 Then Compteur = Compteur + 1

la valeur renvoyée est 18 à chaque fois (en fait en ce qui concerne mon fichier j'ai 18 colonnes susceptibles d'être coloriées en rouge (contrairement à l'exemple que j'ai donné précédemment qui ne concerne que 3 colonnes (colonnes G H et I)), mais dans mon fichier ce n'est pas le cas...

Ici le programme semble ne repérer que des cellules rouges !!!

Je n'comprends vraiment rien à rien !!!!
Je commence à désespérer, d'autant plus que le We arrive et qu'il va falloir que je me replonge la dedans Lundi..... j'aurais aimé finir aujourd'hui, mais bon tant pis apparemment c'est pas gagné cette affaire.....

YO si t'es là et que t'as un éclair de génie, fais m'en part vite car je pars dans 30 minutes....

Et encore désolé de t'embêter avec ça....

Si tu trouves pas de solutions, Nevermind, je referai une demande lundi .....

Merci.

Dok'
 
A

Alain

Guest
Bonsoir,


Essaye en remplaçant ta 1ère macro par cell-ci :

Sub Validité()

n = 1287

Range("G3:" & "G" & n).Select
Selection.FormatConditions.Delete
For Each cell In Selection
If cell < 20 Or cell > 100 Then
cell.Interior.ColorIndex = 3
End If
Next

Range("H3:" & "H" & n).Select
Selection.FormatConditions.Delete
For Each cell In Selection
If cell < 3 Or cell > 25 Then
cell.Interior.ColorIndex = 3
End If
Next


Range("I3:" & "I" & n).Select
Selection.FormatConditions.Delete
For Each cell In Selection
If cell < 0 Or cell > 1.2 Then
cell.Interior.ColorIndex = 3
End If
Next

End Sub


@+
 
L

LaurentTBT

Guest
Bonsoir à tous.

En effet, le problème vient de la mise en forme conditionnelle.
Cells(i, j).FormatConditions(1).ColorIndex = 3 permet juets de désigner quelle couleur doit être choisie par Excel si la condition est remplie. Cela ne nous dit absolument pas si la condition est remplie ou non.

J'ai un petit doute sur ce que tu veux vraiment: d'après ta macro Compte_couleur, tu ne comptes que le nombre de cases rouges sur la même ligne entre les colonnes G, H,I, et donc la réponse ne peut être que 0,1,2,ou3. Si c'est bien ce que tu recherches, pourquoi ne pas utiliser une formule toute simple: en K1, puis à étendre sur K2, ..., K1287 à l'aide de la croix:
=si(ou(G1<20;G1>100);1;0)+si(ou(H1<3;H1>25;1;0)+si(ou(I1<0;I1>1,2);1;0)

Cela te permet de conserver la mise en forme conditionnelle, car sinon, tu devras relancer la macro d'Alain ou de Yo à chaque changement de valeur.

Enfin, c'est juste une idée, en espérant t'aider.
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Fond de couleur
Réponses
2
Affichages
805

Statistiques des forums

Discussions
314 656
Messages
2 111 610
Membres
111 224
dernier inscrit
Test66