Multisection de listbox evolutive vers userform
Bonjour le forum
Dans un userform appelé "usfEtude" j'ai mis un controle "multipage" avec lequel j'ai créé 3 pages dont l'une s'appelle "resultat"dans laquelle j'ai insérer une listbox appelée"listbox1".
Dans une feuille "Feuil1"du classeur j'ai inserer un controle listbox appelé "listbox2" .
1)Je voudrais que les "items" selectionnés (multiselections) dans cette listbox2 soient copiés et collés comme "item" dans la listbox1 du userform "usfEtude".
2)ensuite il faut savoir que ma liste "listbox2" evolue et change avec l'evenementiel "worksheet selection_change". Je voudrais donc pouvoir ajouter mes differentes selections toujours de ma listbox2 à la liste préexistante dans la listbox1 du "usfEtude" en cliquant sur un commandbutton "enregistrer"
Savez vous comment faire??parce que les listbox de mon coté c'est pas ça du tout du tout!!
Voial pour le moment ce que jai fait...meme si ça marche pas, ça peut peut etre vous aider...
Dim saveline
'valeur indépendante des modules qui devrait me servir à recuperer une valeur de ligne obtenue dans le module "worsheet change"
'sur la feuille "cible1" je dispose de:
'3 options buttons: nommés "optniveauperf1", "optniveauperf2", "optniveauperf3"
'1 commandbutton : "commandbutton1"
'1 listbox : "listbox2"
'je suis dans la feuille "cible1"
Private Sub CommandButton1_Click()
'lorsqu'un checkbox ou un optionbutton est sélectionné, il prend pour value true, sinon false.
'Excel interprete true = -1 et false = 0. Donc si 1 choix a été fait toq = -1
Dim i
Dim j
Dim k As String
Dim a
Dim solution
Set sh1 = Worksheets("Cachecible1")
Set sh2 = Worksheets("Cible1")
If Optniveauperf1 = False And Optniveauperf2 = False And Optniveauperf3 = False Then
MsgBox ("Merci d'indiquer le niveau de performance de ce scenario")
Exit Sub
End If
'récupération des occasions sélectionnées
With Me.ListBox2
For a = 0 To .ListCount - 1
If .Selected(a) Then 'selected(a) renvoie vrai ou faux
'test pour savoir si c'est le premier item sélectionné
If solution = "" Then
solution = .List(a) 'list(a) renvoie la valeur de l'élément
Else
'on assemble les différents items ensemble
solution = solution & vbLf & .List(a)
End If
End If
Next a
If solution = "" Then
MsgBox ("Indiquez la ou les solutions techniques retenues ")
Exit Sub
End If
End With
'pour enregistrer dans cachecible en fonction du niveau de performance du scenario et de la préoccupation active
Dim decalagecolonne As Integer
Dim valeurA As Integer
decalagecolonne = 0
sh1.Visible = True
valeurA = sh1.Cells(6, 4).Column
'j'initalise la cellule à laquelle je fais reference par la suite, en F4
If sh2.Optniveauperf1 = True Then
decalagecolonne = valeurA + 1
End If
If sh2.Optniveauperf2 = True Then
decalagecolonne = valeurA + 2
End If
If sh2.Optniveauperf3 = True Then
decalagecolonne = valeurA + 3
End If
sh1.Cells(saveline, decalagecolonne).Value = solution
'mes données solution s'joute aux précédentes dans cette cellule de la feuille "cache cible1"
sh1.Visible = False
'faire disparaitre les buttons une fois que l'enregistrement avec ce bouton a été selectionné
'pour n'avoir à effectuer ce choix qu'une seule fois.
End Sub
'toujours dans la feuille "Cible1"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ligne As Long
Dim Sh As Worksheet
Dim a
Dim b
Dim cel As Range
Dim cel1 As Range
Dim line As Long
a = Target.Offset(0, -1).Value
'j'enregistre la valeur (texte ou numerique) de la cellule à gauche de celle dont je vais changer la valeur
b = Target.Value
' enregistre la valeur de la cellule dont je change la valeur
Set sh1 = Worksheets("Cachecible1")
ListBox2.Clear 'liste solutions techniques
ListBox2.MultiSelect = fmMultiSelectExtended
For line = 4 To 60 'pour ligne de 4 à 46 de ce tableau
If a = sh1.Cells(line, 3).Value And b = sh1.Cells(line, 4).Value Then
'Si on a la meme combinaison de valeur "a" et "b" à une certine ligne de ce tableau
If sh1.Cells(line, 6).Value <> "" Then
ListBox2.List = Split(sh1.Cells(line, 6).Value, vbLf)
ListBox2.AddItem sh1.Cells(line, 6).Value
End If
saveline = sh1.Cells(line, 5).Row
' ces valeurs seront rappelés dans la macro "commandbutton1_click()"
End If
Next line
End Subcordialement
ps: j'ai déjà posé cette question sur un autre forum(code-source) , pour le moment sans réponse, et vu que c'est urgent...
Bonjour
Après une étude rapide de la macro, j'ai trouvé quelques anomalies, mais je ne suis pas sûr que ce soit la source de ton problème. Difficile à dire sans avoir un fichier exemple.
Dans le code tu as écrit :
sh1.Visible = True
valeurA = sh1.Cells(6, 4).Column
'j'initalise la cellule à laquelle je fais reference par la suite, en F4 Hors, la fonction Cells commence par la ligne suivi de la colonne. si tu veux vraiment accéder la cellule F4 comme dans le commentaire, tu devras écrire :
valeurA = sh1.Cells(4, 6).Column Plus bas, tu utilise la fonction Cells correctement semble-t-il. A vérifier !
Si tu as toujours des problèmes avec, joints un fichier exemple à ta réponse.
Salutations
Dan_de_pic
Merci beaucoup Dan_de_pic
c'etait apparement mon probleme...vive les étourderies...on y perd un temps fou, pour pas grand chose
Probleme résolu!!!:D