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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Merci à vous par avance pour vos retours.
Cordialement,
Talzatior.
Partager