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