Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Couleur de remplissage d'une cellule

6 réponses
Avatar
Arno
Bonjour,

Dans un précédent post, je souhaitais mettre une formule permettant de
tester la couleur de remplissage d'une cellule.

Cela se rapporte à une liste téléphonique sous XL.
J'ai la liste à partire de la ligne 10.

de A1 à A3, j'ai des valeur texte dans des cellules colorées.
A1="toto" (remplissage rouge)
A2="tata" (remplissage vert)
A3="titi" (remplissage jaune)


La formule que je cherche est inscrite dans la colone A, à partir de la
ligne 10. Si la couleur de remplissage de B10 est jaune, alors A10 renvoi la
valeur présente dans A3, puisque A3 est jaune.


Un utilisateur bienveillant me proposait de mettre le code suivant dans la
feuille concernée :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each c In Range("A10", "A150")
If Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex =
Range("A3").Interior.ColorIndex Then
Range("A" & c.Row) = Range("A3")
Else
If Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex =
Range("A2").Interior.ColorIndex Then
Range("A" & c.Row) = Range("A2")
Else
If Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex =
Range("A1").Interior.ColorIndex Then
Range("A" & c.Row) = Range("A1")
Else
Range("A" & c.Row) = ""
End If
End If
End If
Next
End Sub


Problème : lorsque je copie cela (dans l'éditeur VB) dans la feuille, j'ai
une erreur m'indiquant "Attendu : Expression"

Quelqu'un peu m'aider?


Arno

6 réponses

Avatar
isabelle
bonjour Arno,

les 2 lignes suivante :

If Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex Range("A3").Interior.ColorIndex Then

sont en fait une seule ligne
lors de la copie de code sur le forum il arrive souvent que les lignes
soient couper
remet la sur une seule ligne et ce, sur au 3 endroits semblable dans la
macro.


isabelle

Arno a écrit :
Bonjour,

Dans un précédent post, je souhaitais mettre une formule permettant de
tester la couleur de remplissage d'une cellule.

Cela se rapporte à une liste téléphonique sous XL.
J'ai la liste à partire de la ligne 10.

de A1 à A3, j'ai des valeur texte dans des cellules colorées.
A1="toto" (remplissage rouge)
A2="tata" (remplissage vert)
A3="titi" (remplissage jaune)


La formule que je cherche est inscrite dans la colone A, à partir de la
ligne 10. Si la couleur de remplissage de B10 est jaune, alors A10 renvoi la
valeur présente dans A3, puisque A3 est jaune.


Un utilisateur bienveillant me proposait de mettre le code suivant dans la
feuille concernée :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each c In Range("A10", "A150")
If Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex =
Range("A3").Interior.ColorIndex Then
Range("A" & c.Row) = Range("A3")
Else
If Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex =
Range("A2").Interior.ColorIndex Then
Range("A" & c.Row) = Range("A2")
Else
If Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex =
Range("A1").Interior.ColorIndex Then
Range("A" & c.Row) = Range("A1")
Else
Range("A" & c.Row) = ""
End If
End If
End If
Next
End Sub


Problème : lorsque je copie cela (dans l'éditeur VB) dans la feuille, j'ai
une erreur m'indiquant "Attendu : Expression"

Quelqu'un peu m'aider?


Arno





Avatar
Arno
Bonjour,

Eh bien cela ne fonctionne pas...
le code (relatif à la page, et non pas dans une macro) tourne sans erreur.
En revanche, cela n'apporte aucun résultat.

Je reprécise mon besoin :


J'ai un tableau de contacts de A10 à E600.
A10 correspond à nom du commercial (A11 à A600 sont les cellules à remplir
grace à la fonction que nous mettons en place ici.
B10 correspond à nom de société
C10 correspond à nom interlocuteur
D10 correspond à num de tel
E10 mail

B1 (en jaune) contient la valeur "toto"
B2 (en bleu) contient la valeur "tata"
B3 (en rouge) contient la valeur "titi"
B4 (en vert) contient la valeur "tutu"

l'objectif est de reseigner la veleur des cellules A11 à A600 en fonction de
la couleur de la ligne considérée.
Si la ligne 11 est bleue, alors je renseinge la valeur de B2, soit tata dans
A11.


Après cela, je souhaite pouvoir faire des tris sur nom de sté, ou nom du
commercial... ou encore filtrer la liste avec la fonction filtrer.

Merci pour votre aide.

Arno

PS : j'ai changé de sté, et je souhaite garder mon compte. En revanche, je
n'accède plus au compte mail me servant d'identifiant. Par conséquent, je
n'ai pas les notification de réponse. Comment puis je changer l'adresse mail
de notification de réponse?


"isabelle" a écrit :

bonjour Arno,

les 2 lignes suivante :

If Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex > Range("A3").Interior.ColorIndex Then

sont en fait une seule ligne
lors de la copie de code sur le forum il arrive souvent que les lignes
soient couper
remet la sur une seule ligne et ce, sur au 3 endroits semblable dans la
macro.


isabelle

Arno a écrit :
> Bonjour,
>
> Dans un précédent post, je souhaitais mettre une formule permettant de
> tester la couleur de remplissage d'une cellule.
>
> Cela se rapporte à une liste téléphonique sous XL.
> J'ai la liste à partire de la ligne 10.
>
> de A1 à A3, j'ai des valeur texte dans des cellules colorées.
> A1="toto" (remplissage rouge)
> A2="tata" (remplissage vert)
> A3="titi" (remplissage jaune)
>
>
> La formule que je cherche est inscrite dans la colone A, à partir de la
> ligne 10. Si la couleur de remplissage de B10 est jaune, alors A10 renvoi la
> valeur présente dans A3, puisque A3 est jaune.
>
>
> Un utilisateur bienveillant me proposait de mettre le code suivant dans la
> feuille concernée :
>
> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
> For Each c In Range("A10", "A150")
> If Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex =
> Range("A3").Interior.ColorIndex Then
> Range("A" & c.Row) = Range("A3")
> Else
> If Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex =
> Range("A2").Interior.ColorIndex Then
> Range("A" & c.Row) = Range("A2")
> Else
> If Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex =
> Range("A1").Interior.ColorIndex Then
> Range("A" & c.Row) = Range("A1")
> Else
> Range("A" & c.Row) = ""
> End If
> End If
> End If
> Next
> End Sub
>
>
> Problème : lorsque je copie cela (dans l'éditeur VB) dans la feuille, j'ai
> une erreur m'indiquant "Attendu : Expression"
>
> Quelqu'un peu m'aider?
>
>
> Arno
>
>
>
.



Avatar
FdeCourt
Salut,

Et avec ce code (que tu peux mettre dans un module standard) :

Function ValeurCouleur(x As Range, b1 As Range, b2 As Range, b3 As
Range, b4 As Range)
Application.Volatile
Select Case x.Interior.ColorIndex
Case b1.Interior.ColorIndex
ValeurCouleur = b1.Value
Case b2.Interior.ColorIndex
ValeurCouleur = b2.Value
Case b3.Interior.ColorIndex
ValeurCouleur = b3.Value
Case b4.Interior.ColorIndex
ValeurCouleur = b4.Value
Case Else
ValeurCouleur = ""
End Select
End Function

Et que tu appelles dans ta feuille Excel comme une fomule normale :
=ValeurCouleur(A11;$B$1;$B$2;$B$3;$B$4)

Ou si tu veux faire une boucle en VBA :
Sub TouteCellule()
Dim c As Range
For Each c In Range("A10:A600")
c.Value = ValeurCouleur(c, Cells(1, 2), Cells(2, 2), Cells(3,
2), Cells(4, 2))
Next
End Sub

Je pense que le problème est la couleur d'une ligne.
Est-ce bien toute la ligne qui est colorée (donc de la colonne A à la
colonne IV) ?
Si ce n'est pas le cas, alors il est normal que la solution d'Isabelle
ne renvoit rien. Dans une ligne complete, s'il y a plusieurs couleurs,
alors Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex renvoit
VIDE, donc c'est toujours la derniere condition qui s'applique (Range
("A" & c.Row) = "" )

Cordialemenent,

F.

PS : je me suis permis de poster une autre manière de voir les
choses !
Avatar
Arno
Bonjour,

J'ai mis dans un module :

Function ValeurCouleur(x As Range, b1 As Range, b2 As Range, b3 As Range, b4
As Range, b5 As Range, b6 As Range, b7 As Range)
Application.Volatile
Select Case x.Interior.ColorIndex
Case b1.Interior.ColorIndex
ValeurCouleur = b1.Value
Case b2.Interior.ColorIndex
ValeurCouleur = b2.Value
Case b3.Interior.ColorIndex
ValeurCouleur = b3.Value
Case b4.Interior.ColorIndex
ValeurCouleur = b4.Value
Case b5.Interior.ColorIndex
ValeurCouleur = b5.Value
Case b6.Interior.ColorIndex
ValeurCouleur = b6.Value
Case b7.Interior.ColorIndex
ValeurCouleur = b7.Value
Case Else
ValeurCouleur = ""
End Select
End Function

J'utilise la fonction:
=ValeurCouleur(B556;$B$1;$B$2;$B$3;$B$4;B$5;$B$6;$B$7)

Cela fonctionne pour les valeurs présentes en B1, B2, B3, B4, B5, mais pas
B6 et B7.

Why?????

"FdeCourt" a écrit :

Salut,

Et avec ce code (que tu peux mettre dans un module standard) :

Function ValeurCouleur(x As Range, b1 As Range, b2 As Range, b3 As
Range, b4 As Range)
Application.Volatile
Select Case x.Interior.ColorIndex
Case b1.Interior.ColorIndex
ValeurCouleur = b1.Value
Case b2.Interior.ColorIndex
ValeurCouleur = b2.Value
Case b3.Interior.ColorIndex
ValeurCouleur = b3.Value
Case b4.Interior.ColorIndex
ValeurCouleur = b4.Value
Case Else
ValeurCouleur = ""
End Select
End Function

Et que tu appelles dans ta feuille Excel comme une fomule normale :
=ValeurCouleur(A11;$B$1;$B$2;$B$3;$B$4)

Ou si tu veux faire une boucle en VBA :
Sub TouteCellule()
Dim c As Range
For Each c In Range("A10:A600")
c.Value = ValeurCouleur(c, Cells(1, 2), Cells(2, 2), Cells(3,
2), Cells(4, 2))
Next
End Sub

Je pense que le problème est la couleur d'une ligne.
Est-ce bien toute la ligne qui est colorée (donc de la colonne A à la
colonne IV) ?
Si ce n'est pas le cas, alors il est normal que la solution d'Isabelle
ne renvoit rien. Dans une ligne complete, s'il y a plusieurs couleurs,
alors Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex renvoit
VIDE, donc c'est toujours la derniere condition qui s'applique (Range
("A" & c.Row) = "" )

Cordialemenent,

F.

PS : je me suis permis de poster une autre manière de voir les
choses !

.



Avatar
Arno
Je rectifie :

cela fonctionne pour B1, B3, B4, B5 et B6, mais pas B2 et B7...


"Arno" a écrit :

Bonjour,

J'ai mis dans un module :

Function ValeurCouleur(x As Range, b1 As Range, b2 As Range, b3 As Range, b4
As Range, b5 As Range, b6 As Range, b7 As Range)
Application.Volatile
Select Case x.Interior.ColorIndex
Case b1.Interior.ColorIndex
ValeurCouleur = b1.Value
Case b2.Interior.ColorIndex
ValeurCouleur = b2.Value
Case b3.Interior.ColorIndex
ValeurCouleur = b3.Value
Case b4.Interior.ColorIndex
ValeurCouleur = b4.Value
Case b5.Interior.ColorIndex
ValeurCouleur = b5.Value
Case b6.Interior.ColorIndex
ValeurCouleur = b6.Value
Case b7.Interior.ColorIndex
ValeurCouleur = b7.Value
Case Else
ValeurCouleur = ""
End Select
End Function

J'utilise la fonction:
=ValeurCouleur(B556;$B$1;$B$2;$B$3;$B$4;B$5;$B$6;$B$7)

Cela fonctionne pour les valeurs présentes en B1, B2, B3, B4, B5, mais pas
B6 et B7.

Why?????

"FdeCourt" a écrit :

> Salut,
>
> Et avec ce code (que tu peux mettre dans un module standard) :
>
> Function ValeurCouleur(x As Range, b1 As Range, b2 As Range, b3 As
> Range, b4 As Range)
> Application.Volatile
> Select Case x.Interior.ColorIndex
> Case b1.Interior.ColorIndex
> ValeurCouleur = b1.Value
> Case b2.Interior.ColorIndex
> ValeurCouleur = b2.Value
> Case b3.Interior.ColorIndex
> ValeurCouleur = b3.Value
> Case b4.Interior.ColorIndex
> ValeurCouleur = b4.Value
> Case Else
> ValeurCouleur = ""
> End Select
> End Function
>
> Et que tu appelles dans ta feuille Excel comme une fomule normale :
> =ValeurCouleur(A11;$B$1;$B$2;$B$3;$B$4)
>
> Ou si tu veux faire une boucle en VBA :
> Sub TouteCellule()
> Dim c As Range
> For Each c In Range("A10:A600")
> c.Value = ValeurCouleur(c, Cells(1, 2), Cells(2, 2), Cells(3,
> 2), Cells(4, 2))
> Next
> End Sub
>
> Je pense que le problème est la couleur d'une ligne.
> Est-ce bien toute la ligne qui est colorée (donc de la colonne A à la
> colonne IV) ?
> Si ce n'est pas le cas, alors il est normal que la solution d'Isabelle
> ne renvoit rien. Dans une ligne complete, s'il y a plusieurs couleurs,
> alors Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex renvoit
> VIDE, donc c'est toujours la derniere condition qui s'applique (Range
> ("A" & c.Row) = "" )
>
> Cordialemenent,
>
> F.
>
> PS : je me suis permis de poster une autre manière de voir les
> choses !
>
> .
>


Avatar
Arno
Ok ça fonctionne en changeant les couleurs....
Strange...


Merci

"Arno" a écrit :

Je rectifie :

cela fonctionne pour B1, B3, B4, B5 et B6, mais pas B2 et B7...


"Arno" a écrit :

> Bonjour,
>
> J'ai mis dans un module :
>
> Function ValeurCouleur(x As Range, b1 As Range, b2 As Range, b3 As Range, b4
> As Range, b5 As Range, b6 As Range, b7 As Range)
> Application.Volatile
> Select Case x.Interior.ColorIndex
> Case b1.Interior.ColorIndex
> ValeurCouleur = b1.Value
> Case b2.Interior.ColorIndex
> ValeurCouleur = b2.Value
> Case b3.Interior.ColorIndex
> ValeurCouleur = b3.Value
> Case b4.Interior.ColorIndex
> ValeurCouleur = b4.Value
> Case b5.Interior.ColorIndex
> ValeurCouleur = b5.Value
> Case b6.Interior.ColorIndex
> ValeurCouleur = b6.Value
> Case b7.Interior.ColorIndex
> ValeurCouleur = b7.Value
> Case Else
> ValeurCouleur = ""
> End Select
> End Function
>
> J'utilise la fonction:
> =ValeurCouleur(B556;$B$1;$B$2;$B$3;$B$4;B$5;$B$6;$B$7)
>
> Cela fonctionne pour les valeurs présentes en B1, B2, B3, B4, B5, mais pas
> B6 et B7.
>
> Why?????
>
> "FdeCourt" a écrit :
>
> > Salut,
> >
> > Et avec ce code (que tu peux mettre dans un module standard) :
> >
> > Function ValeurCouleur(x As Range, b1 As Range, b2 As Range, b3 As
> > Range, b4 As Range)
> > Application.Volatile
> > Select Case x.Interior.ColorIndex
> > Case b1.Interior.ColorIndex
> > ValeurCouleur = b1.Value
> > Case b2.Interior.ColorIndex
> > ValeurCouleur = b2.Value
> > Case b3.Interior.ColorIndex
> > ValeurCouleur = b3.Value
> > Case b4.Interior.ColorIndex
> > ValeurCouleur = b4.Value
> > Case Else
> > ValeurCouleur = ""
> > End Select
> > End Function
> >
> > Et que tu appelles dans ta feuille Excel comme une fomule normale :
> > =ValeurCouleur(A11;$B$1;$B$2;$B$3;$B$4)
> >
> > Ou si tu veux faire une boucle en VBA :
> > Sub TouteCellule()
> > Dim c As Range
> > For Each c In Range("A10:A600")
> > c.Value = ValeurCouleur(c, Cells(1, 2), Cells(2, 2), Cells(3,
> > 2), Cells(4, 2))
> > Next
> > End Sub
> >
> > Je pense que le problème est la couleur d'une ligne.
> > Est-ce bien toute la ligne qui est colorée (donc de la colonne A à la
> > colonne IV) ?
> > Si ce n'est pas le cas, alors il est normal que la solution d'Isabelle
> > ne renvoit rien. Dans une ligne complete, s'il y a plusieurs couleurs,
> > alors Rows("" & c.Row & ":" & c.Row & "").Interior.ColorIndex renvoit
> > VIDE, donc c'est toujours la derniere condition qui s'applique (Range
> > ("A" & c.Row) = "" )
> >
> > Cordialemenent,
> >
> > F.
> >
> > PS : je me suis permis de poster une autre manière de voir les
> > choses !
> >
> > .
> >