[ Résolu ]Texte de plusieurs couleurs dans une liste déroulante

al1.2loin

XLDnaute Occasionnel
Bjr, j'aurais voulu savoir si il était possible de mettre différentes couleurs dans le champ du texte d'une liste déroulante, exemple dans ma liste déroulante j'ai Renault Clio HDI , je voudrais Renault en bleu et HDI en rouge, comment cela est il possible de le faire. ci joint fichier.
 

Pièces jointes

  • Texte_Couleurs.xlsm
    48.9 KB · Affichages: 77
Dernière édition:

david84

XLDnaute Barbatruc
Re : Texte de plusieurs couleurs dans une liste déroulante

Bonjour,
placer le code dans le module de la feuille 2 :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$4" Then
  Dim Car_deb As Byte, Car_fin As Byte
  With Target
    .Font.ColorIndex = 1
    .Font.Bold = False
    Car_deb = InStr(1, .Value, "_") - 1
    Car_fin = InStrRev(.Value, "!")
    .Characters(1, Car_deb).Font.FontStyle = "Bold"
    .Characters(1, Car_deb).Font.ColorIndex = 5
    .Characters(Car_fin, 7).Font.FontStyle = "Bold"
    .Characters(Car_fin, 7).Font.ColorIndex = 5
  End With
End If
End Sub
A+
 
Dernière édition:

al1.2loin

XLDnaute Occasionnel
Re : Texte de plusieurs couleurs dans une liste déroulante

Bjr, j'ai bien recopié ton code dans le module de ma feuille, mais comme j'ai déjà un code qui sert pour la même cellule pour mon menu déroulant semi automatique il me met " Erreur de compilation : Nom ambigu détecté : Worksheet_Change.

Private Sub Worksheet_Activate()
If Day(Date) < 16 Then
Range("L4") = "Prestations Du 01 au 15"
Range("L4").Interior.Color = 15261110
Else
Range("L4") = "Prestations Du 16 au 31"
Range("L4").Interior.Color = 49407
End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$U$16" Then
temp = Split(Target, "!")
Application.Goto Reference:=Worksheets(temp(0)).Range(temp(1))
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$U$16" Then
Dim Car_deb As Byte, Car_fin As Byte
With Target
.Font.ColorIndex = 1
.Font.Bold = False
Car_deb = InStr(1, .Value, "_") - 1
Car_fin = InStrRev(.Value, "!")
.Characters(1, Car_deb).Font.FontStyle = "Bold"
.Characters(1, Car_deb).Font.ColorIndex = 5
.Characters(Car_fin, 7).Font.FontStyle = "Bold"
.Characters(Car_fin, 7).Font.ColorIndex = 5
End With
End If
End Sub
 

david84

XLDnaute Barbatruc
Re : Texte de plusieurs couleurs dans une liste déroulante

Code:
Bjr, j'ai bien recopié ton code dans le module de ma feuille, mais comme j'ai déjà un code qui sert pour la même cellule pour mon menu déroulant semi automatique il me met " Erreur de compilation : Nom ambigu détecté : Worksheet_Change.
C'est normal puisque tu te retrouves avec 2 Sub Worksheet_Change et que tu ne peux en avoir qu'une. Il te faut donc recopier le corps de l'une (ce qu'il y a entre Private Sub Worksheet_Change(ByVal Target As Range) et End Sub) dans l'autre.
A+
 

david84

XLDnaute Barbatruc
Re : Texte de plusieurs couleurs dans une liste déroulante

Si tu veux te mettre au VBA il faut essayer de comprendre le code.
Donc pour t'aider tu peux utiliser la touche F1 qui appelle l'aide d'Excel.
Voilà ce qui y est dit concernant la propriété Characters d'un range :
Référence du développeur Excel
Range.Characters, propriété
Cette propriété renvoie un objet Characters qui représente une plage de caractères dans le texte de l'objet. Vous pouvez utiliser l'objet Characters pour mettre en forme les caractères d'une chaîne de texte.
Syntaxe

expression.Characters(Start, Length)

expression Variable qui représente un objet Range.

Paramètres

Nom Obligatoire/Facultatif Type de données Description
Start Facultatif Variante Premier caractère à renvoyer. Si vous ne spécifiez pas cet argument ou s'il a la valeur 1, cette propriété renvoie une plage de caractères débutant par le premier caractère.
Length Facultatif Variante Nombre de caractères à renvoyer. Si vous ne spécifiez pas cet argument, cette propriété renvoie le reste de la chaîne (tout ce qui suit le caractère de rang Début).

Remarques


L'objet Characters n'est pas une collection.


Exemple
Cet exemple montre comment mettre en gras le troisième caractère de la cellule A1 de la feuille « Sheet1 ».

