ListBox: récupérer des valeurs précises [Résolu/Fermé]

Signaler
Messages postés
17
Date d'inscription
mardi 7 juillet 2015
Statut
Membre
Dernière intervention
23 juillet 2015
-
Messages postés
17
Date d'inscription
mardi 7 juillet 2015
Statut
Membre
Dernière intervention
23 juillet 2015
-
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.

1 réponse

Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 461
Bonjour,

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

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56926 internautes nous ont dit merci ce mois-ci

Messages postés
17
Date d'inscription
mardi 7 juillet 2015
Statut
Membre
Dernière intervention
23 juillet 2015

Sheets("Saisie_Stock").Select
Dim TB()
TB = ListBox1.List()
ReDim Preserve TB(ListBox1.ListCount - 1, ListBox1.ColumnCount - 1)
Range("A2").Resize(UBound(TB, 1) + 1, UBound(TB, 2) + 1) = TB

'Pourquoi +1 dans le Resize(ligne+1, colonne+1)?
'Car dans une ListBox nous parcourons le tableau de 0 à nb_ligne et de 0 à nb_colonne.
'Alors que dans une feuille Excel on commence notre tableau de 1 à nb_ligne et de 1 à nb_colonne: nb_ligne et nb_colonne sont les nombres définis de la taille de votre tableau.

Et pour mon dernier problème qui était tout prendre dans ma ListBox sauf la première ligne de cette dernière, j'ai pris la solution de facilité: j'ai supprimer cette première ligne qui me dérangeait car c'était la légende du tableau. Donc maintenant ma ListBox est remplie seulement de chiffres répartis sur 4 colonnes. Je copie simplement avec le code au-dessus la ListBox dans mon tableau à partir de la Cellule A2 de ma feuille Excel
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 461 >
Messages postés
17
Date d'inscription
mardi 7 juillet 2015
Statut
Membre
Dernière intervention
23 juillet 2015

J'ai donc bien fait de te demander.

Comment remplis tu ta ListBox?
Si tu la remplis grâce à la propriété RowSource (ce que je te recommande), tu as accès à la propriété ColumnHeads... Dans ton cas ce serait hyper pratique!

Fais ce test :
1 nouveau classeur disposant d'au moins deux feuilles nommées Feuil1 et Feuil2
1 userform
dans cette UserForm, 1 ListBox nommée ListBox1

Essaie ce code :
Private Sub UserForm_Initialize()
Dim i&, j&
Dim Cel As Range

    'remplit la Feuil1 de valeurs "bidons"
    For Each Cel In Range("A1:D20")
        Cel.Value = Cel.Address
    Next

    'détermine les propriétés de la ListBox
    ListBox1.ColumnHeads = True    'Entêtes de colonnes
    ListBox1.ColumnCount = 4        'Nombre de colonnes
'!!!remplissage sans la ligne 1 de la Feuil1 !!!!!!!!! Cette ligne remplira l'entête des colonnes automatiquement
    ListBox1.RowSource = "A2:D20"    'remplit la ListBox

    'restitution des données en Feuil2
    Dim TB()
    TB = ListBox1.List()
    ReDim Preserve TB(ListBox1.ListCount - 1, ListBox1.ColumnCount - 1)
    Sheets("Feuil2").Range("A1").Resize(UBound(TB, 1), UBound(TB, 2) + 1) = TB
End Sub
Messages postés
17
Date d'inscription
mardi 7 juillet 2015
Statut
Membre
Dernière intervention
23 juillet 2015

Je remplis ma ListBox grâce à la fonction List().

'J'enregistre la dernière ligne de ma feuille excel qui va me servir à remplir ma ListBox
derniere_ligne_saisie = Sheets("Saisie_Stock").Cells(1, 1).End(xlDown).Row

'On initialise la listBox avec le tableau de la Feuille Saisie_Stock
ListBox1.List() = Sheets("Saisie_Stock").Range(Cells(2, 1), Cells(derniere_ligne_saisie, 4)).Value

Je vais essayer ton code, il sera surement plus propre à mettre en place

Juste comment tu arrives à mettre ton code dans un encadré comme ça? C'est tellement plus facile à lire.
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 461 >
Messages postés
17
Date d'inscription
mardi 7 juillet 2015
Statut
Membre
Dernière intervention
23 juillet 2015

Tu trouveras le secret des balises code ICI.
Messages postés
17
Date d'inscription
mardi 7 juillet 2015
Statut
Membre
Dernière intervention
23 juillet 2015

Ok merci, bonne journée :)