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 :

ListBox, ListIndex toujours égal à 0? [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Par défaut ListBox, ListIndex toujours égal à 0?
    Bonjour,

    J'ai un petit soucis avec la gestion de listindex sur une listbox. Je souhaite savoir si l'utilisateur a sélectionné au moins 1 ligne...

    Dans un formulaire, j'ai une listbox qui est renseignée ainsi:
    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
    17
    18
    19
     
        ' Récupérer le tableau (Nom, Prenom, NLicence, Class. S., Class. D, Class. DM)
        Dim oTblNomPrenomLicence() As Variant
        oTblNomPrenomLicence = fctTblNomPrenomLicence
        ' Remplir la listbox
        With Me.lstJoueurs
            .columnCount = 3
            '.List = Application.WorksheetFunction.Transpose(oTblNomPrenomLicence)
            .MultiSelect = fmMultiSelectMulti
     
            For i = LBound(oTblNomPrenomLicence, 2) To UBound(oTblNomPrenomLicence, 2)
                .AddItem
                .List(.ListCount - 1, 0) = oTblNomPrenomLicence(1, i) ' Nom
                .List(.ListCount - 1, 1) = oTblNomPrenomLicence(2, i) ' Prénom
                .List(.ListCount - 1, 2) = oTblNomPrenomLicence(3, i) ' Licence
            Next i
     
            .Selected(0) = True ' Sélectionner la 1er joueur
        End With
    A côté de cette listbox, j'ai placé 2 boutons (Aucun, Tous):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub btJoueursAucun_Click()
     
        ' Désélectionner tous les joueurs
        For i = 0 To Me.lstJoueurs.ListCount - 1
            Me.lstJoueurs.Selected(i) = False
        Next i
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub btJoueursTous_Click()
     
        ' Sélectionner tous les joueurs
        For i = 0 To Me.lstJoueurs.ListCount - 1
            Me.lstJoueurs.Selected(i) = True
        Next i
     
    End Sub
    Sur la validation du formulaire, je contrôle que l'utilisateur a sélectionné au moins une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        If Me.lstJoueurs.ListIndex = -1 Then
                MsgBox "Veuillez sélectionner un ou plusieurs joueurs.", vbExclamation, "Erreur: Aucune sélection"
            Exit Sub
        End If
    Seulement, voici le résultat:
    - si je valide le formulaire sans aucune autre action -> Me.lstJoueurs.ListIndex = 0 (Normal j'ai sélectionné la 1ère ligne au remplissage de la listbox)
    - si je clique sur le bouton Tous -> Me.lstJoueurs.ListIndex = 0
    - si je clique sur le bouton Aucun -> Toutes les lignes sont désélectionnées mais Me.lstJoueurs.ListIndex = 0
    - si je clique sur la 1ère ligne -> Toutes les lignes sont désélectionnées mais Me.lstJoueurs.ListIndex = 0

    Pourquoi listindex est-il toujours à 0?
    L'aide VBA indique pourtant ListBox.ListIndex, ListBox.Selected

    Merci de m'avoir lu!

    Gdal

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    Bonsoir
    tu a 4 fenêtres code dans ton post je te suggère d'analysera le2 et le 4

    il faut mettre a -1 pour aucun
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub btJoueursAucun_Click()
     Me.lstJoueurs.ListIndex = -1
     End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub btJoueursTous_Click()
     
        ' Sélectionner tous les joueurs
        For i = 0 To Me.lstJoueurs.ListCount - 1
            Me.lstJoueurs.Selected(i) = True
        Next i
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub UserForm_Activate() ' ou Initialize
    'ton remplissage de listbox ici
    Me.lstJoueurs.ListIndex = -1
    End Sub
    après List index renvoie 0 si le 1er ou plusieurs items sont sélectionnés
    il te faut passer par un boucle pour le test

    tu pourrais très bien faire une toute petite fonction pour ca
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Par défaut
    Salut,

    CEla confirme ce que je pensais...
    Voici la fonction qui contrôle que la listbox à au moins une sélection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Function fctLstBxSelection(lst As Control) As Boolean
     
        For i = 0 To lst.ListCount - 1
     
            If lst.Selected(i) = True Then
                fctLstBxSelection = True
                Exit Function
            End If
     
        Next i
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        If fctLstBxSelection(Me.lstJournees) = True Then
            MsgBox "Sélection Ok"
        Else
            MsgBox "Sélection NOk"
        End If
    Gdal

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    oui attention aux fuite mémoire quand meme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Function fctLstBxSelection(lst As Control) As Boolean
     
        For i = 0 To lst.ListCount - 1
     
            If lst.Selected(i) = True Then
                fctLstBxSelection = True
                Exit for
            End If
     
        Next i
     
    End Function
    quand tu exit la fonction ca risque de te renvoyer un boolean (false)
    fait plutôt un exit for

    mais si tu avais suivi mes intervention avec le -1 tu aurais pu faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Function fctLstBxSelection(lst As Control) As Boolean
    fctLstBxSelection=lst.listindex<>-1
    end function 
    explication a nouveau !!

    quand tu a 1 ou plusieurs item de sélectionnés List index te renvoie 0 pour plusieurs ou l'index sélectionné si il y a qu'un item sélectionné
    il est donc raisonnable de panser que si tu met bien le -1 au départ dans ta list
    si c'est -1 il y a rien si il y 0 ou X c'est oui
    c'est pas compliqué
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [XL-2010] ListBox ListIndex--> TextBox
    Par beaumontlfx dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/01/2015, 00h06
  2. [AJAX] readyState toujours égal à 0
    Par angelmn dans le forum AJAX
    Réponses: 4
    Dernier message: 05/11/2014, 07h47
  3. [AC-2007] Valeur de listbox.ListIndex dans une liste à choix multiples
    Par Cinesra dans le forum VBA Access
    Réponses: 12
    Dernier message: 12/10/2011, 15h56
  4. Listbox SetCurSel toujours en premiere position
    Par firejocker dans le forum MFC
    Réponses: 1
    Dernier message: 14/06/2007, 16h29
  5. [Javascript] scrollLeft toujours égal à zéro
    Par lenoil dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/02/2007, 16h35

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