compter le nombre item selectionné dans une lsitbox

Rem$

XLDnaute Junior
bonjour à tous,

je cherche la commande qui me permettra de compter le nombre d'items selectionnés dans une listbox multiselection.

D'avance merci

Rem$
 

porcinet82

XLDnaute Barbatruc
Re : compter le nombre item selectionné dans une lsitbox

Salut,

Il y a peut etre plus simple mais avec une boucle de ce genre ca devrait le faire :
Code:
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        cpt = cpt + 1
    End If
Next i
MsgBox "nb d'item selectionnés : " & cpt

@+

Edition : Salut Michel, pas rafraichit...
 

Rem$

XLDnaute Junior
Re : compter le nombre item selectionné dans une lsitbox

Bonjour,

en fait je voudrais compter le nombre d'items selectionnés apres les avoir selectionnés et pas compter le nombre d'items de ma listbox de manière à faire un contrôle pour être sur qu'au moins 1 choix soit fait dans ma listbox.
En sachant qu'elle est en multiselection....

d'avance merci
 

porcinet82

XLDnaute Barbatruc
Re : compter le nombre item selectionné dans une lsitbox

Salut,

Et bien il te suffit de modifier un peu mon code ou celui de Michel de la manière suivante :
Code:
 [LEFT]For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        cpt = cpt + 1
    End If
Next i
If cpt<2 Then 
     MsgBox "Veuillez choisir au moins 2 choix !!!"
Else
     [COLOR=seagreen]'le reste de ton code[/COLOR]
End if[/LEFT]

@+
 

Rem$

XLDnaute Junior
Re : compter le nombre item selectionné dans une lsitbox

Merci pour cette réponse mais il me reste un petit probleme de positionnement de mon controle
Voici mon bout de code pour le controle de remplissage des champs

Private Function SaisieOk() As Byte

Dim Ctrl As Control


SaisieOk = 1
If Trim(TextBox18.Text) = "" Then Exit Function
SaisieOk = 2
If Trim(TextBox6.Text) = "" Then Exit Function
SaisieOk = 3
If Trim(TextBox7.Text) = "" Then Exit Function
SaisieOk = 4
If ComboBox5.ListIndex < 0 Then Exit Function
SaisieOk = 5
If Trim(TextBox10.Text) = "" Then Exit Function
SaisieOk = 6
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
cpt = cpt + 1
End If
Next i
If cpt < 1 Then Exit Function
SaisieOk = 7
If ComboBox3.ListIndex < 0 Then Exit Function
End Function

en fonction de l'étape qui passe ou pas un msgbox previent du champs non rempli
If SaisieOk = 7 Then
Else
MsgBox "Saisie incomplète !" & vbLf & "(" & Choose(SaisieOk, "Date", "Société", "N° client", "DOR", "Affaire suivi par", "Nature du probleme", "Secteur concerné") & ")", vbOKOnly, "Erreur...."
End If

Mon probleme réside dans le fait que le controle me redonne toujours que la listbox ne contient aucun items selectionnés alors quand fait il y en a bien....je pense que je ne sors pas de ma boucle de contrôle.... suis-je dans le vrai ?? je n'arrive pas en m'en sortir!!!!

d'avance merci

Rem$
 

porcinet82

XLDnaute Barbatruc
Re : compter le nombre item selectionné dans une lsitbox

re,

Je ne suis pas sur de bien comprendre ce que fais ta fonction, donc je dirai peut etre un truc de ce genre, mais sans grande garantit :
Code:
Private Function SaisieOk() As Byte
Dim Ctrl As Control, i%, cpt%
SaisieOk = 1
If Trim(TextBox18.Text) = "" Then Exit Function
SaisieOk = 2
If Trim(TextBox6.Text) = "" Then Exit Function
SaisieOk = 3
If Trim(TextBox7.Text) = "" Then Exit Function
SaisieOk = 4
If ComboBox5.ListIndex < 0 Then Exit Function
SaisieOk = 5
If Trim(TextBox10.Text) = "" Then Exit Function
SaisieOk = 6
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        cpt = cpt + 1
    End If
Next i
If cpt < 1 Then Exit Function
SaisieOk = 7
If ComboBox3.ListIndex < 0 Then Exit Function
'en fonction de l'étape qui passe ou pas un msgbox previent du champs non rempli
If Not SaisieOk = 7 Then MsgBox "Saisie incomplète !" & vbLf & "(" & Choose(SaisieOk, "Date", "Société", "N° client", "DOR", "Affaire suivi par", "Nature du probleme", "Secteur concerné") & ")", vbOKOnly, "Erreur...."
End Function

Si ca ne fonctionne pas, met un exemple de ton fichier, je pense que ce sera plus parlant.

@+
 

Rem$

XLDnaute Junior
Re : compter le nombre item selectionné dans une lsitbox

Je suis désolé mais le fichier même tres épuré dépasse le poids maxi

je vais donc essayé de détailler le plus simplement possible

j'ai plusieurs champs dont je veux contrôler le remplissage.
Le controle se fait avant la recopie des données saisie dans ces champs vers une feuille (via bouton)

ma fonction 'saisieok' me permet d'effectuer ce contrôle
mon problème se situe au niveau du contrôle de la listbox multisélection
j'ai besoin qu'au moins 1 valeur soit cochée pour que le choix soit ok.

Ma question est comment intégrer à ma fonction saisieok le contrôle d'une listbox multicritère ? il faut choisir au mions 1 item.....

Private Function SaisieOk() As Byte

Dim Ctrl As Control


SaisieOk = 1
If Trim(TextBox18.Text) = "" Then Exit Function
SaisieOk = 2
If Trim(TextBox6.Text) = "" Then Exit Function
SaisieOk = 3
If Trim(TextBox7.Text) = "" Then Exit Function
SaisieOk = 4
If ComboBox5.ListIndex < 0 Then Exit Function
SaisieOk = 5
If Trim(TextBox10.Text) = "" Then Exit Function
SaisieOk = 6
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
cpt = cpt + 1
End If
Next i
If cpt < 1 Then Exit Function
SaisieOk = 7
If ComboBox3.ListIndex < 0 Then Exit Function
End Function



et puis le msgbox est pour prévenir de l'endroit ou il manque une saisie (plus lisible pour les utilisateurs)

Dans le code que j'ai posté , le contrôle saisieok=7 se fait bien puisque les données sont bien recopier dans la feuille si mon combo suivant est rempli mais il reste sur le message de non remplissage de la listbox

je n'y comprend rien

d'avance merci
 

Pierrot93

XLDnaute Barbatruc
Re : compter le nombre item selectionné dans une lsitbox

Bonjour Rem$, Romain, Michel

petite reflexion comme ca au passage, le code de ta fonction est bien placé dans le module de ton USF, sinon il faut sans doute rajouter le nom de l'USF dans la synthaxe, enfin peut être....

Code:
If UserForm1.ListBox1.Selected(i) Then

bon après midi
@+
 

Rem$

XLDnaute Junior
Re : compter le nombre item selectionné dans une lsitbox

oui il est bien placé dans mon USF mais je vais le rajouter....
ou encore essayer de placer la fonction saisieok dans un module et ajouter la reference de l'USF dans le code on verra bien....

mais cela fait maintenant 2 j que jene vois pas le bout de ce pb

merci de ton aide

rem$
 

porcinet82

XLDnaute Barbatruc
Re : compter le nombre item selectionné dans une lsitbox

re, Salut Pierrot,

Oula, je ne devais etre réveillé tout a l'heure, ma proposition ne risquait pas de fonctionner. Essaye de la manière suivante pour voir si cela fonctionne, le code n'est pas terrible, mais c'est juste pour savoir si je suis dans le vrai... Si c'est le cas, on modifiera après.
Code:
Private Function SaisieOk() As Byte
Dim Ctrl As Control
SaisieOk = 1
If Trim(TextBox18.Text) = "" Then GoTo fin
SaisieOk = 2
If Trim(TextBox6.Text) = "" Then GoTo fin
SaisieOk = 3
If Trim(TextBox7.Text) = "" Then GoTo fin
SaisieOk = 4
If ComboBox5.ListIndex < 0 Then GoTo fin
SaisieOk = 5
If Trim(TextBox10.Text) = "" Then GoTo fin
SaisieOk = 6
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        cpt = cpt + 1
    End If
Next i
If cpt < 1 Then GoTo fin
SaisieOk = 7
If ComboBox3.ListIndex < 0 Then GoTo fin
fin:
MsgBox "Saisie incomplète ! Veuillez remplir la champ n° " & SaisieOk
End Function

@+
 

Rem$

XLDnaute Junior
Re : compter le nombre item selectionné dans une lsitbox

je suis désolé mais le probleme reste le même... il reste toujours en attente de la coche d'un item de la listbox pourtant ils sont cochés... et lorsque je remplie mon dernier combo, j'ai de nouveau le message pour le champs6 (la liste) puis comme le combo est rempli, je peux recopier les données ....

c'est vraiment comme si la macro ne voyait pas que des items sont selectionnés dans la list?????

c'est très étrange..... d'autant plus que le fait de ne pas voir les items cochés permet tout de même de continuer l'action sans sortir de la fonction ???

je te replace mon code

d'avance merci



Private Function SaisieOk() As Byte

Dim Ctrl As Control
SaisieOk = 1
If Trim(TextBox18.Text) = "" Then GoTo fin
SaisieOk = 2
If Trim(TextBox6.Text) = "" Then GoTo fin
SaisieOk = 3
If Trim(TextBox7.Text) = "" Then GoTo fin
SaisieOk = 4
If ComboBox5.ListIndex < 0 Then GoTo fin
SaisieOk = 5
If Trim(TextBox10.Text) = "" Then GoTo fin
SaisieOk = 6
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
cpt = cpt + 1
End If
Next i
If cpt < 1 Then GoTo fin
SaisieOk = 7
If ComboBox3.ListIndex < 0 Then GoTo fin
fin:
MsgBox "Saisie incomplète !" & vbLf & "(" & Choose(SaisieOk, "Date", "Société", "N° client", "DOR", "Affaire suivi par", "Nature du probleme", "Secteur concerné") & ")", vbOKOnly, "Erreur..."
End Function
 

porcinet82

XLDnaute Barbatruc
Re : compter le nombre item selectionné dans une lsitbox

re,

Je te propose un exemple dans la pièce jointe qui a l'air de fcontionner, il y a surement plus simple, mais je te laisse voir comment adapter tout ca a ton fichier.

@+
 

Pièces jointes

  • exemple.xls
    26.5 KB · Affichages: 77
  • exemple.xls
    26.5 KB · Affichages: 75
  • exemple.xls
    26.5 KB · Affichages: 75

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 866
Membres
103 979
dernier inscrit
imed