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