Visual Basic pour Applications
With Worksheets("Sheet1").Range("A1")
.Value = "abcdefg"
.Characters(3, 1).Font.Bold = True
End With
Donc en sachant que :
- le début (argument 1 ou Start) t'es donné par la variable car_deb
- le nombre de caractères (argument 2 ou length) peut être calculé en utilisant car_fin-car_deb-1
- que l'index de la propriété Font.ColorIndex correspondant au blanc est 2
tu devrais y arriver tout seul.
A+
 

al1.2loin

XLDnaute Occasionnel
Re : Texte de plusieurs couleurs dans une liste déroulante

Bjr,merci a toi de m'avoir répondu, mais je n'ai rien compris à ce que tu ma dit, je n'y connais rien en VBA, ce que je voulais c'est d’insérer dans le code déjà existant mettre par exemple le code qui correspond au mot du milieu. 3NANTA_(en bleu)40c_21W_147M(en blanc)!AF_962__(en rouge)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$U$16" Then
Dim Car_deb As Byte, Car_fin As Byte
With Target
.Font.ColorIndex = 1
.Font.Bold = False
Car_deb = InStr(1, .Value, "_") - 1
Car_fin = InStrRev(.Value, "!")
.Characters(1, Car_deb).Font.FontStyle = "Bold"
.Characters(1, Car_deb).Font.ColorIndex = 5
.Characters(Car_fin, 7).Font.FontStyle = "Bold"
.Characters(Car_fin, 7).Font.ColorIndex = 5
End With
End If
End Sub
 

Pièces jointes

  • Texte_Couleurs(2).xlsm
    18.1 KB · Affichages: 51

Staple1600

XLDnaute Barbatruc
Re : Texte de plusieurs couleurs dans une liste déroulante

Bonjour à tous

al1.2loin
Bjr,merci a toi de m'avoir répondu, mais je n'ai rien compris à ce que tu ma dit, je n'y connais rien en VBA,
Il suffit de savoir lire et cela la quasi totalité des adultes savent le faire, nocive en VBA ou pas ;)
Donc relis posément les précédents conseils de david84 (que je salue au passage) et n'hésites pas à abuser de la touche F1 quand tu utilises Excel. ;)
 

al1.2loin

XLDnaute Occasionnel
Re : Texte de plusieurs couleurs dans une liste déroulante

Bonjour, l' expert je ne pense pas qu'en abusant de la touche F1 comme vous dites, vous avez appris toutes ces lignes de codes que vous insérer, comme si vous tapiez une lettre à la machine, je ne demande qu'a comprendre, et à quoi correspondent toutes ces lignes de caractères que vous tapés pour effectuer une action dans le langage VBA, je voulais tous simplement que l'on me rajoute dans la liste de code que David84 m'avais si gentiment exécuté le texte du milieu en couleur blanc.Je comprend que le forum n'est pas un assistanat, ce n'est pas de la mauvaise volonté, mais David84 aurait pu me répondre comme vous, allez voir la touche F1, mais il m'a donner de son temps pour pouvoir résoudre ma question, si vous ne voulez pas me rendre ce service tant pis on en reste la.
Bonne journée à tous.
 

Staple1600

XLDnaute Barbatruc
Re : Texte de plusieurs couleurs dans une liste déroulante

Re


Je te conseillais juste de relire les conseils de david84 et notamment l'extrait de l'aide VBA.
Et ensuite de suivre son dernier conseil
Donc en sachant que :
- le début (argument 1 ou Start) t'es donné par la variable car_deb
- le nombre de caractères (argument 2 ou length) peut être calculé en utilisant car_fin-car_deb-1
- que l'index de la propriété Font.ColorIndex correspondant au blanc est 2
tu devrais y arriver tout seul.

Maintenant tu es libre d'y voir autre chose et de prendre la mouche ;)

PS1: normalement la présence d'emoticones dans un message est censé éviter les malentendus.
Faut croire que je l'ai mal choisi ;)

PS2: La plupart des membres du forum qui répondent essaient de donner des conseils au demandeur pour qu'il ait la satisfaction de progresser par lui-même dans la maitrise de VBA.
En général, on évite de livrer des solutions clés en main, on suggère des pistes, on poste des bouts de code.
Et on espère que le demandeur fera l'effort de les tester, de mettre les mains dans le cambouis.
Qu'il reviendra poser des questions mais qu'il n'attendra pas seulement qu'on lui poste le code VBA déjà tout prêt.
 
Dernière édition:

al1.2loin

XLDnaute Occasionnel
Re : Texte de plusieurs couleurs dans une liste déroulante

Bjr, et désolé d'avoir agis de la sorte, mais je n'ai pas pris la mouche, mais si j'avais vos connaissance aussi poussé en excel, et que je tombe sur le fil de la question, je me ferai un honneur de répondre à la personne en difficulté, même s'il fallait que je passe toute une journée entière pour lui fabriquer un tableau ou un code à rallonge, je pense que l'on oublie vite, et que vous étiez comme moi à vos tous début sur excel, et rencontrer des personnes qui vous tendent la main. si je vous disais que j'ai mis plus d'un mois pour comprendre comment faire un menu déroulant, ce n'est pas en me mettent des bouts de phrases auxquelles je n'y comprend rien que je vais comprendre tout du jour au lendemain.
 

