Bonjour à tous,

J'ai besoin pour un projet d'intégrer dans un tableau des cellules qui ouvrent une liste déroulante de choix à cocher, lesquels sont ensuite intégrés dans la cellule séparés par des virgules.
Pour moi qui suis novice en VBA c'est déjà un défi. J'ai pourtant réussi à trouver un fichier exemple qui correspond exactement à ce que je veux et je pensais pouvoir le réadapter à ma sauce mais... ça ne marche pas comme je voudrais.
Le problème c'est que je ne comprends pas très bien le code que j'ai récupéré, alors je vous montre.
Donc l'idée vous vous en doutez est d'insérer une listbox que j'ai nommé lbxFormation dans mon fichier et ensuite voici le code associé :

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Option Explicit

Dim interne As Boolean
Sub LbxFormation_Change()
    Dim ch As String, i As Long, sep As String
    If Not interne Then
        ch = ""
        sep = ", "
        For i = 0 To lbxFormation.ListCount - 1
            If lbxFormation.Selected(i) = True Then ch = ch & sep & lbxFormation.List(i)
        Next i
        ch = Mid(ch, Len(sep) + 1)
        ActiveCell = ch
    End If
End Sub

Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim ch As String, ch2 As String, pos As Long, i As Long
    Dim plage, nomListe, numListe As Long, topIndex As Boolean
    
    ' plages avec sélection multiple sur cette feuille
    plage = Array("lstSouhaits")
    ' nom des liste dans la feuille liste (en liaison avec les plages définies au-dessus)
    nomListe = Array("lstFormation")
    ' plage concernée ?
    For numListe = 0 To UBound(plage)
        If Not Intersect(Target, Range(plage(numListe))) Is Nothing Then Exit For
    Next numListe

    If numListe <= UBound(plage) Then ' si plage de liste existant
        ' initialiser listbox
        lbxFormation.ListFillRange = "BDD Formations!" & Worksheets("BDD Formations").Range(nomListe(numListe)).Address
        lbxFormation.Top = Target.Offset(1, 0).Top
        lbxFormation.Left = Target.Offset(0, 1).Left

        interne = True
        ch = ActiveCell
        ch2 = ", " & ch & ", "
        topIndex = False
        ' sélectionner selon contenu cellule
        For i = 0 To lbxFormation.ListCount - 1
            If InStr(ch2, ", " & lbxFormation.List(i) & ", ") > 0 Then
                ' l'item a été trouvé dans la cellule
                lbxFormation.Selected(i) = True
                If Not topIndex Then
                    lbxFormation.topIndex = i    ' le 1er sélectionné doit être visible dans la textbox
                    topIndex = True
                End If
            End If
        Next i
        interne = False
        ' afficher textbox
        lbxFormation.Visible = True
    Else
        ' ne plus afficher la textbox
        lbxFormation.Visible = False
    End If
End Sub

Sub reinit()
    Application.EnableEvents = True
End Sub
La ligne que j'ai mis en rouge pose apparemment problème, elle vide la ListBox. Si je la retire, ça fonctionne à peu près, sauf que ça ne réinitialise pas la listbox, donc les choix faits précédemment réapparaissent quand on clique sur une nouvelle cellule. Mais je pense aussi que la partie juste au dessus qui cherche à savoir si la cellule contient tel ou tel item ne fonctionne pas non plus.

Bref je suis un peu perdu et je ne sais pas trop comment m'en sortir...

Merci d'avance pour votre aide