Pb MultiSelect dans listbox

  • Initiateur de la discussion JBSB
  • Date de début
J

JBSB

Guest
Bonsoir,

Je recherche un moyen de faire apparaître dans un contrôle label1 en USF 1 le résultat du choix effectué dans un contrôle listbox1 placé sur un USF2. Je sais le faire dans le cas d'un choix single mais pas en multiselect. Par ex : je choisi les données suivantes : Jean, Pierre, Harry, Franck. Le programme me le redistribue dans le contrôle label1 sous la forme : "Jean", "Pierre", "Harry", "Franck"

Merci d'avance et bonne soirée !

JBSB.
 
@

@+Thierry

Guest
Bonjour JBSB, le Forum

Imaginons : 1 UserForm / 1 ListBox (nommée "ListBox1") / 1 Label (nommée "Label1")

Voici le code :


Private Sub UserForm_Initialize()
With Me.ListBox1
.MultiSelect = fmMultiSelectMulti
.AddItem "Toto"
.AddItem "Zaza"
.AddItem "Lulu"
.AddItem "Lolo"
.AddItem "Lili"
End With
End Sub


Private Sub ListBox1_Change()
Dim i As Integer
Dim MyString As String
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then
MyString = MyString & Me.ListBox1.List(i) & ", "
End If
Next
Me.Label1.Caption = MyString

End Sub


NB on aurait tendance à Utiliser l'évènement :
Private Sub ListBox1_Click()
End Sub

Mais niet niet, après des recherches (justement pour un gros projet en ce moment voir Lien supprimé) j'ai compris que çà ne passe pas, d'ailleurs l'aide dit ceci :

"L'événement Click ne se produit pas si la valeur de la propriété Value est Null" ..... et quand on est en Multi Select "La propriété Value du contrôle est toujours Null."

Donc évènement change, c'est OK pour une ListBox

Bon Lundi

@+Thierry
 
J

JBSB

Guest
Bonsoir à tous,

Tout d'abord, merci à @+Thierry pour les infos et explications. Cependant, même si le programme m'a beacoup fait avancé, j'avoue qu'une anomalie persiste. Je voudrais le résultat sous la forme suivante :

"Jean","Pierre"

Hors, le programme doné ne me permet, aujourd'hui, que d'obtenir cela :

"Jean,Pierre"


Pourriez-vous me dire comment faire svp ...

Merci et très bonne soirée !

Merci encore à @+Thierry !!!

JBSB.
 
@

@+Thierry

Guest
Bonsoir JBSB, le Forum

Comment çà tu n'as pas eu de réponse ?

Je pense que le plus important pour toi était de savoir récupérer tes Items de ta ListBox en MultiSelect, et je pense avoir clairement répondu.

Pour ta présentation dans un Label, ce n'est pas vraiment important non ? et sûrement pas une anomalie, car je ne vois pas ce que tu vas en faire ensuite d'une string avec des "Doubles Guillemets" en séparateur ???... A moins que tu ne veuilles construire une Array, mais dans ce cas ce n'est pas comme celà qu'il faut s'y prendre, mais il faut fabriquer un tableau indéxé dynamiquement...

Enfin pour du "Design" only, tu peux faire un truc comme çà, il suffit de faire preuve d'un peu d'ingéniosité couplée à de l'imagination et de "bricoler" la String comme ceci :

Option Explicit

Private Sub UserForm_Initialize()
With Me.ListBox1
.MultiSelect = fmMultiSelectMulti
.AddItem "Toto"
.AddItem "Zaza"
.AddItem "Lulu"
.AddItem "Lolo"
.AddItem "Lili"
End With
End Sub


Private Sub ListBox1_Change()
Dim i As Integer
Dim MyString As String, MyFinalString As String
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then
MyString = MyString & """" & Me.ListBox1.List(i) & """, "
End If
Next
If Len(MyString) > 0 Then
MyFinalString = Left(MyString, Len(MyString) - 2)
End If
Me.Label1.Caption = MyFinalString

End Sub

Bonne Soirée et donc tu es chanceux, car je ne fais que passer rapidos par ici

@+Thierry
 
J

JBSB

Guest
Bonsoir,

Olà !!! Vraiment désolé pour la phrase maladroitement tournée. Biensûr que si j'avais eu une réponse mais qui répondait à 95 % à ce que je désirais. J'aurais dû tourner la phrase autrement, là c'est pour moi !

En fait je veux faire cela car mon listbox multiselect va me permettre de choisir des personnes à qui adresser une feuille xls par mail. Et il me semble que les adresses doivent être notées sous la forme "jean.d@wanadoo.fr","pierre.t@wanadoo.fr" et ainsi de suite...
Donc, sauf si je me trompe, c'est pour cela que j'avais besoin de cette forme. Merci encore !!!

