Bonjour,
La propriété RowSource d'un contrôle ListBox est de type String et ce string doit être la référence à la plage de cellules immédiatement après la ligne contenant les étiquettes de colonne soit par exemple "A2:M15" pour la liste de données A1:M15.
Idéalement pour éviter des soucis, il faut préciser la feuille parente de la plage soit "db!A2:M15" et pour être encore plus précis le nom du classeur soit "'[Liste de données1.xls]db'!$A$2:$M$15"
Donc dans la procédure événementielle UserForm_Initialize
1 2 3
| With Me.ListBox1
.RowSource = "'[Liste de données1.xls]db'!$A$2:$M$15"
End With |
mais tu peux aussi utiliser la propriété Address de l'objet Range et bien entendu il ne faudra pas oublier d'autres propriétés comme dans l'exemple ci-dessous
1 2 3 4 5 6 7 8 9 10
| Private Sub UserForm_Initialize()
Dim rng As Range
Set rng = ThisWorkbook.Worksheets("db").Range("A2:M15")
With Me.ListBox1
.RowSource = rng.Address(external:=True)
.ColumnHeads = True ' Affiche les étiquettes de colonnes
.ColumnCount = rng.Columns.Count ' Les colonnes à afficher
.ColumnWidths = "0;20;50;20;0;50" ' Largeur des colonnes
End With
End Sub |
Tu as indiqué que ta liste était de taille fixe mais si ce n'était pas le cas, tu pourrais utiliser la propriété CurrentRegion pour définir la taille de la plage et ensuite rectifier la taille exacte de la zone des données (soit la ligne qui suit les étiquettes de colonnes
La ligne ci-dessous renverra un objet range (A1:M15 pour notre exemple)
Set rng = ThisWorkbook.Worksheets("db").CurrentRegion
On utilisera une autre variable objet (ce n'est pas obligatoire) pour définir la plage des cellules immédiatement après les étiquettes de colonnes soit la propriété Offset et ensuite rectifier la taille de la plage par la propriété Resize
1 2 3
| With rng
Set rngData = .Offset(1).Resize(.Rows.Count - 1)
End With |
rng.Offset(1), renverra comme plage A2:M16 soit une ligne de trop.
rng.Offset(1).Resize(.Rows.Count - 1) renverra A2:M15.
rng.rows.count renvoie le nombre de lignes de la plage A1:M15 représenté par la variable objet rng
Le code complet
1 2 3 4 5 6 7 8 9 10 11
| Private Sub UserForm_Initialize()
Dim rng As Range, rngData As Range
Set rng = ThisWorkbook.Worksheets("db").CurrentRegion '
With rng: Set rngData = .Offset(1).Resize(.Rows.Count - 1): End With
With Me.ListBox1
.RowSource = rngData.Address(external:=True)
.ColumnHeads = True ' Affiche les étiquettes de colonnes
.ColumnCount = rng.Columns.Count ' Les colonnes à afficher
.ColumnWidths = "0;20;50;20;0;50" ' Largeur des colonnes
End With
End Sub |
Partager