XL 2013 Action à créer suite sélection d'une ligne dans listbox

agourn

XLDnaute Junior
Bonjour,
dans une listebox je souhaite créer une action tout simplement à chaque clic sur une ligne. L'action se résume en l'activation d'un bouton de commande, la modification de son texte, etc. Et à chaque ligne des propriétés différentes du bouton.
Rien de compliqué côté bouton. Le code suivant ne produit rien.

VB:
Private Sub malistbox_Click()
With Me.malistbox
        For i = 0 To .ListCount - 1
     
                                         If .Selected(i) = True Then

                                    Me.cbutton1.Visible = True

                                    Select Case .List(.ListIndex, 0)
                                
                                                Case 1                                              

                                                Me.cbutton1.Caption = "ABC"
                                             
                                                Case 2
                                              
                                                Me.cbutton1.Caption = "CDE"

                                         ' etc                                     

                                     End Select    
                                Else
                                    Me.cbutton1.Visible = False
                     End If

            Next i

       End With

    End Sub

merci
 
Solution
Regarde ce que fait ceci :
VB:
Private Sub malistbox_Click()
  TOTO = ""
  CBUTTON1.Visible = False
  Select Case malistbox.List(malistbox.ListIndex)
    Case 1
      TOTO = "ABC"
    Case 2
      TOTO = "CDE"
    ' etc ...
  End Select
  If TOTO <> "" Then
    CBUTTON1.Visible = True
    CBUTTON1.Caption = TOTO
  End If
End Sub
quant à :
Sauf que j'ai des case où case est suivi de plusieurs valeurs ex. case 1, 3, 4, 5.
oui ? et ? VBA comprend parfaitement par exemple
case 1,5,8

jmfmarques

XLDnaute Accro
Bonjour
Plusieurs choses :
1) tu ne précises pas si cette listbox est sur une feuille de calcul ou sur un userform.
Or, il se trouve que l'évènement click d'une listbox multiselect réagit (ou non) différemment dans un cas et dans l'autre !
2) ton code fonctionnerait sur un userform et une listbox non multiselect mais regarde-le donc : -->>
A moins que le dernier article parcouru par ta boucle soit sélectionné, ta clause else cachera in fine ton commandbutton :cool:
En outre : le "dernier qui a parlé" (le dernier sélectionné) aura raison par rapport à tous les autres !
Il y a là très manifestement une carence de logique (informatique ou non).
3) on peut s'interroger sur le caractère adroit de tout reparcourir en boucle à chaque clic. :oops:

EDIT : pour résumer : tu ferais sans doute bien de nous préciser :
- sur quoi (feuille de calcul ou userform) est placée cette listbox
- si elle est vraiment multiselect et, dans ce cas, ce que tu souhaites faire exactement
ou si, finalement, elle n'est pas multiselect.
 
Dernière édition:

jmfmarques

XLDnaute Accro
Regarde ce que fait ceci :
VB:
Private Sub malistbox_Click()
  TOTO = ""
  CBUTTON1.Visible = False
  Select Case malistbox.List(malistbox.ListIndex)
    Case 1
      TOTO = "ABC"
    Case 2
      TOTO = "CDE"
    ' etc ...
  End Select
  If TOTO <> "" Then
    CBUTTON1.Visible = True
    CBUTTON1.Caption = TOTO
  End If
End Sub
quant à :
Sauf que j'ai des case où case est suivi de plusieurs valeurs ex. case 1, 3, 4, 5.
oui ? et ? VBA comprend parfaitement par exemple
case 1,5,8
 

agourn

XLDnaute Junior
Regarde ce que fait ceci :
VB:
Private Sub malistbox_Click()
  TOTO = ""
  CBUTTON1.Visible = False
  Select Case malistbox.List(malistbox.ListIndex)
    Case 1
      TOTO = "ABC"
    Case 2
      TOTO = "CDE"
    ' etc ...
  End Select
  If TOTO <> "" Then
    CBUTTON1.Visible = True
    CBUTTON1.Caption = TOTO
  End If
End Sub
quant à :

oui ? et ? VBA comprend parfaitement par exemple
case 1,5,8
oui OK pour ça, je me suis juste mal exprimé. C'est ce que j'utilise.
 

agourn

XLDnaute Junior
Parfait jmfmarques
ça fonctionne. Merci de ton aide. J'avais mis la boucle en pensant que l'incrément i me permet d'avoir Selected(i) alors que Listindex suffit pour avoir la valeur d'une ligne Listbox.

par contre, puisque on a évoqué le Multiselect, j'ai des cas où ce mode serait bien utile. En effet, si je veux pour certaines valeurs de Listbox j'affiche un bouton différent : par exemple pour case 1 ==> CBUTTON1.Caption="ABC" et pour case 2,6,7 ==> un autre bouton CBUTTON2.Captoin="DEF", etc.
faisable ?
merci
 

jmfmarques

XLDnaute Accro
par contre, puisque on a évoqué le Multiselect, j'ai des cas où ce mode serait bien utile. En effet, si je veux pour certaines valeurs de Listbox j'affiche un bouton différent : par exemple pour case 1 ==> CBUTTON1.Caption="ABC" et pour case 2,6,7 ==> un autre bouton CBUTTON2.Captoin="DEF", etc.
faisable ?
autre problématique = autre discussion
Je ne suis personnellement jamais un projet, mais une (et une seule) difficulté parfaitement isolée et exposée de ce projet. ;)
 

agourn

XLDnaute Junior
La réponse " oui OK pour ça, je me suis juste mal exprimé. C'est ce que j'utilise. "
c'était pour ta dernière remarque : "oui ? et ? VBA comprend parfaitement par exemple
case 1,5,8"


ensuite j'ai testé ta proposition et là j'ai répondu OK ça marche.
tu me suis ?
 

patricktoulon

XLDnaute Barbatruc
Bonjour un petit exemple vite fait de bouton dépendant du value de la listbox
VB:
Private Sub malistbox_Click()
    With CBUTTON1
         TOTO = malistbox.Value
        .Caption = TOTO
        .Visible = .Caption <> ""
    End With
End Sub

Private Sub UserForm_Activate()
    malistbox.List = Array("", "ABC", "CDE", "EFG", "GHI", "IJK")
End Sub

demo4.gif
 

agourn

XLDnaute Junior
Bonjour un petit exemple vite fait de bouton dépendant du value de la listbox
VB:
Private Sub malistbox_Click()
    With CBUTTON1
         TOTO = malistbox.Value
        .Caption = TOTO
        .Visible = .Caption <> ""
    End With
End Sub

Private Sub UserForm_Activate()
    malistbox.List = Array("", "ABC", "CDE", "EFG", "GHI", "IJK")
End Sub

Regarde la pièce jointe 1069436
super merci patricktoulon
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib