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...

18extrait-forum.xlsm (14.97 Ko)

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 Sub

Cordialement.

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 Sub

4) 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 Sub

5) 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 Sub

Cordialement

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.

Rechercher des sujets similaires à "ecrire cote listbox multiple"