XL 2016 Empêcher la sélection/ListBox si ComboBox non rempli

Yoyo01000

XLDnaute Occasionnel
Bonjour le forum,

je sèche sur qq chose qui doit pourtant être très simple !

Ce que je veux réaliser :

Si aucune valeur (1 à 31) n'est sélectionnée dans un ComboBox (ComboBox1) alors il est impossible de venir cliquer dans une ListBox à MultiSelect (List_Effectif).

Cela fonctionne comme je veux mis à part qu'une fois la MsgBox affichée et validée, une sélection se fait quand même dans ma ListBox...

J'ai essayé divers morceaux de code pour éviter cela mais sans résultat...

Soit le code est mal écrit, soit il est mal placé, je ne sais pas :

VB:
Private Sub List_Effectif_Enter()

If ComboBox1.Value = "" Then
MsgBox "vide", vbExclamation
End If
Exit Sub

End Sub

FXL.jpg
 

Pièces jointes

  • BDL - Forum.xlsm
    114.4 KB · Affichages: 12

Yoyo01000

XLDnaute Occasionnel
Merci, au final, grâce à vous, j'ai trouvé !
J'avais pourtant essayé le .Enabled mais sans commencer par Me. :rolleyes:

Voici mon code, qui fonctionne presque :

VB:
Private Sub List_Effectif_Enter()

If ComboBox1.Value = "" Then
MsgBox "Merci de remplir les 4 champs précédents, avant les sélections de Noms-Prénoms dans cette liste !", vbExclamation
Me.List_Effectif.Enabled = False
End If

End Sub

Presque parce que je suis confronté à un nouveau problème :

Si une sélection est faite et s'affiche donc dans la ComboBox1, impossible de venir cliquer dans la ListBox "List_Effectif".


Normal me direz-vous, puisqu'Enable reste forcément sur False !

Je n'arrive pas à contourner ce problème, en ajoutant du code dans le code cité plus haut dans le message...

La fatigue du déconfinement professionnel doit y être pour qq chose o_O
 

jmfmarques

XLDnaute Accro
Bonjour
1) Ce n'est pas travailler proprement que de vouloir traiter la cause à partir de l'un de ses effets.
La propriété Value d'une combobox n'est QUE la chaîne de caractères présente dans sa zone d'édition et ne saurait permettre de déterminer avec assurance que tel ou tel autre (ou aucun) article y a été sélectionné
2) Si un article a été sélectionné, la seule chose qui permette de l'assurer sans faille est la propriété Listindex de la combobox (-1 = pas d'article sélectionné, et >=0 si article sélectionné)
3) jouer plutôt également avec la propriété listindex de la listbox :
exemple :
if combobox1.listindex = -1 then listbox1.Listindex = -1
fera que toute sélection dans la listbox serait annulée dans la foulée en cas de non sélection dans la combobox. et ne pas jouer de manière alourdissante avec la propriété enabled
 
Dernière édition:

Yoyo01000

XLDnaute Occasionnel
Bonjour
1) Ce n'est pas travailler proprement que de vouloir traiter la cause à partir de l'un de ses effets.
La propriété Value d'une combobox n'est QUE la chaîne de caractères présente dans sa zone d'édition et ne saurait permettre de déterminer avec assurance que tel ou tel autre (ou aucun) article y a été sélectionné
2) Si un article a été sélectionné, la seule chose qui permette de l'assurer sans faille est la propriété Listindex de la combobox (-1 = pas d'article sélectionné, et >=0 si article sélectionné)
3) jouer plutôt également avec la propriété listindex de la listbox :
exemple :
if combobox1.listindex = -1 then listbox1.Listindex = -1
fera que toute sélection dans la listbox serait annulée dans la foulée en cas de non sélection dans la combobox. et ne pas jouer de manière alourdissante avec la propriété enabled

Merci pour ce "détail" que je vais exécuter et garder sous la main :)
 

Yoyo01000

XLDnaute Occasionnel
Je ne sais plus comment fait-on pour mettre ce sujet en [Résolu] !?

J'ai quelques petites questions, aussi mais "hors-sujet" :
Quelle est la différence entre Me.Listbox1 et Listbox1 au début d'une ligne de code ?
Pourquoi, lors d'une déclaration de première variable, il s'agit très souvent de Dim i ?

Merci à vous :)
 

jmfmarques

XLDnaute Accro
Quelle est la différence entre Me.Listbox1 et Listbox1 au début d'une ligne de code
Que ce soit en début de ligne de code ou non n'a rien à voir. Me précise le conteneur. etant par défaut le conteneur actif, Me.Listbox1 ou Listbox1 sont le même objet du conteneur actif
Pourquoi, lors d'une déclaration de première variable, il s'agit très souvent de Dim i ?
Que préfères-tu ?
1) ouvrir ton aide interne VBA à la rubrique Dim, instruction et en lire toi-même le texte
ou
2) que l'un d'entre nous le fasse à ta place et vienne copier/coller ici le texte qui s'y trouve ?

:cool: