Listbox à choix multiple sur beaucoup de boutons - Factorisation de code
Bonjour à toutes et à tous !
Je me permets de faire appel à la communauté car j'essaie de refactoriser du code que j'utilise pour plusieurs formes qui servent de boutons (sur le fichier que je suis en cours de création, une trentaine...) et je cherche à créer une ou des fonctions afin de ne pas répéter le code dans son intégralité à chaque fois pour l'alléger.
Je bute sur ce point depuis plusieurs jours, car je ne vois pas fondamentalement comment faire, et, lorsque je fais des essais, c'est à chaque fois sans succès...
Je précise que j'ai quelques notions en vba, mais de loin pas le niveau de la plupart des gens présents sur ce forum !
Petite explication sur ce dont j'ai besoin : j'ai une forme en bout de ligne associée à une listbox (ListMulti1) qui est, par défaut, cachée et qui apparaît lors du click sur la forme. Dans cette listbox à sélection multiple, je coche les items dont j'ai besoin et lors du second click sur la forme, la listbox disparaît et les éléments cochés apparaissent dans la cellule nommée Target_1.
Voici le morceau de code en question :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
Sub Shape1_Click()
Dim xSelShp As Shape, xSelLst As Variant, i, J As Integer
Dim xV As String
Set xSelShp = ActiveSheet.Shapes(Application.Caller)
Set xLstBox = ActiveSheet.ListMulti1
If xLstBox.Visible = False Then
xLstBox.Visible = True
xSelShp.Fill.ForeColor.RGB = RGB(100, 204, 132)
xStr = ""
xStr = Range("Target_1").Value
If xStr <> "" Then
xArr = Split(xStr, ";")
For i = xLstBox.ListCount - 1 To 0 Step -1
xV = xLstBox.List(i)
For J = 0 To UBound(xArr)
If xArr(J) = xV Then
xLstBox.Selected(i) = True
Exit For
End If
Next
Next i
End If
Else
xLstBox.Visible = False
xSelShp.Fill.ForeColor.RGB = RGB(91, 155, 213)
For i = xLstBox.ListCount - 1 To 0 Step -1
If xLstBox.Selected(i) = True Then
xSelLst = xLstBox.List(i) & ";" & xSelLst
End If
Next i
If xSelLst <> "" Then
Range("Target_1") = Mid(xSelLst, 1, Len(xSelLst) - 1)
Else
Range("Target_1") = ""
End If
End If
End Sub |
Le code tel quel appliqué à chaque forme qui sert au final de bouton fonctionne bien, j'aimerais du coup juste savoir s'il y avait un moyen de factoriser tout ceci pour n'appeler qu'une fonction (ou plusieurs...) dans mon code sur chaque bouton.
Merci à vous par avance pour vos retours.
Cordialement,
Talzatior.