Cela peut être une question bon marché pour certains, mais je suis totalement confus sur la façon de remplir ma zone de liste.
En utilisant cette ligne, je peux remplir la zone de liste comme indiqué ci-dessous:ListBox1.List = Sheets("Sheet1").Cells(1, 1).CurrentRegion.Value
ou
Dim rngName As Range
Dim ws As Worksheet
Dim i As Integer
Set ws = Worksheets("Sheet1")
For i = 1 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row Step 1
If ws.Cells(i, 1).Value <> vbNullString Then Me.ListBox1.AddItem
ws.Cells(i, 1).Value
Next i
Voici les données que je prévois d'utiliser pour remplir la zone de liste et est progressive. Seule la colonne a le nombre de correctifs.
Quelqu'un veuillez m'éclairer sur la façon de remplir une zone de liste adaptative à plusieurs colonnes et lignes en utilisant FOR LOOP comme indiqué dans mon code ci-dessus. Toute aide appréciée. Merci.
Méthodes
ListBox1.List
Avec le tableau (même méthode, mais sens inverse).Code
Private Sub CommandButton1_Click()
' Purpose: fill listbox with range values after clicking on CommandButton1
' (code could be applied to UserForm_Initialize(), too)
' Note: based on @Siddharth-Rout 's proposal at https://stackoverflow.com/questions/10763310/how-to-populate-data-from-a-range-multiple-rows-and-columns-to-listbox-with-vb
' but creating a variant data field array directly from range in a one liner
' (instead of filling a redimensioned array with range values in a loop)
Dim ws As Worksheet
Dim rng As Range
Dim MyArray ' variant, receives one based 2-dim data field array
'~~> Change your sheetname here
Set ws = Sheets("Sheet1")
'~~> Set you relevant range here
Set rng = ws.Range("A1:C" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)
With Me.ListBox1
.Clear
.ColumnHeads = False
.ColumnCount = rng.Columns.Count
'~~> create a one based 2-dim datafield array
MyArray = rng
'~~> fill listbox with array values
.List = MyArray
'~~> Set the widths of the column here. Ex: For 5 Columns
'~~> Change as Applicable
.ColumnWidths = "50;50;50"
.TopIndex = 0
End With
End Sub
Conseils supplémentaires
Un autre avantage de la méthode tableau - elle surmonte la limitation intégrée de seulement 10 colonnes lors de l'utilisation du .AddItem
méthode.
De plus, gardez à l'esprit que l'indexation de la listbox est basée sur zéro , donc par exemple vous obtenez l'adresse e-mail (colonne 3, index 2) de votre premier ligne d'élément (index 0) via ListBox1.List(0, 2)
, tandis que le tableau de champs de données devient automatiquement un tableau à deux dim.
Vous n'êtes pas limité à utiliser la méthode .List
Pour extraire les informations de la liste, vous pouvez inverser l'ordre ligne-colonne en utilisant ListBox1.Column" or even create a new array out of it, which remains a 2-dim object, even if there is only ONE item (note: the
La méthode Application.Transpose` redimiterait un tableau à 2 dimensions avec une seule ligne vers un tableau 1-dim).
Un dernier point: vous pouvez facilement sauvegarder à nouveau l'ensemble de la zone de liste dans une feuille Excel via rng = ListBox1.List
, Mais veillez à définir la plage correcte.
Que dis-tu de ça:
Sub foo()
Dim rngName As Range
Dim ws As Worksheet
Dim i As Integer
Set ws = Worksheets("Sheet1")
ListBox1.Clear
ListBox1.columnCount = 3
Dim LastRow As Long
LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 1 To LastRow
If ws.Cells(i, 1).Value <> vbNullString Then ListBox1.AddItem ws.Cells(i, 1).Value
If ws.Cells(i, 2).Value <> vbNullString Then ListBox1.List(i - 1, 1) = ws.Cells(i, 2).Value
If ws.Cells(i, 3).Value <> vbNullString Then ListBox1.List(i - 1, 2) = ws.Cells(i, 3).Value
Next i
End Sub