Excel - Couleur en fonction du contenu

Résolu
mibri Messages postés 23 Date d'inscription vendredi 10 février 2012 Statut Membre Dernière intervention 28 janvier 2014 - 11 févr. 2012 à 16:45
mibri Messages postés 23 Date d'inscription vendredi 10 février 2012 Statut Membre Dernière intervention 28 janvier 2014 - 14 févr. 2012 à 15:26
bonjour,
j'ai une macro qui fonctionne très bien et qui me donne dans une colonne suivant un chiffre une couleur :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Column = 2 Then Exit Sub
Dim Cel As Range
For Each Cel In Target
'pour chaque cellule de la plage modifiée
Select Case LCase(Cel)
'mettre en "case" la valeur de la cellule en minuscules
Case "1"
Cel.Interior.ColorIndex = 4
Case "2"
Cel.Interior.ColorIndex = 40
Case "3"
Cel.Interior.ColorIndex = 34
Case "4"
Cel.Interior.ColorIndex = 27
Case "5"
Cel.Interior.ColorIndex = 34
Case "6"
Cel.Interior.ColorIndex = 39
Case "7"
Cel.Interior.ColorIndex = 24
Case "8"
Cel.Interior.ColorIndex = 22
Case "9"
Cel.Interior.ColorIndex = 7
Case "10"
Cel.Interior.ColorIndex = 33
Case "11"
Cel.Interior.ColorIndex = 38
Case "12"
Cel.Interior.ColorIndex = 46
Case Else
'si aucun des cas précédent
Cel.Interior.ColorIndex = xlNone
'couleur de fond en automatique
End Select
Next Cel
End Sub
Je voudrais obtenir la même chose sur la colonne 5 mais plus avec un chiffre mais avec un nom.
Est ce possible, je vous remercie par avance de votre avis

50 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 févr. 2012 à 09:25
J'ai repris mon code, de départ.
Je ne pense as que le dictionnary te soit utile, sauf peut-etre si tu dois a un moment donné sauvegarder ces correspondances libellé/couleur dans un fichier externe...

on pourras alors asser par un fichier INI pour plus de simplicité...


Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Then
        Select Case Target.Value
            Case 1:     Target.Interior.ColorIndex = 4
            Case 2:     Target.Interior.ColorIndex = 40
            Case 3:     Target.Interior.ColorIndex = 34
            Case 4:     Target.Interior.ColorIndex = 27
            Case 5:     Target.Interior.ColorIndex = 34 '# même que le Case 3
            Case 6:     Target.Interior.ColorIndex = 39
            Case 7:     Target.Interior.ColorIndex = 24
            Case 8:     Target.Interior.ColorIndex = 22
            Case 9:     Target.Interior.ColorIndex = 7
            Case 10:    Target.Interior.ColorIndex = 33
            Case 11:    Target.Interior.ColorIndex = 38
            Case 12:    Target.Interior.ColorIndex = 46
            Case Else: '# si aucun des cas précédent
                '# couleur de fond en automatique
                Target.Interior.ColorIndex = xlNone
        End Select
    ElseIf Target.Column = 5 Then
        Select Case UCase$(Target.Text)
            Case "DEBIT":       Target.Interior.Color = vbRed
            Case "VIREMENT":    Target.Interior.Color = vbYellow
            Case "PAIEMENT":    Target.Interior.Color = vbGreen
            Case "BANQUE":      Target.Interior.Color = vbBlue
            Case "CREDIT":      Target.Interior.Color = vbMagenta
            Case Else: '# Pour toute autre valeur
                Target.Interior.ColorIndex = xlNone '# Couleur par défaut du système
        End Select
    End If
End Sub