Allez bonne soirée !

JBSB.
 
@

@+Thierry

Guest
Re: MultiSelect ListBox => MailingList avec SendMail ou FollowHyperlink au choix

Bonsoir JBSB, le Forum

Et oui parfois on ne pense pas que les écrits restent et un mot mal employé, peut changer tout le sens pour les lecteurs. Mais ce n'est absolument pas grave car je pensais bien que tu t'étais mal exprimé. Par contre tu aurais dû nous mettre sur la piste dès ton premier Postn car entre une MailingList et un Label, il y a un grand fossé !!lol

D'ailleurs, pour te mettre sur la piste, voici comment faire en deux méthodes pour un mail sur sélection ListBox multi-destinataires...

Par contre on change impérativement d'évènement "Change" de la ListBox1 (où l'on ne met plus rien), au bénéfice d'un CommandButton1 que l'on prend soin de rajouter dans le UserForm :

Private Sub UserForm_Initialize()
With Me.ListBox1
.MultiSelect = fmMultiSelectMulti
.AddItem "Toto@lol.com"
.AddItem "Zaza@lol.com"
.AddItem "Lulu@lol.com"
.AddItem "Lolo@lol.com"
.AddItem "Lili@lol.com"
End With
End Sub

Private Sub CommandButton1_Click()
Dim MailingList As String
Dim i As Byte
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
MailingList = MailingList & ListBox1.List(i) & "; "
End If
Next i
Mailling MailingList
End Sub


Private Sub Mailling(MailingList As String)
Dim Link As String
Dim Message As String

Message = "J'espère que vous allez bien sur le Forum, moi j'ai plein de boulot, mais je trouve le temps de faire des démos pour le Fun ;-), sinon il commence à faire plus chaud !! bientôt c'est le printemps !!!"

Link = "mailto:" & MailingList & "?Subject=Bonjour " _
& " de la part de " & Application.UserName & " en direct de la dernière démo de @+Thierry, lol" _
& "&Body=" & Message

ActiveWorkbook.FollowHyperlink Address:=Link, NewWindow:=True
Unload Me
End Sub


Voilà, dans ce cas ci-dessus il n'y a pas besoin de s'inquiéter avec les "guillements", enfin en tout cas sous Outlook 2000 çà passe impeccable, par contre chez moi c'est le ; (point-virgule) en séparateur, pas la virgule, donc regarde et tiens moi au courant avec version d'Excel / Win et le Client Mail.

Mais si tu essaies cette procédure, tu vas revenir dans pas longtemps avec cette fois-ci "j'ai bien eu 99% de la réponse........mais"

Car tu me diras je n'arrive pas à envoyer une feuille xls... (oui je sais, je fais long mais comme çà ce Fil de discussion sera complet....

Donc si c'est un WorkBook que tu dois envoyer, c'est avec la méthode SendMail, qui, quant à elle va exiger une Array pour les multi-destinataires...Exactement comme je le prévoyais dans mon précédent post.

Donc je t'ai écrit le code... (NB MailingList est une Variable Tableau Dynamique déclarée Public au niveau du Module, c'est à dire en top de celui-ci... En prime j'ai ajouté un contrôl de sélection d'item dans la ListBox pour éviter le Bug du User qui click sur le bouton sans rien avoir sélectionné.

Option Explicit

Dim MailingList() As String

Private Sub UserForm_Initialize()
With Me.ListBox1
.MultiSelect = fmMultiSelectMulti
.AddItem "Toto@lol.com"
.AddItem "Zaza@lol.com"
.AddItem "Lulu@lol.com"
.AddItem "Lolo@lol.com"
.AddItem "Lili@lol.com"
End With
End Sub

Private Sub CommandButton1_Click()
Dim i As Byte, x As Byte
Dim Email As Boolean

For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
Email = True '<<< ici on test si il y a au moins un destinataire sélectionné
ReDim Preserve MailingList(x)
MailingList(x) = Me.ListBox1.List(i)
x = x + 1
End If
Next i
If Email Then '<<< si OUI on envoie le mail
Mailling
End If
End Sub


Private Sub Mailling()
Dim Link As String
ThisWorkbook.SendMail Recipients:=Array(MailingList()), _
Subject:="Automatique Email de la part de " & Application.UserName & " en direct de la dernière démo de @+Thierry, lol "

Unload Me
End Sub

Par contre avec la méthode SendMail on envoie le classeur, mais pas de corps du message.... Pour faire les deux il faut créer un object Outlook (2000, XP) mais pas Express.... si besoin, je dois avoir çà aussi si tu veux....

Bonne soirée
@+Thierry


PS, je ne préfère pas faire de démo sur ce genre de truc, car çà ferait encore aussi un bon outil de spamming
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 221
Membres
103 158
dernier inscrit
laufin