ListBox: récupérer des valeurs précises
Résolu
Bonjour à tous,
J'ai regardé absolument dans tous les forums et aucun ne répond vraiment à mon problème.
J'ai un userform qui contient une ListBox (plusieurs lignes et 4 colonnes).
J'aimerai sélectionner toutes mes lignes et colonnes et le mettre dans une feuille excel; je m'explique.
Mon ListBox correspond à un tableau à ligne variant et de 4 colonnes.
Je veux donc mettre la case (1,1) du la ListBox dans la case A1 de ma feuille et ainsi de suite.
Pour ce faire j'ai écrit ce petit bout de code:
For i = 1 To ListBox1.ListCount
For j = 1 To 4
Sheets("Saisie_Stock").Range(Cells(i + 1, j)).Value = ListBox1.List(i, j)
Next
Next
Cela me crée une erreur et je suis sur que ça vient de mon ListBox1.List mais je ne sais pas quoi utiliser à la place.
Je vous remercie pour votre aide.
J'ai regardé absolument dans tous les forums et aucun ne répond vraiment à mon problème.
J'ai un userform qui contient une ListBox (plusieurs lignes et 4 colonnes).
J'aimerai sélectionner toutes mes lignes et colonnes et le mettre dans une feuille excel; je m'explique.
Mon ListBox correspond à un tableau à ligne variant et de 4 colonnes.
Je veux donc mettre la case (1,1) du la ListBox dans la case A1 de ma feuille et ainsi de suite.
Pour ce faire j'ai écrit ce petit bout de code:
For i = 1 To ListBox1.ListCount
For j = 1 To 4
Sheets("Saisie_Stock").Range(Cells(i + 1, j)).Value = ListBox1.List(i, j)
Next
Next
Cela me crée une erreur et je suis sur que ça vient de mon ListBox1.List mais je ne sais pas quoi utiliser à la place.
Je vous remercie pour votre aide.
1 réponse
-
ModérateurBonjour,
A lire
code à tenter :Dim TB() TB = ListBox1.List() ReDim Preserve TB(ListBox1.ListCount - 1, ListBox1.ColumnCount - 1) Range("A1").Resize(UBound(TB, 1), UBound(TB, 2)) = TB
-
Merci beaucoup, j'ai lu ton site et même si je n'ai pas tout tout compris, ça m'a déjà aidé à voir où était mon erreur.
Merci pour ton code, il est plutôt très efficace.
J'ai une petite question en plus car je n'ai pas tout compris non plus sur ton code:
Pourquoi tu utilises deux fois UBound dans ton Resize(UBound, Ubound) et pas un LBound?
Et pour finir, comment je fais pour dimensionner mon tableau?
La première ligne de mon ListBox est une ligne avec des mots donc elle ne doit pas être utilisé et après je dois rentrer dans le tableau excel les 4 colonnes de mon textBox pour chaque ligne. -
-
-
Je vais essayer d'être plus clair.
J'ai du mal à comprendre tes 3 lignes de code.
Si je comprends bien, TB = ListBox1.List() permet de mettre dans un tableau ce qui est contenu dans la ListBox.
ReDim Preserve TB(ListBox1.ListCount - 1, ListBox1.ColumnCount - 1) redimensionne le tableau (mais je comprends pas comment et je ne comprends la taille du tableau après cette instruction).
Range("A1").Resize(UBound(TB, 1), UBound(TB, 2)) = TB range dans ma feuille voulu les valeurs de la ListBox en dimensionnant à la bonne taille. La non plus je ne comprends pas le rôle des UBound(TB, 1) et UBound(TB, 2). Malgré le lien que tu m'as passé j'ai encore du mal à comprendre ces lignes -
Modérateur@_retttBonjour,
Dans le lien que je t'ai passé, il est dit que lorsque tu as une listbox multicolonnes ET que tu passes ses valeurs dans une variable tableau par : TB = ListBox1.List(), il te dimensionne systématiquement ta variable tableau comme ceci :
TB(0 To ListBox1.ListCount - 1, 0 to 9)
Or, tu n'as que 4 colonnes, pas 10.
Il te faut donc redimensionner ton tableau pour ne conserver que les 4 colonnes. Soit :
ReDim Preserve TB(ListBox1.ListCount - 1, ListBox1.ColumnCount - 1)
En effet, tu redimensionnes : TB(0 To NombreDeLignes - 1, 0 To 3)
0, 1, 2, 3 ===> = 4 colonnes!
ListBox1.ColumnCount = 4 dans ton cas
Range("A1").Resize(UBound(TB, 1), UBound(TB, 2))
"dimensionne" ta plage, ton objet Range.
Dimmensionne comment?
Resize(LIGNES, COLONNES)
UBound(TB, 1) = nombre de lignes
UBound(TB, 2) = nombre de colonnes
-