IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Userform : Contrôle d'une listbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Doctorant
    Inscrit en
    Juin 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2014
    Messages : 23
    Par défaut Userform : Contrôle d'une listbox
    Bonjour à tous,

    j'ai une listbox à sélection multiple et j'aurai aimé pouvoir la contrôler quand je valide mon formulaire pour être sûre que la personne qui remplit le formulaire réponde bien à ma question.

    J'ai essayé avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IsNull(lbETICS.Value) = True
    mais ça ne fonctionne pas bien puisque le formulaire ne voit pas quand il y a une ou plusieurs sélections dans la listbox ?

    Est-ce que qqn sait comment je dois faire ?

    J'espère avoir été claire.

    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Par défaut
    Salut,

    Tu cherches à vérifier si l'utilisateur à bien fait un choix dans la listbox avant de poursuivre le code ?
    Il ne faudrait pas mettre une condition ?

    Tu peux essayer les différent cas suivant, en espérant que ça fonctionne et que c'est ce que tu cherchais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If IsNull(lbETICS.Value) = True Then Exist Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If IsNull(lbETICS.Value) = True Then
       MsgBox "Vous devez faire un choix parmi la liste pour poursuivre"
       Exit Sub ' Sort de la Sub
    End if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If lbETICS.Value = "" 
       MsgBox "Vous devez faire un choix parmi la liste pour poursuivre"
       Exit Sub ' Sort de la Sub
    End if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If lbETICS.Value = Null
       MsgBox "Vous devez faire un choix parmi la liste pour poursuivre"
       Exit Sub ' Sort de la Sub
    End if
    A+

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour vérifier quelles sont les lignes sélectionnées dans un ListBox avec choix multiple, il faut vérifier la propriété Selected(Elem). S'il la propriété est à True cela signifie que la ligne a été sélectionnée
    Exemple (Le contrôle ListBox est nommé LstBox)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim Elem As Byte
     For Elem = 0 To Me.lstBox.ListCount - 1
      If lstBox.Selected(Elem) = True Then
      ' Code
     Next
    Avec sélection simple il faut tester la propriété ListIndex. Sa valeur est à -1 s'il n'y a pas de sélection.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre averti
    Femme Profil pro
    Doctorant
    Inscrit en
    Juin 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2014
    Messages : 23
    Par défaut
    Bonjour,

    merci pour vos réponses.

    J'ai essayé vos différentes solutions, et aucune n'a fonctionné.


    Sachant que j'avais utilisée celle ci mais qu'elle ne fonctionne pas sur une sélection multiple !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If IsNull(lbETICS.Value) = True Then
       MsgBox "Vous devez faire un choix parmi la liste pour poursuivre"
       Exit Sub ' Sort de la Sub
    End if

    D'autres idées ?

    Merci
    Bonne journée

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai essayé vos différentes solutions, et aucune n'a fonctionné.
    C'est que tu as mal essayé ou mal lu.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Femme Profil pro
    Doctorant
    Inscrit en
    Juin 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2014
    Messages : 23
    Par défaut
    J'ai essayé votre solution comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim Elem As Byte
        For Elem = 0 To Me.lbETICS.ListCount - 1
        If lbETICS.Selected(Elem) = True Then
            MsgBox "Le champ ETICS est obligatoire"
            Me.mprisque.Value = 0
            Me.lbETICS.SetFocus
            Exit Sub
        End If
        Next
    Et ça n'a pas fonctionné ! Peut être une erreur dans mon code.

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    sauf que cette procédure est faite à l'envers, la voici dans le bon sens, True vers False
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim Elem As Byte
        For Elem = 0 To Me.lbETICS.ListCount - 1
        If lbETICS.Selected(Elem) = False Then
            MsgBox "Le champ ETICS est obligatoire"
            Me.mprisque.Value = 0
            Me.lbETICS.SetFocus
            Exit Sub
        End If
        Next
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre averti
    Femme Profil pro
    Doctorant
    Inscrit en
    Juin 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2014
    Messages : 23
    Par défaut
    Merci pour cette réponse rapide.

    Effectivement ça marche en revanche ça contrôle jusqu'à ce que toute la liste soit sélectionnée. Ca ne voit pas qu'en seulement il y a 1 ou 2 éléments de la liste sélectionnés.

  9. #9
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    c'était juste pour te montrer, c'est évident si tu regardes le code, maintenant fais attention à ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Elem As Byte
        For Elem = 0 To Me.lbETICS.ListCount - 1
        If lbETICS.Selected(Elem) = True Then
            'ce que tu dois faire quand sélectionné
        End If
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  10. #10
    Membre averti
    Femme Profil pro
    Doctorant
    Inscrit en
    Juin 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2014
    Messages : 23
    Par défaut
    Bonjour,

    je suis désolée, je n'ai pas compris ce que tu voulais dire dans ce message.

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme je l'ai expliqué dans cette réponse http://www.developpez.net/forums/d14...x/#post7852336 et que Dominique te le rappelle.
    Pour vérifier quelles sont les lignes sélectionnées dans un ListBox avec choix multiple, il faut vérifier la propriété Selected(Elem). Si la propriété est à True cela signifie que la ligne a été sélectionnée
    Ce n'est pas suffisamment clair ?

    Voici un exemple simple d'une procédure événementielle où lorsque l'on clique sur le bouton OK (Contrôle CommandButton nommé cmdOK, une boucle contrôle si la propriété Selected(x) de l'objet ListBox (ici nommé lstBox) est égal à True. Dans ce cas là on écrit sur la colonne 4 "**-**" et on met les colonnes 1 à 3 de la ligne sélectionnée en rouge.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Option Explicit
    Public monResultat As String
    Dim tblSrce As String, rng As Range
    Private Sub cmdOk_Click()
     Dim Elem As Byte
     If Me.lstBox.ListCount = 0 Then Exit Sub
     For Elem = 0 To Me.lstBox.ListCount - 1
      If Me.lstBox.Selected(Elem) = True Then ' Teste si la ligne du ListBox a été sélectionnée
       With rng
       .Range(.Cells(Elem, 1), .Cells(Elem, .Columns.count)).Interior.Color = vbRed
       .Cells(Elem + 1, .Columns.count + 1) = "** x **"
       End With
      End If
     Next
     Unload Me
    End Sub
    Procédure d'initialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub UserForm_Initialize()
     Set rng = shtDb.Range("A1").CurrentRegion ' Utilisation du CodeName de la feuille
     ' Assigne à la variable rng la zone DATA excluant ainsi les étiquettes de colonnes
     With rng: Set rng = .Offset(1).Resize(.Rows.count - 1, 3): End With
     With rng: .ClearFormats: .Offset(, .Columns.count).Resize(, 1).Clear: End With
     ' Définir les propriétés du ListBox nommé lstBox
     With Me
      With .lstBox ' Propriété de lstBox
      .RowSource = rng.Address(external:=True)
      .ColumnCount = rng.Columns.count: .ColumnHeads = True: .ColumnWidths = "120;200;180"
      .MultiSelect = fmMultiSelectMulti ' Permet la multi-sélection dans lstBox
      End With
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  12. #12
    Membre averti
    Femme Profil pro
    Doctorant
    Inscrit en
    Juin 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2014
    Messages : 23
    Par défaut
    Bonjour,

    je suis désolée mais je débute et donc oui je ne comprends pas forcément tout par manque de temps pour me former correctement à vba notamment.


    En tout cas, en réessayant ce matin la solution suivante à fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim Elem As Byte
        For Elem = 0 To Me.lbETICS.ListCount - 1
        If lbETICS.Selected(Elem) = False Then
            MsgBox "Le champ ETICS est obligatoire"
            Me.mprisque.Value = 0
            Me.lbETICS.SetFocus
            Exit Sub
        End If
        Next
    Et ensuite ça s'est mis à bugger de nouveau et à vouloir que je sélectionne tout.

    J'ai également utilisé cette solution pour des listbox sans sélection multiple et idem ça a fonctionné au début et puis bug et ça veut que je sélectionne tout.

    Je ne comprends pas trop à quoi c'est dû !

    Une idée ?

    Merci et bonne journée

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Et ensuite ça s'est mis à bugger de nouveau et à vouloir que je sélectionne tout.
    Cela signifie quoi ?
    Il faudrait être précis si tu veux de l'aide.
    "ça s'est mis à bugger de nouveau". Cela bogue ok mais sur quelle ligne et quel message reçois-tu ?
    "et à vouloir que je sélectionne tout". Tu reçois un message du programme ou de VBA te demandant de tout sélectionner ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/08/2008, 09h59
  2. UserForm : contrôle pour choisir une image à insérer
    Par VicomteRaoul dans le forum VBA Word
    Réponses: 1
    Dernier message: 12/07/2008, 11h13
  3. Intercepter un click sur un Contrôle dans une UserForm
    Par RedColibri dans le forum VBA Word
    Réponses: 2
    Dernier message: 11/07/2008, 11h35
  4. [VBA-E] Liaison entre une listbox et un userform
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 25/02/2007, 17h32
  5. [VBA-E] Supprimer un contrôle d'une userform
    Par cwain dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2006, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo