Ecrire dans la cellule a côté d'une listbox multiple
Bonjour,
je bloque depuis plusieurs heures sur un problème qui doit être tout bête mais je ne trouve pas...
J'aimerai lorsque je crée une listbox à choix multiple que lorsque je clique sur le bouton de commande qui terminera mon formulaire s’inscrive à côté des cellules correspondantes à la sélection des listbox le mot "oui".
Pouvez-vous m'aider à trouver la manière de faire?
Merci d'avance...
Bonjour,
Private Sub CommandButton1_Click()
Dim TblS(), i%
With ListBox1
ReDim TblS(.ListCount - 1, 0)
For i = 0 To .ListCount - 1
If .Selected(i) Then TblS(i, 0) = "Oui"
Next i
Worksheets("Feuil1").Range("B2").Resize(.ListCount - 1).Value = TblS
End With
End SubCordialement.
Bonjour,
merci ça fonctionne, mais... est il possible si je relance l'usf de conserver les oui qui se sont mis avant?
Car là les "oui" sont réinitialisés à chaque fois...
Merci d'avance.
Bonjour,
Pour que tu puisses gérer complètement tes "Oui", le mieux est que la liste s'affiche à l'ouverture du Userform avec sélection des noms correspondant aux "Oui". Tu peux ainsi en ajouter ou en supprimer et valider la situation mise à jour...
On va donc procéder à une petite révision de ta configuration :
1) Nommer la liste avec un nom dynamique, qui sera toujours ajusté à la dimension de la liste, et évitera de liste une grande quantité d'éléments vides.
Nom : Liste
Réfère à :
=DECALER(Feuil1!$A$2;;;NBVAL(Feuil1!$A:$A)-1)2) Le Userform s'ouvre avec la ListBox alimentée par la liste et une en-tête de colonne, selon tes choix. Ces propriétés par défaut sont fixes et ne varieront pas à chaque ouverture du Userform. Elles n'ont donc rien à faire dans une procédure Initialize et doivent être définies une fois pour toutes dans la fenêtre de propriétés.
On définit donc les propriétés de ListBox1 : ColumnHeads =True et RowSource =Liste.
Liste étant un nom dynamique, les variations de la liste seront donc automatiquement prises en compte à chaque ouverture du Userform.
3) Il manquait un bouton pour ouvrir le Userform, on en place un dans la feuille, ActiveX, d'où code dans le Module de la feuille :
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub4) Nouvelle procédure Initialize pour opérer avant ouverture la sélection des items correspondant aux "Oui" (qui eux pourront varier d'une ouverture à l'autre) :
Private Sub UserForm_Initialize()
Dim i%
With [Liste]
For i = 1 To .Rows.Count
If .Cells(i, 2) = "Oui" Then ListBox1.Selected(i - 1) = True
Next i
End With
End Sub5) La procédure de validation (bouton) demeure, mais on fermera le Userform pour boucler l'opération :
Private Sub CommandButton1_Click()
Dim TblS(), i%
With ListBox1
ReDim TblS(.ListCount - 1, 0)
For i = 0 To .ListCount - 1
If .Selected(i) Then TblS(i, 0) = "Oui"
Next i
Worksheets("Feuil1").Range("B2").Resize(.ListCount - 1).Value = TblS
End With
Unload Me
End SubCordialement
Un grand merci, j'ai pris le temps de comprendre ton code et ça fonctionne. J'aurai appris à nommer les listes et des fonctions bien utiles...
Si je veux pousser plus loin et écrire en colonne C un commentaire de l'utilisateur (avec une inputbox), est ce possible avec cette méthode pendant la boucle?
Par exemple une première action de remplissage avec la sélection de data1 et data 3 ou l'utilisateur dit "beau temps",
puis une deuxième action de remplissage avec data 6 et data 8 ou l'utilisateur dit "pluie"
Pour l'instant soit je n'arrive pas à écrire soit ça me rempli toute la colonne...
Liste des données
data1 Oui beau temps
data2
data3 Oui beau temps
data4
data5
data6 Oui pluie
data7
data8 Oui pluie
ça n'est sûrement pas optimisé mais j'ai rajouté deux if dans une boucle cherchant si un oui existe et que si la troisième cellule est vide alors on rempli la 3éme cellule.