Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Listbox_choix multiple

T

Titou

Guest
Bonjour,

je souhaite à partir d'une listbox à choix multiple, pouvoir renvoyer toute les valeurs séléctionnées et les coller à partir d'une cellule donnée

merci d'avance.

titou
 

Pièces jointes

  • listbox.zip
    9 KB · Affichages: 42
  • listbox.zip
    9 KB · Affichages: 40
  • listbox.zip
    9 KB · Affichages: 39
T

Titou

Guest
Une petite question,

dans ton zip lorsque tu cliques sur choix il te met ce que tu as choisi dans ta liste sur la feuille XL en J5.
comment peut on faire si on veut qu'il colle notre sélection multiple mais après la cellule J5 ou J6 ou Jn si'il y a quelque chose dedans...

je te remercie d'avance

Titou
 
A

albert

Guest
dans vba project :
Feuilles - UserForm1
tu cliques sur le bouton "choix" pour avoit le code qui est derrière

j'ai défini la ligne par "J" => J5 = ligne 5
donc dans Cells(J, 10) = .List(I)
J, 10 = 10ème colonne ("J") 5ème ligne

Cells(J, 12) envoie les chiffres dans "L5"


le code :

Private Sub CommandButton1_Click()
Dim J As Variant
Dim I As Variant

Call reduction
J = 5
With ListBox1
For I = 0 To .ListCount - 1
If .Selected(I) = True Then
Cells(J, 12) = .List(I)
.Selected(I) = False
J = J + 1
End If
Next
End With

End Sub
 
T

Titou

Guest
Merci pour ton explication,

cependant je souhaite pouvoir dire que par défaut il me colle ma sélection dans la cellule J5, mais si cette cellule est déjà remplie, alors il faudrait qu'il me colle la sélection dans la cellule vide en dessous, de ce fait il me cherche automatiquement la cellule vide ou il peut coller quelque chose, ainsi si les cellules J5, J6, Jn sont remplies il me colle en Jn+1.

j'utilise la méthode suivante pour les textbox ou combobox, mais je ne sais pas comment faire pour une sélection multiple:

Dim j As Integer
j = 5

Feuil3.Activate
Range("A" & j) = ComboBox1
Range("B" & j) = ComboBox2
Range("C" & j) = ComboBox3

merci pour ton aide

Titou
 
S

sylsyl

Guest
Bonjour a tous les deux,

Titou, je te laisse reflechir sur ce petit bout de code qui devrais t'aider:

Range("A1").Select
If ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Select
End If

C'est un debut de reflexion et non une reponse toute faite.

Si tu as besoin d'aide demande...

A++, Sylsyl.
 
T

Titou

Guest
Salut sylsyl,

j'ai regardé ton code... je ne suis pas encore spécialiste en la matière, j'essaie d'apprendre tout doucement...

je ne sais pas où intégrer on code...
j'ai besoin d'aide.

je te remercie d'avance.

titou
 
A

albert

Guest
bonjour Titou,
moi aussi j'apprends tout doucement
pour la sélection multiple il faut activer fmMultiSelectMulti

pour le code il faut imbriquer les deux conditions...
il me faut du temps pour le faire et ce matin je ne suis pas trop dispo..

...une piste :

1/
If ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Select

2/
If .Selected(I) = True Then
Cells(J, 10) = .List(I)
 
A

albert

Guest
erreur de pièce jointe, j'envoie une image .gif pour
"pour la sélection multiple il faut activer fmMultiSelectMulti"

(il faut agrandir l'image, elle est à 10%)
 

Pièces jointes

  • correction.zip
    14.2 KB · Affichages: 38
  • correction.zip
    14.2 KB · Affichages: 39
  • correction.zip
    14.2 KB · Affichages: 39
S

sylsyl

Guest
Salut Titou, Albert,

Je suis desole mais je ne peux pas telecharger les fichiers joints donc je ne sais pas trop de quoi tu as besoin mais voici une procedure que j’ai deja utilise pour ce que, je pense, etre le probleme que tu as.

Private sub Remplir(op as string)

Range("A1").select
For j = 0 To 1000
If ActiveCell.Offset(j, 0).Value = "" Then
ActiveCell.Offset(j, 0).Value = op
j = 1001
End If
Next j

End Sub

J est le nombre maximum de lignes que la macros testera (ici 1000). Tu peux mettre 1 million si tu veux ca ne ralentira pas le programme puisque “j” n’ira jamais jusque la.

J=1001 permet de sortir de la boucle

Ou si tu veux un “J” infini tu peux mettre

Range("A1").Select
depart:
If ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Select
else
Go to depart
End If
ActiveCell.value = op

Mais les “Go To” sont generalement deconseille (c’est un peu archaic qu’on m’a dit)

Ceci est inclus dans un truc du genre:

For T2 = 0 To NumbOfArea - 1
If listbox.Selected(T2) = True Then
Str = listbox.selected(T2)
Call Remplir(str)
End If
Next T2

NumbOfArea est le nombre de valeur dans ta listbox

Ceci est une partie modifiee pour toi d’un programme que j’ai cree, je ne l’ai pas teste independamment…

Si besoin de plus d’aide, essais de m’expliquer ce que tu veux exactement.

A++, Sylsyl.
 
T

Titou

Guest
Bonjour Albert,

j'ai lu tes zips, j'ai comrpis comment configurer la listbox pour le choix multiple, cependant je souhaite également pouvoir rentrer comme instruction que si la case J5 est remplie qu'il colle dans la cellule suivante .

merci

titou
 
T

Titou

Guest
Salut Sylsyl, Albert,

je viens de lire tes postes Sylsyl, je comprends à peu près, cependant je ne sais pas trop où placer les procédures.
pour etre plus clair, albert m'a passé un zip, sur ce zip il y a une listbox à choix multiples, un bouton effacer pour effacer les cellules ou se colle la selection, puis un bouton choix.

voici le code de la userform :

Private Sub CommandButton1_Click()
Dim J As Variant
Dim I As Variant

Call reduction
J = 5
With ListBox1
For I = 0 To .ListCount - 1
If .Selected(I) = True Then
Cells(J, 10) = .List(I)
.Selected(I) = False
J = J + 1
End If
Next
End With

End Sub


Private Sub ListBox1_GotFocus()
ListBox1.MultiSelect = fmMultiSelectExtended
Range("J5", Cells(ListBox1.ListCount, 10)).ClearContents
End Sub

Private Sub CommandButton2_Click()
Call ListBox1_GotFocus
End Sub

----------------------------------

cependant avec ce code, lorsque tu fais une sélection alors qu'il y a deja quelque chose dans la cellule J5, cela écrase les données.
donc je souhaite pouvoir y mettre un code permettant de coller les selections dans des cellules vides..
j'espere que tu comprends mieux, ce que je souhaite faire.
peux tu m'indiquer clairement ou placer ton code.


merci 'avance

encore merci à vous deux.

titou
 
S

sylsyl

Guest
Salut Titou, Albert,

Private Sub CommandButton1_Click()
Dim J As Variant
Dim I As Variant

Call reduction
J = 5
With ListBox1

Je ne l’ai pas teste mais ce qui suis doit marcher.

For I = 0 To .ListCount - 1
If .Selected(I) = True Then

Cells(J, 10).select ‘selectionne la cellule que tu voulais au depart

For k = 0 To 1000
If ActiveCell.Offset( k, 0).Value = "" Then ‘Test si la cellule est vide
ActiveCell.Offset( k, 0).Value = .List(I) ‘Si elle est vide -> valeur de List(I) dans cette cellule
k = 1001 ‘sort de la boucle
End If
Next k


.Selected(I) = False
J = J + 1
End If
Next
End With

End Sub

Je ne connais pas la suite de ta macro mais je pense que “J” est devenu inutile (remplace le par 5)

Si pb n’hesites pas.

A++, Sylsyl.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…