J'ai pris le parti ici de passer par une valeur RGB (BGR devrais-je dire...)
plutot que de passer par la palette Excel (ColorIndex)
Cela offre une plus grande liberté dans la variété des couleurs.

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2012 à 17:06
Bonjour,
1) Tu développes donc sous VBA et aurait du ouvrir cette discussion dans la section Langages dérivés > VBA ! Fais-y attention les prochaines fois.
2) prends l'habitude de ne pas laisser VBA "interpréter" tes manquements (il est tolérant, mais de tels errements pourraient un jour te jouer ubn fort mauvais tour !
Select Case LCase(Cel) = ====>>> Select Case LCase(Cel .Value )
3) pas vraiment compris ta question ! un "nom = une couleur" . Non ! un nom est de type string et une couleur de type long. Mais pourquoi n'utilises-tu pas les constantes de VBA, tout simplement ?
Et si tu veux une couleur autres que celles reprises par ces constantes, crée ta constante (dans la partie générale de ton code), genre :
Const toto as long = ......

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2012 à 17:11
Et je viens de constater que tu as pris la fort mauvaise habitude d'ouvrir des discussions dans le Bar !
Tu n'auras plus de réponses, si tu continues ainsi


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2012 à 17:15
Et enfin :
évite d'écrire sans comprendre !
Ouvre ton aide VBA sur ce qu'est LCase !
Et dis-moi ensuite ce que pourrait être d'autre que "1" la minuscxule de "1"


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mibri Messages postés 23 Date d'inscription vendredi 10 février 2012 Statut Membre Dernière intervention 28 janvier 2014
11 févr. 2012 à 17:20
Je contate là que vous n'etes pas tendre avec les débutants car ta réponse c'est pour moi du "javanais". Un peu d'humilité et de pédagogie. Nous sommes là pour vous demander de l'aide pas autre chose ça c'est pour le premièrement
deuxièmement je signale que je suis inscrit depuis hier apres midi . Mon premier contact effectivement le theme était pas le bon. J'ai eu aussitot une réaction "administrateur" qui m'a dirigé vers "BAR AIDE EXCEL" bien...
aujourd'hui je cherche le theme "BAR AIDE EXCEL" impossible de le trouver je vous avoue que c'est pas tres clair

MERCI TOUT DE MEME POUR TA REPONSE? JE VAIS RAMER
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2012 à 17:30
Si choisir la section appropriée est déjà du javanais, je crains pour tout le reste !
Si Lcase est également du javanais : ouvre ton aide VBA (il serait temps et ne confonds pas ce forum avec cet aspect). Quand tu as écrit "Lcase", tu l'as fait "au hasard" ?
Pour le reste de ce que je t'ai dit : où est le "javanais" ?
Alors, là, ami, oui, je vais ne plus être "tendre" du tout.
Nous avons tous été débutant, y compris moi-même, mais ces rudiments-là n'ont jamais donné lieu, de notre part, à une demande d'aide !
Je te souhaite bonne chance (mais en te retroussant les manches).

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2012 à 17:38
Et regarde ce que je lis, dans le "bout" montré :
'mettre en "case" la valeur de la cellule en minuscules

Alors maintenant : tu savais donc que LCase passait en minuscules la chaîne de caractères traitée.

En quoi le fait de savoir que la minuscule d'un chiffre est forcément ce même chiffre demande-t-il des connaissances en informatique ? ===>> Aucune !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
11 févr. 2012 à 17:51
Bonjour,

Je crains de ne pas avoir tout compris sur les noms des couleurs...

Ça ne serait pas:
Interior.Color = vbYellow (ou autres couleurs)?


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2012 à 17:57
Bonjour, acive

Par exemple, mais uniquement pour certaines couleurs.
Pour une autre ne faisant pas partie des constantes couleurs de VBA, il lui suffit de créer une constante, comme je le lui ai dit.

