- Textbox active seulement si ligne sélectionnée dans listbox
- Partager photos en ligne - Guide
- Mètre en ligne - Guide
- Aller à la ligne excel - Guide
- Apparaitre hors ligne instagram - Guide
- Formulaire en ligne de meta - Guide
7 réponses
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.
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
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.
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionOui 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
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