[VBA] activer en auto des elements d'une list

Résolu
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 :

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:

6 réponses

dric83
 
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 :


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
1
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
J'aurais difficile de suivre, ça dépend où tu mémorise les sélections précédantes.
1
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
erreur: message annulé
excusez moi
:-x
1
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
En relisant ta réponse je comprend que tu mémorise les sélection dans E1.. séparer par un slach (/)
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)
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dric83
 
Un mois plus tard je m'y replonge !!!

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
1
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Bonjour,
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+
0