Staple1600

XLDnaute Barbatruc
Re : Texte de plusieurs couleurs dans une liste déroulante

Re

Bon donc passons au coloriage
En me basant sur le code david84 et sur ton fichier joint, j'ai juste fait ces modifs
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$4" Then
Dim Car_deb As Byte, Car_fin As Byte
With Target
.Font.ColorIndex = 1
.Font.Bold = False
Car_deb = InStr(1, .Value, "_") - 1
Car_fin = InStrRev(.Value, "!")
.Characters(1, Car_deb).Font.FontStyle = "Bold"
.Characters(1, Car_deb).Font.ColorIndex = 5
.Characters(Car_deb + 2, Car_fin).Font.FontStyle = "Bold"
.Characters(Car_deb + 2, Car_fin).Font.ColorIndex = 2
.Characters(Car_fin, 9 ^ 9).Font.FontStyle = "Bold"
.Characters(Car_fin, 9 ^ 9).Font.ColorIndex = 3
End With
End If
End Sub

1) Est-ce là le résultat souhaité ?
2) Si oui as-tu compris le fonctionnement de la chose ?
 

david84

XLDnaute Barbatruc
Re : Texte de plusieurs couleurs dans une liste déroulante

Re, salut JM,
je reprends l'explication et à toi de concrétiser : pour modifier les caractéristiques de caractères entrés dans une cellule ou un ensemble de cellules (Target en l'occurrence désigne la cellule où tu veux que l'événement se déclenche) tu as à ta disposition une propriété appelée Characters.
Code:
expression.Characters(Début, Longueur)
Cette propriété a besoin pour fonctionner qu'on lui indique :
- Début = l'emplacement du 1er caractère à partir duquel agir
- Longueur=le nombre de caractères concernés par l'action voulue
Donc si tu veux mettre en blanc à partir du caractère n° 6 inclus jusqu'au caractère n° 7 tu indiques
Code:
Target.Characters(6, 2)
Si tu veux que cette chaîne de caractères apparaisse en couleur tu agis donc sur la police de caractère (Font en anglais) en lui indiquant quel index de couleur (ColorIndex en anglais) tu veux :
Code:
Target.Characters(Début , Longueur).Font.ColorIndex = n° d'index choisi
Pour le blanc l'index de couleur est 2.
Dans le code que je t'ai fourni :
- j'utilise car_deb pour rechercher l'emplacement du "_" dans ta chaîne de caractères
- j'utilise car_fin pour rechercher l'emplacement du "!" dans ta chaîne de caractères
Le 1er argument de
Code:
expression.Characters(Début, Longueur)
est donc car_deb
Le 2ème argument de
Code:
expression.Characters(Début, Longueur)
est donc car_fin-car_deb-1
L'index de couleur est le 2 donc tu n'as plus qu'à placer dans
Code:
.Characters(Début , Longueur).Font.ColorIndex = n° d'index choisi
par les valeurs indiquées.
Ensuite tu insères ce morceau de code dans la macro en le plaçant juste avant le End With (attention au "." placé devant Characters)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$4" Then
  Dim Car_deb As Byte, Car_fin As Byte
  With Target
    .Font.ColorIndex = 1
    .Font.Bold = False
    Car_deb = InStr(1, .Value, "_") - 1
    Car_fin = InStrRev(.Value, "!")
    .Characters(1, Car_deb).Font.FontStyle = "Bold"
    .Characters(1, Car_deb).Font.ColorIndex = 5
    .Characters(Car_fin, 7).Font.FontStyle = "Bold"
    .Characters(Car_fin, Len(Target.Value)).Font.ColorIndex = 5

    'dans la ligne ci-dessous remplacer Début, Longueur et n° d'index choisi par les valeurs réelles
    .Characters(Début , Longueur).Font.ColorIndex = n° d'index choisi

  End With
End If
End Sub

Dernière chose : pour que l'événement change se déclenche il faut que la cellule indiquée corresponde bien à celle où se trouve le menu déroulant
Code:
Target.Address = "$U$16"
. Or tu indiques la cellule U16 ce qui ne correspond pas à l'endroit où se trouve le menu déroulant de ton fichier.
A+
 

Staple1600

XLDnaute Barbatruc
Re : Texte de plusieurs couleurs dans une liste déroulante

Bonsoir david84

Merci pour les explications détaillées donc agréable à lire ;)

PS: Ma ligne de code pour le blanc réservera-t-elle des surprises?
Car je vois que tu as pris une autre piste ;)

al1.2loin
Maintenant que tu as tout ce qu'il te faut pour mettre cela en musique ;)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 169
Messages
2 085 925
Membres
103 043
dernier inscrit
nouha nj