Récupérer plusiurs choix à partir d'une listeBox
Bonjour,
tout est dans le titre ou presque ...
J'ai une listBox nommée LB_type qui permet de sélectionner à la souris plusieurs Items mais je n'arrive pas à récupérer dans la feuille ces choix.
le classeur joint permettra sans doute d'expliquer mon propos.
merci d'avance
@ bientôt
cordialement
Marc
Bonjour,
proposition de correction de ta procédure cmdvalider
Private Sub CmbValider_Click()
'regroupez toutes vos déclarations de variables en tête de procédure
Dim LignTablo
Dim i, T
Dim DateRegl
Dim Message As String
'Dim Montant As Currency
'Dim Réglé As String
'Dim Activités As String
'Dim i As Integer
'pour choisir l'option button
Dim Ctrl As Control
For Each Ctrl In Frame_lieu.Controls
If Ctrl.Object.Value = True Then
MsgBox Ctrl.Object.Caption
' .Value Ctrl.Object.Caption
Exit For
End If
Next Ctrl
'-----------------------------
'On commence par vérifier que toutes les données ont bien été entrées
'si ce n'est pas le cas on interrompt cette procédure de validation
'pour que l'utilisateur complète
'les différents messages d'erreurs sont affichés dans un label
For i = 1 To 6
T = T + Controls("OB_" & i).Value
Next i
If T = 0 Then
MsgBox ("vous devez choisir un niveau de difficulté.")
Exit Sub
End If
If TB_nom = "" Then Message = "Vous devez saisir le nom." & Chr(13)
If TB_prenom = "" Then Message = Message & "Vous devez saisir le prénom." & vbLf
'nb il faut concaténer au fur et à mesure les différents messages pour les afficher seulement à la fin.
'chr(13) ou vbLf (c'est pareil) ajoute un retour à la ligne pour que ce soit plus lisible
If TB_temps = "" Then Message = Message & "Merci d'indiquer la durée" & Chr(13)
'If Tb_deplacement = "" Then Message = Message & "Indiquez le temps" & Chr(13)
'If OptM = False And OptF = False Then Message = Message & "Indiquez le sexe de l'adhérent" & Chr(13)
'If TB_type = "" Then Message = Message & "Précisez l'action" & Chr(13)
'If CboSport.ListIndex = -1 Then Message = Message & "Vous devez choisir un sport" & Chr(13)
'If ListActivité.ListIndex = -1 Then Message = Message & "Choisissez une activité" & Chr(13)
' si il y a un message d'erreur on démasque l'étiquette LblErreurs et on affiche le message
If Message <> "" Then
LblErreurs.Visible = True
LblErreurs.Caption = Message
Exit Sub
End If
'si il y avait des messages d'erreur la macro a été interrompue par l'instruction exit sub
'sinon on continue la validation
'traitement des données
'If OptM = True Then
'Sexe = "M"
'Else
' Sexe = "F"
'End If
With Me.LB_type
For i = 0 To .ListCount - 1
If .Selected(i) Then Activités = Activités & LB_type.List(i) & ", "
'selected(i) renvoie vrai ou faux.
'Vrai étant la valeur par défaut il est inutile de préciser = true
Next i
End With
Activités = Left(Activités, Len(Activités) - 2)
'on écrit maintenant les données dans la feuille, dans le tableau nommé ici "base"
'Quand on crée le tableau, il contient toujours une ligne vide sous la ligne d'entête
'si le tableau n'a qu'une ligne et
'Si cette ligne est vide on la remplit, sinon on en ajoute une nouvelle
'****Le premier bloc if/end if ci-dessous est une précaution :
'si vous effacez manuellement ou par macro l'ensemble des lignes du tableau
'même si visuellement il semble contenir une ligne vide
'le compte de lignes renvoie 0 et on ne peut pas sélectionner cette première ligne
'le fait d'entrer puis d'effacer une donnée quelconque juste en dessous de l'entête
'corrige ce problème
For Each q In Mask.Frame_lieu.Controls
If q.Value = True Then Lieu = Trim(q.Caption)
Next q
With Sheets("recap").ListObjects("Tableau4")
If .ListRows.Count = 0 Then
Range("Tableau4[[#Headers],[Nom]]").Offset(1, 0) = 1
Range("Tableau4[[#Headers],[Nom]]").Offset(1, 0) = ""
End If
''''''''''''''''''''''''''''Range("D" & num).Value = Toq
If .ListRows.Count = 1 And .ListRows(1).Range.Cells(1, 1) = "" Then
Set LignTablo = Sheets("recap").ListObjects("Tableau4").ListRows(1)
Else
Set LignTablo = Range("Tableau4").ListObject.ListRows.Add(AlwaysInsert:=True)
End If
End With
With LignTablo.Range
.Cells(1, 1) = TB_nom
.Cells(1, 2) = TB_prenom
.Cells(1, 4) = Lieu
'.Cells(1, 4) = CInt(TxtAge) 'on transforme en nombre (Integer), c'est plus logique
'.Cells(1, 5) = Catego
.Cells(1, 6) = CDate(Me.TB_temps)
.Cells(1, 7) = CDate(Me.Tb_deplacement)
.Cells(1, 8) = CDate(Me.TB_date)
'Range("b" & Nlign) = Frame_lieu
.Cells(1, 9) = Activités
' .Cells(1, 10) = Montant
'.Cells(1, 11) = Réglé
'.Cells(1, 12) = DateRegl
End With
'on décharge le formulaire pour qu'il soit de nouveau initialisé lors de son prochain affichage
Unload Mask
End Submerci beaucoup
bonne journée
@+
Marc