Enregistrement ListBox

Bonjour le forum

Je viens vers vous pour avoir de l’aide afin de vérifier et améliorer macro svp.

J’ai créé un UserForm1 avec une ListBox1 (3 colonnes) alimentée par la feuille (« Coordonnées ») ligne 3, colonne B, C, D, pour ça j’ai fais ce code qui à l’air de fonctionner. (j’espère)

Private Sub UserForm_Initialize()

Label1.Caption = "Choisir une personne dans cette liste"

With Me.ListBox1
 .ColumnCount = 3
 .ColumnWidths = "20;40;80"
End With

Dim DerLig As Long
Dim J As Long
Dim I As Integer
Dim K As Integer
Dim Ws As Worksheet

  Set Ws = Sheets("Coordonnées")
  DerLig = Ws.Range("B" & Rows.Count).End(xlUp).Row

  With Me.ListBox1
    .ColumnCount = 3
    For J = 3 To DerLig
      For K = 0 To .ListCount - 1
        If .List(K, 0) = Ws.Range("B" & J) Then Exit For
      Next K
      If K > .ListCount - 1 Then
        .AddItem Ws.Range("B" & J)
        For I = 2 To 4
          .List(.ListCount - 1, I - 2) = Ws.Cells(J, I) '-1
        Next I
      End If
    Next J
  End With
End Sub

Ensuite sur la feuille (« Visite médicale ») il y a un bouton qui ouvre UserForm1 avec la ListBox1 alimenté et un bouton Valider.

L’objectif est choisir une ligne dans ListBox1, Valider par le bouton et les infos de la ListBox1 viennent s’inscrire dans les colonnes B, C, D à la suite des renseignements déjà inscrit. Voici le code que j’ai fais.

Private Sub CommandButton1_Click()
Dim Ligne As Long, I As Integer, Colonne As Integer

With Sheets("Visite médicale")
  Ligne = .Range("C" & Rows.Count).End(xlUp).Row + 1
   For I = 0 To Me.ListBox1.ListCount - 1
   .Range("C" & Ligne) = Me.ListBox1.List(I, 0)
   .Range("D" & Ligne) = Me.ListBox1.List(I, 1)
   .Range("E" & Ligne) = Me.ListBox1.List(I, 2)
  Next I
End With
End Sub

et la quand j'enregistre c'est long, prend la ligne 1 puis déroule jusqu'à la derniere ligne du ListBox dans ma feuille, j'y comprends plus rien !!

J’aimerai finaliser se souci pour pouvoir poursuivre car cela me bloque l’avancé de mon projet.

Merci de votre compréhension, Merci par avance.

Cdlt

Bonjour

pompaero a écrit :

L’objectif est choisir une ligne dans ListBox1

Quand tu choisis une ligne tu as la propriété ListIndex différente de -1

Il te suffit de faire

    Private Sub CommandButton1_Click()
    Dim Ligne As Long, I As Integer, Colonne As Integer

    With Sheets("Visite médicale")
      Ligne = .Range("C" & Rows.Count).End(xlUp).Row + 1

       .Range("C" & Ligne) = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
       .Range("D" & Ligne) = Me.ListBox1.List(Me.ListBox1.ListIndex, 1)
       .Range("E" & Ligne) = Me.ListBox1.List(Me.ListBox1.ListIndex, 2)

    End With
    End Sub

Bonjour Banzai64

Merci pour ton aide et conseil

Ca marche parfaitement bien, je peux clôturer ce post.

Grand MERCI

à bientôt

Rechercher des sujets similaires à "enregistrement listbox"