Textbox active seulement si ligne sélectionnée dans listbox

Bonjour,

J'ai une listbox (Listbox1) basé sur un tableau avec 10 colonnes.

Lorsque je sélectionne une ligne, je peux modifier le(s) champ(s) désiré(s) dans une ou plusieurs des 10 textbox. 

Ce que je cherche à faire : 

j'ai mis mes 10 textbox en Enabled = False et je souhaiterais que les textbox passent en Enabled = True uniquement si une ligne est sélectionnée dans la listbox. 

C'est le genre de choses que j'ail'habitude de faire avec des OptionButton notamment mais là je sèche ... 

Qqun peut-il m'aider SVP ? Merci !


Windows / Chrome 111.0.0.0

7 réponses

  1. Bonjour 

    la mise en œuvre exacte dépend de quel VB tu utilises (VBA, VB6, VB.Net, ...)

    Dans tous il y a un événement qui signale le changement d'index de sélection de la listbox.

    Il te suffit de vérifier quand cet événement est déclenché que l'index n'est pas -1.


    0
    1. Bonjour Whismeril

      Langage VBA sur Excel pour le coup, déjà assez compliqué pour moi ! 

      Mon souci est que si je valide sans rien, ce sont mes colonnes de tableau qui passent en colonne "Colonne1, Colonne2, ..."

      Du coup ensuite pour mes TCD, ça me fout tout en l'air ! 

      Eventuellement je pourrais faire en sorte que si les champs restent vides, il ne se passe rien (éventuellement 1 MsgBox du style "vous n'avez rien modifié") puis on passe à l'UserForm suivant ... 

      Une idée ? Merci

      0
      1. Tu as demandé comment faire pour que des textbox passe de Enabled à Desabled en fonction d'une sélection ou non dans une listbox.

        Même sans préciser le type de VB cette question est suffisamment précise et contextualisée pour y apporter une réponse partielle.

        Réponse que je peux maintenant amender avec l'évènement à utiliser "Change" et la propriété "ListIndex"


        Mais maintenant, tu parles de tout autre chose, et cette fois pas assez de contexte pour répondre plus que te retourner tes propres hypothèses.

        En plus, Excel n'est pas mon point fort.


        0
        1. Ok mais je cherche juste un moyen de contourner le truc ... 

          J'ai essayé ça mais les textbox restent grisées 

          If IsNull(ListBox1.Value) Then Me.Controls("TextBox" & x).Enabled = False Else Me.Controls("TextBox" & x).Enabled = True
           

          0
          1. Tu as lu mes réponses ?

            En aucun cas je ne t'ai parlé de value.


            0
            1. Oui j'ai bien lu et pourtant en adaptant un peu, j'obtiens le résultat souhaité : 

              Private Sub ListBox1_Click()
              For x = 1 To 10If IsNull(ListBox1.Value) Then
              If IsNull(ListBox1.Value) Then
              Me.Controls("TextBox" & x).Value = False
              Else
              Me.Controls("TextBox" & x).Enabled = True
              End If
              Me.Controls("TextBox" & x).Value = Cells(Me.ListBox1.ListIndex + 5, x)
              Next x
              End Sub

              Edit : et dans un second temps, je réinitialise le formulaire en vidant les TextBox à chaque clic sur le CommandButton. 

              Donc c'est tout bon ;)

              Un grand merci quand-même

              0
              1. Ok,

                mais si tu cliques sur la.listbox tu vas forcément sélectionner une ligne, donc avec cet événement tester value est surplerfu, le simple fait de cliquer rend tes textbox enabled.

                Par contre, si par le code tu desselecionnes et bien les textbox passeront pas desabled, parce que l'événement Click ne sera pas appelé, alors que Change si.

                De plus tu peux optimiser un peu en évitant le if à chaque itération 

                If IsNull(ListBox1.Value) Then
                    Me.Controls("TextBox1").Enabled = False
                Else
                    Me.Controls("TextBox1").Enabled = True
                End If
                
                For x = 2 To 10
                    Me.Controls("TextBox" & x).Value = TextBox1.Enabled
                
                    Me.Controls("TextBox" & x).Value = Cells(Me.ListBox1.ListIndex + 5, x)
                Next x
                


                ou encore plus, simple en affectant directement le test à la propriété 

                For x = 1 To 10
                    Me.Controls("TextBox" & x).Value = (Not IsNull(ListBox1.Value))
                
                    Me.Controls("TextBox" & x).Value = Cells(Me.ListBox1.ListIndex + 5, x)
                Next x


                PS1, pour poster un code, il faut choisir "basic" dans la liste des langages 

                PS2, pense à indenter ton code c'est beaucoup plus facile à relire, même pour toi, pour chercher tes bigs


                0