Crois-tu (je l'espère) qu'il aura enfin ouvert son aide VBA pour voir ce qu'y est ce "javanais" ?
Const (déclaration)
String (type de données)
Lcase (fonction
Il devra le faire, sauf s'il n'est venu ici que pour du copier/coller.




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
11 févr. 2012 à 18:05
D'après son code, tout laisse croire que c'est déjà du copier/coller, commenté comme ça:
For Each Cel In Target 
'pour chaque cellule de la plage modifiée 
Select Case LCase(Cel) 
'mettre en "case" la valeur de la cellule en minuscules 


Autre chose mibri, tu as vu la différence entre le (ton) code VB que j'ai posté et le tien?
A chaque fois que tu mets du code sur le forum utilise les balises destinées à cet effet (la troisième icône à partir de la droite, à coté des smileys).



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2012 à 18:15
Surtout que (et j'ai failli lui en faire la remarque dans son autre discussion) :
La boucle For est inutile ici, puisqu'il n'y aura qu'une cellule de modifiée dans l'évènement considéré



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
11 févr. 2012 à 18:35
Ah... j'ai même pas fait attention

De plus:
If Not Target.Column = 2 Then Exit Sub 
'Je ne vois pas pourquoi (pour unr meilleure compréension) il n'a pas fait:

If Target.Column = 2 Then
'Son code....
end if


mibri:
D'ailleurs quand tu dis:
Je voudrais obtenir la même chose sur la colonne 5
Une question, que lis-tu dans la ligne que je viens d'écrire:
If Target.Column = 2 Then


Tu vois qu'on ne t'a pas laisser "RAMER"?

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
11 févr. 2012 à 18:38
Pardon,
"laisser" correspond à "laissé"


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2012 à 18:59
Ah moins que (et là non plus, ce ne serait pas une carence en VBA, mais une carence de précision de l'expression, purement et simplement) :
Je voudrais obtenir la même chose sur la colonne 5 mais plus avec un chiffre mais avec un nom.

Ne voulait dire
"Je voudrais obtenir la même chose sur la colonne 5 mais en désignant cette colonne (et pas cette couleur) par sa lettre ou par le nom que je lui ai donné."
Voilà voilà . Faut se méfier de tout, maintenant, y compris de ce que l'on dit et qui n'est peut-être pas ce que l'on a voulu dire !
Alors ? On ne va pas faire de supposition et étaler encore un petit bout de code (peut-être pour rien), mais attendre qu'il se montre très précis (sa réponse) hein ...
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2012 à 20:25
Mais je dis des bêtises, car il ne peut, selon le titre (si le titre est bon !) :

un nom egale une couleur


que s'agir d'une constante se référant à une couleur (et alors : déjà dit plus haut)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 févr. 2012 à 05:18
Franchement, je vous trouve assez secs, messieurs...

l'utilisateur est poli,
pose une question relativement claire
donne son code en exemple, pas besoin de le deviner ni de lui soutirer
débute, de son propre aveu...

on me reprochera surement de filer du "tout cuit", mais ca coûte quoi ? tant que l'utilisateur s'implique à comprendre et adapter ce qu'on lui donne, et que la leçon est prise, pour moi, le boulot est fait ; bien fait.

Je pense que notre ami s'amuse à découvrir Excel.
Il a a sa disposition un classeur qui lui permet d'expérimenter les couleurs.

Le code actuel pourrait être :
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim R As Range
    For Each R in Target.Range
        If R.Column = 2 And IsNumeric(R.Value) Then
            If R.Value > 0 And R.Value <= 12 Then
                R.Interior.ColorIndex = Choose(R.Value, 4, 40, 34, 27, 34, 39, 24, 22, 7, 33, 38, 46)
            Else
                'si aucun des cas précédent 
                'couleur de fond en automatique 
                R.Interior.ColorIndex = xlNone 
        End If 
    Next R
End Sub


Le boucle ?
Je la laisse. L'evenement choisi est _Change.
J'ignore s'il se déclenche pour chaque cellule ou pour la plage de cellule impactées par exemple par un copier-coller, vous me suivez ?
dans le doute, autant blinder la chose.
Le test sur la colonne se trouvera donc en aval de la boucle, pour des raisons de logique.
Après un test sur le fait que le contenu soit bien dans la gamme de valeur souhaitée, on peut remplacer le Select case par un Choose.
C'est juste un exemple d'autre chose... Pas forcément le plus lisible (savoir rapidement quelle valeur est associée par exemple a la septième valeur...)
bref.

Notre ami semble vouloir faire de même, colonne 5, en tapant le nom d'une couleur.
taper "rouge", ornera donc le fond de notre cellule... de rouge, etc

Il suffit alors de remplacer notre "End If" précédant en :

    ElseIf R.Column = 5 Then
        Select Case lcase$(R.Value)
            Case "rouge": R.Interior.Color = vbRed
            Case "bleu": R.Interior.Color = RGB(0, 0, 255) '# vbBlue existe, mais ca montre comment personnaliser la chose...
            Case else
                R.interior.ColorIndex = clNone
        End Select
    End If 


acive avait d'ailleurs indiqué la propriété Color de Interior

je sais que parfois, les users sont imprécis, réclament plus qu'ils ne demandent, ne font pas l'effort, etc.
mais ils sont un peu le reflet de ce qu'on leur répond.
Je vous sais compétent, et ne vous parle pas en tant qu'admin ; je ne vous prend pas, non plus de haut, ce n'est pas mon genre. J'essaie de parler en faveur du site, de manière à aider au maximum notre ami. N'est-ce pas le but premier de CS ?
Je vous demande pas de changer fondamentalement, ucfoutu semble être un sacré râleur...
à coté de cela, il est très compétent, et entier !
quand un sujet l’intéresse, il s'accroche, fouine, teste et fournit bien souvent une bonne dose de travail, désintéressé.
Il y a aussi l'ucfoutu bougon, qui tire avant de poser les questions...
jmf, ça fait un paquet d'années qu'on se côtoies, j’apprécie ton implication, ton oeil parfois décalé. Laisse une chance aux débutants.

Renfield

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 févr. 2012 à 07:54
Bonjour, Renfield,
Tu as raison en ce qui concerne mon caractère bougon.
Je ne suis par contre pas certain de ce que ta réponse soit forcément celle attendue par cerberuspau.
relisons ensemble sa demande :
Je voudrais obtenir la même chose sur la colonne 5 mais plus avec un chiffre mais avec un nom.

suivi de :

....
Case "1"
Cel.Interior.ColorIndex = 4 
....


et avec ce titre :
un nom egale une couleur


Que veut-il ?
1) pouvoir saisir par exemple "rouge", comme tu le penses et ===>>
genre :
Case "rouge"
Cel.Interior.ColorIndex = vbRed
ou
2) pouvoir attribuer gris_clair à la place de 15 dans par exemple
Case "11"
Cel.Interior.ColorIndex = gris_clair


Si ce qu'il veut faire est ton interprétation, ta réponse est la bonne
Si c'est au contraire la seconde interprétation ? ===>> constantes à déclarer

Tu vois l'ambiguïté ?
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 févr. 2012 à 08:04
sans compter un aspect qui m'intriguerait beaucoup, dans l'hypothèse où tu aurais vu juste quant au but qu'il veut atteindre.
Quelles saisies différentes et "parlantes" devrait-il par exemple faire pour distinguer les couleurs (de colorindex, par exemple et entre autres) d'index 8,29,33,34 et 42 ?
Pire si toutes possibles à l'aide d'un long ou de RGB


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 févr. 2012 à 08:16
Et regarde, Renfield, ce qui ajoute encore au trouble de l'interprétation :
extrait de son code
Case "3"
Cel.Interior.ColorIndex = 34       '<<<<<<=========== dans le cas ou valeur saisie = 3
Case "4"
Cel.Interior.ColorIndex = 27
Case "5"
Cel.Interior.ColorIndex = 34    '<<<<<<<<<<<========= même couleur mais avec autre saisie 


Tu comprends mieux le trouble induit ?
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
mibri Messages postés 23 Date d'inscription vendredi 10 février 2012 Statut Membre Dernière intervention 28 janvier 2014
12 févr. 2012 à 10:47
bonjour,
Je reviens et je vous remercie de vous être occupé de mon problème car j'envisageais d'abandonner mon projet.......
Je connais suffisamment excel, pas du tout VBA.
j'ai accroché sur une formule qui ne pouvait se traduire que par une macro. J'ai recherché et copier coller puis adapté une macro qui me donne satisfaction.
Pour être peut être plus clair, j'ai aujourd'hui dans une colonne (2) des chiffres de 1 à 12 et lorsque je saisi un de ces chiffres j'obtiens une couleur.
Je recherche le même principe dans la colonne 5 avec un nom (virement, banque, etc....) lorsque je saisirai j'obtiendrais une couleur.
Mon erreur est de vous avoir transmis mon code sans explication, vous avez peut être pensé que je connaissais alors que je ne connais pas du tout. mais je suis en tain de m'y mettre
par avance merci
0
Rejoignez-nous