Comment affecter un repère visuel (couleur) a une ligne de listbox

Résolu
pythonrocheux - 30 mai 2013 à 16:01
 pythonrocheux - 1 juin 2013 à 01:29
Bonjour a tous,
Dans un formulaire, j'ai une listbox dont chaque ligne représente une référence de commande a livrer aux clients. Je souhaiterai faire apparaitre un indice de couleur au regard de chacune des lignes, qui serait vert si tout la commande est livrable et rouge dans le cas contraire.
Vu que je n'ai pas trouvé comment changer la couleur de la ligne dans la listbox, j'ai pensé placer un label en tête de chaque ligne dont je ferais changer la couleur de fond. Mais si ma listbox doit se dérouler, mes labels ne correspondent plus a la bonne ligne.
Avez vous un conseil ou une solution a m'apporter pour avancer dans ce sens.
Merci

18 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 mai 2013 à 16:57
Après réflexion et petits essais ===>> on peut y parvenir et sans labels, mais à quel prix ? ===>> en utilisant une "tapée" (au moins une dizaine) de fonctions de l'Api de Windows (et pas des plus simples) ===>> démesuré et hors de portée de la compréhension d'un débutant.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 mai 2013 à 16:34
Bonjour,
On ne le peut tout simplement pas avec une listbox.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 mai 2013 à 16:38
Ton idée de labels, outre le fait qu'il faudrait recalculer leur position à chaque déroulement de la listbox, serait de toutes manières démesurée (un label par ligne ...)


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
pythonrocheux
30 mai 2013 à 16:56
Merci ucfoutu. Je craignais la réponse. Vois tu un autre controle qui pourrait faire cela.
0

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

Posez votre question
pythonrocheux
30 mai 2013 à 17:04
Il y a un Nobel à prendre ...
merci
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
30 mai 2013 à 17:35
Bonjour,

Il y a peut-être une solution avec des CheckBox cochés à la place de de la couleur. Voici un exemple avec 9 lignes :

Private Sub UserForm_Initialize()
ListBox1.ListStyle = fmListStyleOption
ListBox1.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub CommandButton1_Click()
 For I = 0 To 9 Step 2
         ListBox1.Selected(I) = True
       Next I
End Sub


Le problème viendra certainement de la sélection à faire!
Je ne sais pas ce que va en penser ucfoutu que je salue

@+ Le Pivert
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 mai 2013 à 17:40
Bonjour, LePivert,
C'est une très bonne idée, que tu exprimes là .
Une autre serait deux listboxes (l'une pour les articles correspondant à un cas et l'autre pour les autres articles)


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 mai 2013 à 17:45
ou encore (puisque listbox de VBA) : une seule listbox multicolonne dont deux seraient alimentées en "décalé" selon que livrable ou non.
Reste à savoir si c'est possible (impossible si listbox liée à une plage, sauf à décaler également sur la plage)


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
pythonrocheux
30 mai 2013 à 18:04
Oui je vois. Je vais expérimenter ce que vous me proposez
Merci a vous 2.
Le Pivert, je vais voir ton code car je n'ai pas encore tout compris...
0
pythonrocheux
30 mai 2013 à 22:42
J'ai configuré ma listbox avec :
ListBox1.ListStyle = fmListStyleOption
ListBox1.MultiSelect = fmMultiSelectMulti
J'ai donc bien mes CheckBox a gauche de chaque ligne. Parfait!

Je n'ai pas précisé lors de ma demande initiale que je charge cette listBox avec la propriété List et que c'est une multi-colonnes.
Je ne sais pas si c'est lié, mais je n'arrive a forcer mes cases à cocher a True avec "selected". Je n'ai rien trouvé dans l'aide ExcelVBA sur la propriété "selected".
L'idée de Pivert me plaisait pourtant...
Merci
0
Utilisateur anonyme
31 mai 2013 à 03:16
Bonjour,
Changer la couleur ça va compliquer les choses à coup sur.

Par contre j'ai vu CETTE PAGE ça a l'air sympa...


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
31 mai 2013 à 07:15
Je n'ai pas précisé lors de ma demande initiale que je charge cette listBox avec la propriété List

C'est bien ce que je craignais...
Pour mémoire :
Reste à savoir si c'est possible (impossible si listbox liée à une plage, sauf à décaler également sur la plage)


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
31 mai 2013 à 07:32
Un truc à envisager, peut-être
- Ajouter une colonne à la plage de liaison (avant la colonne A, par exemple)
- Masquer cette colonne
- Y mettre un "X" (par formule ou par VBA) si commande livrable et rien si non livrable
- Modifier, bien sur, l'adresse de la plage liée (dans les propriété de la listbox) et apouter une colonne à la listbox.

De cette manière ; la colonne des "X" n'apparaîtra pas sur la feuille de calcul, mais apparaîtra sur la listbox.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
pythonrocheux
31 mai 2013 à 10:09
Merci active pour le lien, mais je crois que je retombe dans le même pb.
- Ajouter une colonne à la plage de liaison (avant la colonne A, par exemple)
- Masquer cette colonne
- Y mettre un "X" (par formule ou par VBA) si commande livrable et rien si non livrable
- Modifier, bien sur, l'adresse de la plage liée (dans les propriété de la listbox) et apouter une colonne à la listbox.

Oui ucfoutu, ce que tu me proposes là est ma solution de départ à un détail près.
TabArticCmdEnCours(Lig, 3) = Sgn(Sheets("CmdInterne").Cells(i + 2, 7)) ' retourne positif ou pas si dispo

je retourne -1 si stock vide et 1 si stock dispo.
Je souhaitai plus visuel!. Mais... bon on aura essayé
Merci a tous
Alain
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
31 mai 2013 à 15:23
J'ai trouvé une solution pour sélecter les items suivant ta feuille.
Exemple sur feuille2 les données sont dans la colonne A et tu mets des 1 dans la colonne B pour sélecter

Private Sub CommandButton1_Click()
Dim N As Integer
Dim i As Integer
N = "1"
For j = 0 To ListBox1.ListCount - 1
For i = 1 To Range("B65536").End(xlUp).Row
If Sheets("Feuil2").Cells(i, 2).Value = N Then
ListBox1.Selected(i - 1) = True
End If
Next i
Next j
End Sub
Private Sub UserForm_Initialize()
ListBox1.ListStyle = fmListStyleOption
ListBox1.MultiSelect = fmMultiSelectMulti
End Sub




@+ Le Pivert
0
Utilisateur anonyme
31 mai 2013 à 15:48
Pourquoi ne pas utiliser une listview?
Au lieu des 'acrobaties' qu'on apprête à faire...

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
pythonrocheux
31 mai 2013 à 18:38
Merci acive pour cette piste. C'est un controle que je n'ai jamais utilisé mais il n'est jamais trop tard pour bien faire. L'aide d'excel n'est très fournie sur le sujet mais je vais aller sur la toile.
0
pythonrocheux
1 juin 2013 à 01:29
J'ai trouvé cela :
http://www.vbfrance.com/codes/LISTVIEW-AVEC-ICONES_41467.aspx
Je vais travail le sujet...
0
Rejoignez-nous