Comment contrôler si la sélection d'une listbox est vide???...
3 réponses
Christophe B.
Bonjour,
Voilà, faisons au plus simple...
J'ai une listbox dans un userform. Après avoir cliqué OK j'arrive à afficher
la sélection dans une boite de dialogue. Mais comment prévenir si rien n'a
été sélectionné??? Comment revenir au userform quand la sélection est vide et
afficher un msg du type "Vous devez sélectionner qqch"?
Bonjour : strSelection=ListBox1.Value If strSelection="" then .... A adapter suivant le cas Cordialement. Daniel "Christophe B." <Christophe a écrit dans le message de news:
Bonjour,
Voilà, faisons au plus simple... J'ai une listbox dans un userform. Après avoir cliqué OK j'arrive à afficher la sélection dans une boite de dialogue. Mais comment prévenir si rien n'a été sélectionné??? Comment revenir au userform quand la sélection est vide et afficher un msg du type "Vous devez sélectionner qqch"?
Bonjour :
strSelection=ListBox1.Value
If strSelection="" then ....
A adapter suivant le cas
Cordialement.
Daniel
"Christophe B." <Christophe B.@discussions.microsoft.com> a écrit dans le
message de news: D170B5CC-9B30-4F22-8CF3-5A074374C613@microsoft.com...
Bonjour,
Voilà, faisons au plus simple...
J'ai une listbox dans un userform. Après avoir cliqué OK j'arrive à
afficher
la sélection dans une boite de dialogue. Mais comment prévenir si rien n'a
été sélectionné??? Comment revenir au userform quand la sélection est vide
et
afficher un msg du type "Vous devez sélectionner qqch"?
Bonjour : strSelection=ListBox1.Value If strSelection="" then .... A adapter suivant le cas Cordialement. Daniel "Christophe B." <Christophe a écrit dans le message de news:
Bonjour,
Voilà, faisons au plus simple... J'ai une listbox dans un userform. Après avoir cliqué OK j'arrive à afficher la sélection dans une boite de dialogue. Mais comment prévenir si rien n'a été sélectionné??? Comment revenir au userform quand la sélection est vide et afficher un msg du type "Vous devez sélectionner qqch"?
Michel Gaboly
Bonjour,
Si ta ListBox n'accepe qu'une seule sélection (situation par défaut), la propriété ListIndex renvoie -1 si rien n'est sélectionné, et le numéro de ligne sélectionnée - 1 sinon (0, pour le 1er élément, 1 pour le deuxième, ...).
Il faut donc tester si ListIndex est à - 1.
Confronté à ce genre de truc depuis longtemps, j'ai développé (initialement avec l'ancien langage macro !) une fonction "Controle", qui permet d'effectuer ce genre de test, d'afficher un message passé comme argument et éventuellement (pour les TextBox par exemple) de placer le curseur à l'endroit où un problème a été détecté.
La fonction Controle est commentée en détail ici :
http://www.gaboly.com/VBA/FonctionControle.html
Le fonctionnement est le suivant (BOK étant le nom du bouton "OK", LInfos celui du ListBox, qui par hypothèse permet de choisir une ville, et TNom un TextBox permettant d'entrer un nom) :
Private Sub BOK_Click() ControleSaisie If Resultat Then ReportDonnees Unload Me End If End Sub
Private Sub ControleSaisie() Resultat = Controle(LInfos.ListIndex = -1, "la ville.") ' Controle des autres éléments éventuels ' If Resultat Then Resultat = Controle(TNom = "", "le nom", TNom) ' If Resultat Then Resultat = Controle(... End Sub
Private Sub ReportDonnees() ' Ton traitement End Sub
Voici le code de la fonction :
Dans un module Standard (NB ne pas oublier de declarer Resultat comme Public) :
Option Explicit Public Resultat As Boolean
Function Controle(ByVal Expression As Boolean, Optional ComplTexte, Optional CellActive, Optional TexteMessage, Optional VideoInverse As Boolean, Optional ControleUnique) If Not IsMissing(ControleUnique) Then If ControleUnique Then Exit Function End If End If ' Test si anomalie If Expression Then If IsMissing(TexteMessage) Then TexteMessage = "Vous n'avez pas indiqué " & ComplTexte End If MsgBox TexteMessage, 48, "Information manquante ou anormale." ' MAJ Curseur If Not IsMissing(CellActive) Then CellActive.SetFocus End If End If ' Sélection de l'info à modifier If VideoInverse And Not IsMissing(CellActive) Then CellActive.SelStart = 0 CellActive.SelLength = Len(CellActive) End If ' MAJ Contrôle déjà effectué If Not IsMissing(ControleUnique) And Not Expression Then ControleUnique = True End If ' Résultat du contrôle If Expression Then Controle = False Else Controle = True End Function
NB - En cas de sélection multiple possible, il faut faire une boucle avec la propriété Selected(i), et adapter le test.
Bonjour,
Voilà, faisons au plus simple... J'ai une listbox dans un userform. Après avoir cliqué OK j'arrive à afficher la sélection dans une boite de dialogue. Mais comment prévenir si rien n'a été sélectionné??? Comment revenir au userform quand la sélection est vide et afficher un msg du type "Vous devez sélectionner qqch"?
-- Cordialement,
Michel Gaboly www.gaboly.com
Bonjour,
Si ta ListBox n'accepe qu'une seule sélection (situation par défaut), la
propriété ListIndex renvoie -1 si rien n'est sélectionné, et le numéro
de ligne sélectionnée - 1 sinon (0, pour le 1er élément, 1 pour le
deuxième, ...).
Il faut donc tester si ListIndex est à - 1.
Confronté à ce genre de truc depuis longtemps, j'ai développé
(initialement avec l'ancien langage macro !) une fonction "Controle",
qui permet d'effectuer ce genre de test, d'afficher un message passé
comme argument et éventuellement (pour les TextBox par exemple) de
placer le curseur à l'endroit où un problème a été détecté.
La fonction Controle est commentée en détail ici :
http://www.gaboly.com/VBA/FonctionControle.html
Le fonctionnement est le suivant (BOK étant le nom du bouton "OK",
LInfos celui du ListBox, qui par hypothèse permet de choisir une ville,
et TNom un TextBox permettant d'entrer un nom) :
Private Sub BOK_Click()
ControleSaisie
If Resultat Then
ReportDonnees
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(LInfos.ListIndex = -1, "la ville.")
' Controle des autres éléments éventuels
' If Resultat Then Resultat = Controle(TNom = "", "le nom", TNom)
' If Resultat Then Resultat = Controle(...
End Sub
Private Sub ReportDonnees()
' Ton traitement
End Sub
Voici le code de la fonction :
Dans un module Standard (NB ne pas oublier de declarer Resultat comme
Public) :
Option Explicit
Public Resultat As Boolean
Function Controle(ByVal Expression As Boolean, Optional ComplTexte,
Optional CellActive, Optional TexteMessage, Optional VideoInverse As
Boolean, Optional ControleUnique)
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas indiqué " & ComplTexte
End If
MsgBox TexteMessage, 48, "Information manquante ou anormale."
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
End If
End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive) Then
CellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not Expression Then
ControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle = True
End Function
NB - En cas de sélection multiple possible, il faut faire une boucle
avec la propriété Selected(i), et adapter le test.
Bonjour,
Voilà, faisons au plus simple...
J'ai une listbox dans un userform. Après avoir cliqué OK j'arrive à afficher
la sélection dans une boite de dialogue. Mais comment prévenir si rien n'a
été sélectionné??? Comment revenir au userform quand la sélection est vide et
afficher un msg du type "Vous devez sélectionner qqch"?
Si ta ListBox n'accepe qu'une seule sélection (situation par défaut), la propriété ListIndex renvoie -1 si rien n'est sélectionné, et le numéro de ligne sélectionnée - 1 sinon (0, pour le 1er élément, 1 pour le deuxième, ...).
Il faut donc tester si ListIndex est à - 1.
Confronté à ce genre de truc depuis longtemps, j'ai développé (initialement avec l'ancien langage macro !) une fonction "Controle", qui permet d'effectuer ce genre de test, d'afficher un message passé comme argument et éventuellement (pour les TextBox par exemple) de placer le curseur à l'endroit où un problème a été détecté.
La fonction Controle est commentée en détail ici :
http://www.gaboly.com/VBA/FonctionControle.html
Le fonctionnement est le suivant (BOK étant le nom du bouton "OK", LInfos celui du ListBox, qui par hypothèse permet de choisir une ville, et TNom un TextBox permettant d'entrer un nom) :
Private Sub BOK_Click() ControleSaisie If Resultat Then ReportDonnees Unload Me End If End Sub
Private Sub ControleSaisie() Resultat = Controle(LInfos.ListIndex = -1, "la ville.") ' Controle des autres éléments éventuels ' If Resultat Then Resultat = Controle(TNom = "", "le nom", TNom) ' If Resultat Then Resultat = Controle(... End Sub
Private Sub ReportDonnees() ' Ton traitement End Sub
Voici le code de la fonction :
Dans un module Standard (NB ne pas oublier de declarer Resultat comme Public) :
Option Explicit Public Resultat As Boolean
Function Controle(ByVal Expression As Boolean, Optional ComplTexte, Optional CellActive, Optional TexteMessage, Optional VideoInverse As Boolean, Optional ControleUnique) If Not IsMissing(ControleUnique) Then If ControleUnique Then Exit Function End If End If ' Test si anomalie If Expression Then If IsMissing(TexteMessage) Then TexteMessage = "Vous n'avez pas indiqué " & ComplTexte End If MsgBox TexteMessage, 48, "Information manquante ou anormale." ' MAJ Curseur If Not IsMissing(CellActive) Then CellActive.SetFocus End If End If ' Sélection de l'info à modifier If VideoInverse And Not IsMissing(CellActive) Then CellActive.SelStart = 0 CellActive.SelLength = Len(CellActive) End If ' MAJ Contrôle déjà effectué If Not IsMissing(ControleUnique) And Not Expression Then ControleUnique = True End If ' Résultat du contrôle If Expression Then Controle = False Else Controle = True End Function
NB - En cas de sélection multiple possible, il faut faire une boucle avec la propriété Selected(i), et adapter le test.
Bonjour,
Voilà, faisons au plus simple... J'ai une listbox dans un userform. Après avoir cliqué OK j'arrive à afficher la sélection dans une boite de dialogue. Mais comment prévenir si rien n'a été sélectionné??? Comment revenir au userform quand la sélection est vide et afficher un msg du type "Vous devez sélectionner qqch"?