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

meyscal -  
 Utilisateur anonyme -

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

A voir également:

7 réponses

Utilisateur anonyme
 

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
meyscal
 

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
Utilisateur anonyme
 

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
meyscal
 

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

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

Posez votre question
Utilisateur anonyme
 

Tu as lu mes réponses ?

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


0
meyscal
 

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
Utilisateur anonyme
 

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