[excel] boucler sur listbox

Résolu
Bonjour à tous,

J'ai une listbox de 5 colonnes multisélection qui affiche une plage de cellule de la feuille "Cheques" (A3:E)
Dans un textbox "TB_num_remise" j'inscrit un nombre.

En sélectionnant une ligne de ma listbox j'aimerai inscrire la valeur de mon textbox dans la colonne "E" de ma feuille au niveau de la ligne sélectionnée.

Pour l'instant j'arrive à le faire en sélectionnant une seule ligne avec ceci:

[Cheques!E3].Offset(Me.ListBox1.ListIndex).Value = TB_num_remise.Value


Par contre je ne sais pas comment le faire en sélectionnant plusieurs lignes dans ma listbox

Merci d'avance

5 réponses

  1. Modérateur
    Bonjour,

    Pour boucler sur une listBox et récupérer les lignes sélectionnées :
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then 
            MsgBox ListBox1.List(i) & " est situé à la ligne " & i + 1
        End If
    Next i

    1. Bonjour et merci encore une fois pijaku de prendre le temps de m'aider.

      Ce que je cherche est d'envoyer la valeur contenue dans le textbox dans la colonne "E" de la feuille "Cheques" des lignes sélectionneées.
      Je n'y arrive pour le moment qu'en sélectionnant une seule ligne avec ceci

      [Cheques!E3].Offset(Me.ListBox1.ListIndex).Value = TB_num_remise.Value


      J'aimerai faire la même chose mais pour toutes les lignes sélectionnées si possible.
      Je ne sais pas comment adapter votre code au mien.
      1. Modérateur
        tu mélanges tout... TextBox et lignes sélectionnées + listbox, je ne comprend pas...
    2. Désolé il est vrai que je ne dois pas être très clair
      Je peux joindre le fichier qui j'espère sera plus clair

      https://www.cjoint.com/?0JjwGYBPHYQ

      C'est dans l'onglet "Remise de chèques"
      J'aimerai sélectionner plusieurs lignes dans la listbox et leur donner la valeur de la textbox

      Merci pour votre patiente
      1. Modérateur
        Salut,

        Si j'ai bien compris....
        Dans l'UserForm Usf_main, Onglet "Remise de chèques", tu inscris une valeur dans le textbox TB_num_remise, sélectionnes plusieurs lignes dans la listbox1 et, en cliquant sur le bouton valider, tu souhaites que la colonne 5 (N° de remise) des lignes sélectionnées se voient attribuer la valeur que tu as saisi dans le textbox.
        C'est bien ça?
    3. Modérateur
      Voici ton code :

      Private Sub Cmd_remise_Click()
          
          'Si rien n'a été saisi dans le textbox : message + sortie
          If TB_num_remise = "" Then MsgBox "Saisie obligatoire du numéro de remise.", vbCritical: Exit Sub
          
          'boucle sur toutes les lignes de la listbox
          For i = 0 To ListBox1.ListCount - 1
              'si la ligne est sélectionnée
              If ListBox1.Selected(i) = True Then
                  'affectation de la valeur de la textbox dans la colonne "E" correspondant a la ligne de la listbox
                  Sheets("Cheques").Range("E" & i + 3) = TB_num_remise
              End If
          Next i
          
          'Rechargement de la listbox pour afficher les changements
          With Sheets("Cheques")
              Me.ListBox1.List = .Range("A3:E" & .[B65000].End(xlUp).Row()).Value
          End With
          
          'Format euros sur la 3eme colonne de la listbox
          For i = 0 To ListBox1.ListCount - 1
            ListBox1.List(i, 2) = Format(ListBox1.List(i, 2), "0.00 €")
          Next i
      End Sub
      

      1. Encore une fois un grand merci Pijaku, c'est exactement ce que je voulais faire.