OVH Cloud OVH Cloud

Calcul par couleur

3 réponses
Avatar
Wenlok
Bonjour,

Soit le code suivant, qui fonctionne très, et qui sert à additionner des
cellules, suivant leurs couleur de remplissage.

Mais là où cela ne fontionne plus, c'est quand je veux remplacer la ligne:

Couleur_Fond = Range("A1").Interior.Color
par
Couleur_Fond = 3

en sachant que 3 est l'index de la couleur rouge.

Pourquoi ????

Merci

---------------------------------------------
Sub Macro1()
'DÉFINITION
Dim Couleur_Fond As Long
Dim Cel_Test As Range
Dim Total_Cel As Integer 'ou long, double suivant contenu

'MEI : mise à l'état initial


Couleur_Fond = Range("A1").Interior.Color




'Dans mon cas, la couleur de la cellule A1 sert de référence
'Couleur_Fond est une variable, mais tu peux utiliser
'la formule directement

Range("D1:D5").Select
'Si tu sélectionnes des cellules avant de lancer
'ta macro, cette ligne est inutile

'BOUCLE
For Each Cel_Test In Selection 'Début boucle
'Pour chaque cellule de la sélection

If Cel_Test.Interior.Color = Couleur_Fond Then
'Si couleur fond de cellule = Couleur_Fond, on continue
'sinon, on va directement à la ligne End If
'Sans variable en direct on peut écrire :
'If Cel_Test.Interior.Color = Range("A1").Interior.Color

Total_Cel = Total_Cel + Cel_Test
'Addition valeur cellule testée à Total_Cel

End If 'Fin de test

Next 'Fin boucle
'Tant que toute la sélection n'est pas testée,
'On retourne à la ligne suivant For Each....
'sinon, on continue

[A1] = Total_Cel

End Sub
----------------------------------------------

3 réponses

Avatar
JB
Avec une fonction (+souple) http://cjoint.com/?hEm5c8M3vW

JB

Bonjour,

Soit le code suivant, qui fonctionne très, et qui sert à additionner des
cellules, suivant leurs couleur de remplissage.

Mais là où cela ne fontionne plus, c'est quand je veux remplacer la l igne:

Couleur_Fond = Range("A1").Interior.Color
par
Couleur_Fond = 3

en sachant que 3 est l'index de la couleur rouge.

Pourquoi ????

Merci

---------------------------------------------
Sub Macro1()
'DÉFINITION
Dim Couleur_Fond As Long
Dim Cel_Test As Range
Dim Total_Cel As Integer 'ou long, double suivant contenu

'MEI : mise à l'état initial


Couleur_Fond = Range("A1").Interior.Color




'Dans mon cas, la couleur de la cellule A1 sert de référence
'Couleur_Fond est une variable, mais tu peux utiliser
'la formule directement

Range("D1:D5").Select
'Si tu sélectionnes des cellules avant de lancer
'ta macro, cette ligne est inutile

'BOUCLE
For Each Cel_Test In Selection 'Début boucle
'Pour chaque cellule de la sélection

If Cel_Test.Interior.Color = Couleur_Fond Then
'Si couleur fond de cellule = Couleur_Fond, on continue
'sinon, on va directement à la ligne End If
'Sans variable en direct on peut écrire :
'If Cel_Test.Interior.Color = Range("A1").Interior.Color

Total_Cel = Total_Cel + Cel_Test
'Addition valeur cellule testée à Total_Cel

End If 'Fin de test

Next 'Fin boucle
'Tant que toute la sélection n'est pas testée,
'On retourne à la ligne suivant For Each....
'sinon, on continue

[A1] = Total_Cel

End Sub
----------------------------------------------


Avatar
Daniel
Bonjour.
3 correspond à la propriété "colorindex"
Fais : msgbox Range("A1").Interior.Color
tu obtiens 255, pas 3.
Cordialement.
Daniel
"Wenlok" a écrit dans le message de news:
44cc8c74$0$1023$
Bonjour,

Soit le code suivant, qui fonctionne très, et qui sert à additionner des
cellules, suivant leurs couleur de remplissage.

Mais là où cela ne fontionne plus, c'est quand je veux remplacer la ligne:

Couleur_Fond = Range("A1").Interior.Color
par
Couleur_Fond = 3

en sachant que 3 est l'index de la couleur rouge.

Pourquoi ????

Merci

---------------------------------------------
Sub Macro1()
'DÉFINITION
Dim Couleur_Fond As Long
Dim Cel_Test As Range
Dim Total_Cel As Integer 'ou long, double suivant contenu

'MEI : mise à l'état initial


Couleur_Fond = Range("A1").Interior.Color




'Dans mon cas, la couleur de la cellule A1 sert de référence
'Couleur_Fond est une variable, mais tu peux utiliser
'la formule directement

Range("D1:D5").Select
'Si tu sélectionnes des cellules avant de lancer
'ta macro, cette ligne est inutile

'BOUCLE
For Each Cel_Test In Selection 'Début boucle
'Pour chaque cellule de la sélection

If Cel_Test.Interior.Color = Couleur_Fond Then
'Si couleur fond de cellule = Couleur_Fond, on continue
'sinon, on va directement à la ligne End If
'Sans variable en direct on peut écrire :
'If Cel_Test.Interior.Color = Range("A1").Interior.Color

Total_Cel = Total_Cel + Cel_Test
'Addition valeur cellule testée à Total_Cel

End If 'Fin de test

Next 'Fin boucle
'Tant que toute la sélection n'est pas testée,
'On retourne à la ligne suivant For Each....
'sinon, on continue

[A1] = Total_Cel

End Sub
----------------------------------------------




Avatar
Wenlok
Merci, c'est meme beaucoup mieux !

"JB" a écrit dans le message de news:

Avec une fonction (+souple) http://cjoint.com/?hEm5c8M3vW

JB

Bonjour,

Soit le code suivant, qui fonctionne très, et qui sert à additionner des
cellules, suivant leurs couleur de remplissage.

Mais là où cela ne fontionne plus, c'est quand je veux remplacer la ligne:

Couleur_Fond = Range("A1").Interior.Color
par
Couleur_Fond = 3

en sachant que 3 est l'index de la couleur rouge.

Pourquoi ????

Merci

---------------------------------------------
Sub Macro1()
'DÉFINITION
Dim Couleur_Fond As Long
Dim Cel_Test As Range
Dim Total_Cel As Integer 'ou long, double suivant contenu

'MEI : mise à l'état initial


Couleur_Fond = Range("A1").Interior.Color




'Dans mon cas, la couleur de la cellule A1 sert de référence
'Couleur_Fond est une variable, mais tu peux utiliser
'la formule directement

Range("D1:D5").Select
'Si tu sélectionnes des cellules avant de lancer
'ta macro, cette ligne est inutile

'BOUCLE
For Each Cel_Test In Selection 'Début boucle
'Pour chaque cellule de la sélection

If Cel_Test.Interior.Color = Couleur_Fond Then
'Si couleur fond de cellule = Couleur_Fond, on continue
'sinon, on va directement à la ligne End If
'Sans variable en direct on peut écrire :
'If Cel_Test.Interior.Color = Range("A1").Interior.Color

Total_Cel = Total_Cel + Cel_Test
'Addition valeur cellule testée à Total_Cel

End If 'Fin de test

Next 'Fin boucle
'Tant que toute la sélection n'est pas testée,
'On retourne à la ligne suivant For Each....
'sinon, on continue

[A1] = Total_Cel

End Sub
----------------------------------------------