[VBA] activer en auto des elements d'une list
Résolu
dric83
-
dric83 -
dric83 -
Bonjour à tous,
Grâce à ce lien j'ai réussi à trouver ce que je voulais
http://boisgontierjacques.free.fr/pages_site/formulairemultiSelection.htm
Voir le 2eme en partant du bas :
"Choix multiples dans une ListeBox"
(fichier exemple à télécharger)
http://boisgontierjacques.free.fr/fichiers/Formulaire/FormSelectionMult.xls
C'est exactement ce que je cherchais mais il manque juste une petite chose :
Imaginons que j'ai déjà sélectionné une première fois dans ma liste les éléments que je souhaite, je valide, la liste apparait dans la case jaune.
Mais si je souhaite juste rajouter quelque chose, il faut que je re-sélectionne TOUS les éléments que j'avais déjà sélectionné : fastidieux lorsque la liste est très longue.
J'aimerai que si des éléments existent dans la case jaune, ils soient déjà sélectionnés dans la liste...
Mais comment faire .... ??
MERCI à ceux qui auront une idée et voudront bien la partager !! :)
Bonne soirée.
Cédric
code :
Grâce à ce lien j'ai réussi à trouver ce que je voulais
http://boisgontierjacques.free.fr/pages_site/formulairemultiSelection.htm
Voir le 2eme en partant du bas :
"Choix multiples dans une ListeBox"
(fichier exemple à télécharger)
http://boisgontierjacques.free.fr/fichiers/Formulaire/FormSelectionMult.xls
C'est exactement ce que je cherchais mais il manque juste une petite chose :
Imaginons que j'ai déjà sélectionné une première fois dans ma liste les éléments que je souhaite, je valide, la liste apparait dans la case jaune.
Mais si je souhaite juste rajouter quelque chose, il faut que je re-sélectionne TOUS les éléments que j'avais déjà sélectionné : fastidieux lorsque la liste est très longue.
J'aimerai que si des éléments existent dans la case jaune, ils soient déjà sélectionnés dans la liste...
Mais comment faire .... ??
MERCI à ceux qui auront une idée et voudront bien la partager !! :)
Bonne soirée.
Cédric
code :
Dim f, mondico Sub UserForm_Initialize() Set f = Sheets("bd") Set mondico = CreateObject("Scripting.Dictionary") Me.choix.List = Range(f.[A2], f.[b65000].End(xlUp)).Value Me.choix.MultiSelect = fmMultiSelectMulti End Sub Private Sub Choix_Change() 'mondico.RemoveAll 'Me.RésultatListBox1.Clear For k = 0 To Me.choix.ListCount - 1 If Me.choix.Selected(k) = True Then temp = Me.choix.List(k, 0) & " " & Me.choix.List(k, 1) mondico(temp) = temp End If Next k Me.RésultatListBox1.List = mondico.items End Sub Private Sub cmdValider_Click() [E1] = Join(mondico.items, Chr(10)) Unload Me End Sub
A voir également:
- [VBA] activer en auto des elements d'une list
- Activer chromecast - Guide
- Activer office gratuitement - Accueil - Bureautique
- Comment activer windows 10 - Guide
- Cle pour activer windows 10 gratuitement - Guide
- Activer pavé tactile pc portable - Guide
6 réponses
Bonjour lermite !
Merci beaucoup pour la réponse et désolé de ne pas avoir répondu plus tot.
J'ai enfin un peu de temps pour me remettre sur ce sujet.
J'ai fait d'autres modifications pour optimiser et présenter à mon gout.
Mais j'ai essayé de créer cette fameuse boucle et je t'avoue ... :-/ ca fonctionne pas.
Aurais tu un peu plus à me dire ?
Voila à quoi ressemble maitenant ma macro :
Maintenant mes resultats sont sur la meme ligne et chaque élément est séparé du suivant par un slash
MERCI beaucoup en tous cas !!
Cédric
Merci beaucoup pour la réponse et désolé de ne pas avoir répondu plus tot.
J'ai enfin un peu de temps pour me remettre sur ce sujet.
J'ai fait d'autres modifications pour optimiser et présenter à mon gout.
Mais j'ai essayé de créer cette fameuse boucle et je t'avoue ... :-/ ca fonctionne pas.
Aurais tu un peu plus à me dire ?
Voila à quoi ressemble maitenant ma macro :
Dim f, mondico Sub UserForm_Initialize() Set f = Sheets("bd") Set mondico = CreateObject("Scripting.Dictionary") Me.choix.List = Range(f.[A2], f.[b65000].End(xlUp)).Value Me.choix.MultiSelect = fmMultiSelectMulti End Sub Private Sub Choix_Change() mondico.RemoveAll Me.RésultatListBox1.Clear For k = 0 To Me.choix.ListCount - 1 If Me.choix.Selected(k) = True Then temp = Me.choix.List(k, 0) mondico(temp) = temp End If Next k Me.RésultatListBox1.List = mondico.items End Sub Private Sub cmdValider_Click() [E1] = Join(mondico.items, "/") Unload Me End Sub
Maintenant mes resultats sont sur la meme ligne et chaque élément est séparé du suivant par un slash
MERCI beaucoup en tous cas !!
Cédric
En relisant ta réponse je comprend que tu mémorise les sélection dans E1.. séparer par un slach (/)
Alors essaye avec...
Faudra peut-être supprime le exit For (je sais pas tester)
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Alors essaye avec...
Dim L As Integer, TB TB = Split(Range("E1"), "/") For k = choix.ListCount - 1 To 0 Step -1 'Si ont enlève des lignes le liscount change. For L = 0 To UBound(TB) If choix.List(k) = TB(L) Then choix.RemoveItem (k) Exit For End If Next L Next k
Faudra peut-être supprime le exit For (je sais pas tester)
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Un mois plus tard je m'y replonge !!!
Merci beaucoup lermite222 car grace à toi j'ai trouvé la solution :
MERCI encore et bonne continuation
Merci beaucoup lermite222 car grace à toi j'ai trouvé la solution :
Dim L As Integer, TB TB = Split(Range("E1"), "/") For L = 0 To UBound(TB) UserForm1.RésultatListBox1.addItem TB(L) Next L
MERCI encore et bonne continuation
Bonjour,
Après ta ligne...
Ce qui, entre parenthèses pourrait être déterminer dans le design.
Il faut repasser en revue toutes les lignes de la liste et faire une comparaison avec ta feuille et quand c'est déja sélectionner mettre Selected à True.
(Avec une boucle comme tu fais pour la sélection)
A+
Après ta ligne...
Me.choix.MultiSelect = fmMultiSelectMulti
Ce qui, entre parenthèses pourrait être déterminer dans le design.
Il faut repasser en revue toutes les lignes de la liste et faire une comparaison avec ta feuille et quand c'est déja sélectionner mettre Selected à True.
(Avec une boucle comme tu fais pour la sélection)
A+