Userform LisBox multiple sélection
Bonjour,
J'ai une question concernant un UserForm avec une ListBox à choix multiples. Je voudrais sélectionner plusieurs éléments dans la liste que je voudrais par la suite imprimer, mais :
- je ne sais pas comment faire pour récupérer les valeurs sélectionner,
- copier ces valeurs pour les coller dans d'autres cellules d'une autre feuille.
Cordialement,
U_goffu
Bonjour,
Dans le cas d'une multisélection, il faut tester la propriété Selected de chaque élément de la liste pour détecter les éléments sélectionnés. La méthode habituelle est de les recueillir dans un tableau et d'affecter les valeurs du tableau à une plage.
Une possibilité de méthode (concrètement) : tu dimensionnes un tableau (dynamique) au départ sur le nombre d'éléments de la liste ; tu défiles les éléments dans une boucle ; pour chaque élément, si .Selected, tu l'affectes à un élément du tableau en utilisant une variable que tu incrémentes au fur et à mesure (qui contiendra à la fin le nombre d'éléments sélectionnés que tu as mis dans le tableau) ; tu redimensionnes ton tableau sur le nombre d'éléments (avec Preserve pour en conserver le contenu) ; tu dimensionnes la plage d'affectation à la dimension du tableau ; tu affectes le tableau à la plage (si tableau à une dimension, il faudra le transposer lors de l'affectation).
Cordialement.
Bonjour,
Merci de t'être penché sur le sujet MFerrand. J'ai à peu près compris ce que tu m'as demandé de faire. Entre temps, j'ai trouvé un fichier sur le net avec exactement ce que je voudrais faire. Néanmoins, je n'arrive pas à appliquer le code à mon cas, car il m'indique une erreur : Error 9 'Subscipt out of range'
Mon fichier :
Le fichier trouvé : Listbox_selection_methods
Je voudrais que dans mon userform Impression etiquette, je puisse sélectionner plusieurs codes produits et que ceux-ci viennent se coller sur une autre feuille "impression code barre" et renvoyer le code barre associé au code produit. Je ne sais pas si c'est suffisament clair.
Cordialement,
U_goffu
Impossible regarder ton fichier, erreur permanente qui se signale comme erreur système et se relance sans arrêt.
Aucune manipulation possible même fermer le classeur, ce que j'ai dû faire deux fois de façon hard...
Ah mince, je ne comprends pas car j'arrive à travailler dessus moi. En tout cas merci d'avoir essayer.
Bonjour à tous,
Voici un document qui je l'espère ne va pas faire planter votre excel ^^.
J'ai tenté de faire quelque chose, mais ceci ne marche pas. Pouvez-vous m'aider?
Ce que j'aimerais faire:
- dans l'Userform impression code barre, se trouve une ListBox avec plusieurs code produit qui se trouve sur la feuille "Stock" en colonne A. Je voudrais sélectionner plusieurs codes dans la liste et quand j'appuierai sur Imprimer, j'aimerais que ce code va sur la feuille "Impression code barre" et renvois la valeur code barre colonne N dans la feuille "Stock". et que du coup sa incrémente la copie.
Je ne sais pas si c'est tout à fait clair.
Bonjour,
L'autre avait dû être endommagé lors du transit... ? Celui-ci normal !
Bon juste 2 petits trucs anodins sur ta proc. qui plantait. Tu aurais dû trouver ça facilement si tu indentais correctement ton code, évitais certaines simplifications comme Next tout seul (dès qu'il y en a 2 il faut chercher quelle boucle...).
Une fois rectifié, la proc. va au bout mais tu n'as pas fini ? Le userform reste ouvert ?...
Quand le débogueur t'annonces "Next sans For" on regarde bien sûr si c'est ça, ça arrive, mais 3 fois sur 4 au moins c'est pas tout à fait ça : ici c'était un End If qui manquait.
La seconde était un xlContinuous écrit xlContinous. VBA cherchait une procédure introuvable... A ce propos, je ne l'ai pas vu immédiatement parce que écrit xlContinous, ce qui veut dire que tu as tapé la majuscule : le truc c'est de taper le code systématiquement en minuscules, VBA rétablit les majuscules ce qui te permet de voir que tu n'as pas fait de faute de frappe...
Private Sub CommandButton1_Click() 'impression
'Application.ScreenUpdating = False
Dim J As Long
Dim bSelected As Boolean
Dim i As Integer
Dim m As Integer
Dim nbligne As Long
Dim nbcol As Integer
Dim Lbloop As Long, Lbcopy As Long
Set Ws1 = Sheets("Stock")
bSelected = False
J = Ws1.Range("A" & Rows.Count).End(xlUp).Row
nbligne = ListBox1.ListCount - 1
nbcol = ListBox1.ColumnCount - 1
For i = 2 To J
If ListBox1.Selected(i) = True Then
bSelected = True
Exit For
End If
Next
If bSelected = True Then
With Sheets("Impression code barre").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
For i = 0 To nbligne
If ListBox1.Selected(i) = True Then
Lbcopy = Lbcopy + 1
For Lbloop = 0 To nbcol
.Cells(Lbcopy, Lbloop + 1) = ListBox1.List(i, Lbloop)
Next Lbloop
End If
Next
For m = 0 To nbcol
With Sheets("Impression code barre").Cells(Rows.Count, 1).End(xlUp).Offset(0, m).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = 23
End With
Next
End With
Else
MsgBox ("Vous devez sélectionner au moins un code produit")
End If
MsgBox "The Selected Data Are Copied.", vbInformation
Sheets("Impression code barre").Select
End Sub
Cordialement.
Oui, je suis d'accord, j'ai pas trop géré sur ce coup là.
Néanmoins, merci beaucoup MrFerrand
Par contre, je galère un peu à renvoyer la valeur de la 14ème colonnes de la feuille "Stock".
Auriez-vous quelques conseil svp?
Bonjour,
J'ai continuer de tenter des choses mais en vain. Je n'arrive pas à renvoyer en fonction du code produit selectionné dans ma ListBox, les valeurs du code barre figurant sur la colonne indice 14 de la Feuille "Stock".
Quelqu'un aurait-il une idée?
Cordialement,
U_goffu