Recuperation d'une selection multiple dans une listbox

  • Initiateur de la discussion Guillaume
  • Date de début
G

Guillaume

Guest
Bonjour à toutes et à tous, malgrés mon trés faible niveau en vba xls, je pensais m'en sortir sur les formulaires, jusqu'a ce que je tombe sur un "os":

J'ai créé un userform avec une listbox, un bouton "OK", un bouton "Annuler"
a l'activation du userform la listbox affiche des données contenu dans une plage de cellule d'une feuille XLS.

J'ai choisi pour la propriété "multiselect" de la list box : "fnMultiSelectMulti"

Ainsi je peux faire plusieurs choix dans ma liste, jusque la tout va bien.

Maintenant le problème:

je souhaiterais que lors d'un clik sur "OK" l'ensemble des elements selectionnés dans la listbox se retouve dans le plage de cellule "A27:A40"
de la feuille "calculation" de la façon suivante : si A27="" alors selection de a27, sinon decalage de 1 etc... jusque A40.

J'espère avoir posé correctement les elements de mon problème et un grand merci d'avance pour vos reponses.

Guillaume.
 
P

Papaye

Guest
Salut,

Le + simple serait de faire une boucle qui testerait si l'élément i est coché. Tu te fais après un compteur qui te copie ton élément où tu le désires.

Envoi ton classeur sinon, je jette un oeil.

Papaye
 
P

Papaye

Guest
En gros :

Private Sub cmdPeriode_Click()
iNbCount = 0 'comptage du nombre de valeurs choisies
iNbEcrit=1
For i = 1 To NbValeur 'Nb valeur à tester dans ta liste
If lbChoixCompare.Selected(i) = True Then 'si select ds listbox
GraphBase(iNbEcrit%) = lbChoixCompare.List(i)
iNbEcrit = iNbEcrit + 1
End If
Next i
end sub
tu récupères dans GraphBase la liste de tes éléments sélectionnés.
Après tu te faire une autre macro qui te les copie !

Papaye
 
@

@+Thierry

Guest
Bonjour Guillaune, Papaye, le Forum

Papaye, j'ai eu du mal a interpréter ton code et j'ai bien peur que Guillaume se perdre un peu vu qu'il dit être d'un trés faible niveau en vba.

Je propose une démo sans fichier joint...

Matériel
Un Classeur Vierge avec deux Feuilles au minimum "Feuil1" et Feuil2"
Un Userform avec une ListBox "ListBox1" et un CommanButton "CommandButton1"

Dans la Feuil1 on remplit de "A1" en "A10" (ou "A20" çà n'a pas d'importance) des "Toto1", "Toto2", "Toto2", "Toto3", "Toto4", "Toto5", etc...)

Dans le Private Module du Userform on copie/colle ce code :


Option Explicit

Private Sub UserForm_Initialize()
Dim L As Integer, i As Integer
Dim WS As Worksheet

Set WS = Sheets("Feuil1")

L = WS.Range("A65536").End(xlUp).Row

With Me.ListBox1
For i = 1 To L
.AddItem WS.Cells(i, 1)
Next
.MultiSelect = fmMultiSelectMulti
End With

End Sub


Private Sub CommandButton1_Click()
Dim L As Integer, i As Integer
Dim WS As Worksheet

Set WS = Sheets("Feuil2")

L = WS.Range("A65536").End(xlUp).Row
If L < 27 Then L = 27
If L > 40 Then MsgBox "Capacité Dépassée": Exit Sub

For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then
WS.Cells(L, 1) = Me.ListBox1.List(i)
L = L + 1
End If
Next

End Sub


Ce code devrait faire ce que souhaite Guillaume, si j'ai bien compris....

Bonne Fin d'Aprèm
@+Thierry
 
G

Guillaume

Guest
Tout d'abord un grand merci à tous les 2 d'avoir pris du temps pour moi,
Effectivement Papaye, je pense avoir compris le principe mais il me manque plusieurs heures de "cuisson" pour le mettre en oeuvre, en ce qui concerne la demo de thierry je l'ai faite et c'est OK, cependant lorsque je l'ai entré dans mon projet il y a une adaptation que je n'arrive pas a faire:
dans la démo on entre les données devant apparaitre dans la listbox en Feuil1 et cell A1;A2;A3 etc... or dans mon application c'est une plage strictement comprise entre B18 et B22 dans une feuille nommée: "vfg4"
(je dois imperativement l'appeler par le nom car la position peu changer)

et je ne trouve pas comment faire!

Merci pour vos reponses.
 
@

@+Thierry

Guest
Bonjour Guillaume, Papaye, le Forum

Si ta feuille "Source" qui contient les données à incrémenter dans la ListBox1 se nomme "vfg4" et que la plage est définitivement fixée à B18:B22 tu peux utiliser la méthode RowSource aussi... (qui est plus simple)

Voici un Exemple :
Private Sub UserForm_Initialize()
With Me.ListBox1
.RowSource = "vfg4!B18:B22"
.MultiSelect = fmMultiSelectMulti
End With
End Sub


Sinon en conservant la même boucle que je t'ai prédemment donnée, on l'adapterait de la sorte :

Private Sub UserForm_Initialize()
Dim i As Integer
Dim WS As Worksheet

Set WS = Sheets("vfg4")

With Me.ListBox1
For i = 18 To 22 '<<<< Les Cellules de la Ligne 18 à 22
.AddItem WS.Cells(i, 2) 'Les Cellules Row : i (18 à 22), colonne 2 (B)
Next
.MultiSelect = fmMultiSelectMulti
End With

End Sub

Bon Appétit
@+Thierry
 

Discussions similaires

Réponses
21
Affichages
1 K
Réponses
9
Affichages
640

Statistiques des forums

Discussions
312 078
Messages
2 085 106
Membres
102 779
dernier inscrit
wrond