Bonjour,

Grâce à la précieuse aide de plusieurs membres de ce forum je suis parvenu tant bien que mal à créer un formulaire (userform) avec un grand nombre de checkbox (quelques centaines).

J'ai créer le formulaire dans tout son ensemble ainsi que le code derrière chaque checkbox avec la valeur que chacune d'entre elle dois renvoyer. Tout fonctionne parfaitement sauf un petit détail :

Lorsque je reviens sur une ligne où j'ai déjà entrer plusieurs valeurs (séparées par des virgules) grâce au formulaire, certaines de ces valeurs sont supprimées. En générale toutes sauf la première.
J'ai cru comprendre que c'est cette suppression involontaire qui cause mon principal problème : les checkbox dont les valeurs sont déjà inscrites dans la cellule sélectionnée n’apparaissent pas cochées quand on repasse dessus avec le formulaire.

J'ai trois modes "d'entrées" sur une ligne :
-En double cliquant directement sur la case (ce qui ouvre le formulaire et permet d'éditer la cellule sélectionnée).
-En allant sur une ligne une fois le formulaire déjà ouvert, grâce à des boutons qui me permettent de remonter et descendre de ligne.

J'ai bidouillé tant que j'ai pu mais je n'ai pas réussis à résoudre ce problème.
C'est certainement pas très compliqué mais je n'arrive pas a reconnaitre le bout de code fautif...

Pour vous donner une idée, voilà une version lite du code de mon fichier:

Code en feuille 3:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 23 Then UserForm1.Show
End Sub
Code du haut du Userform1 et de deux checkbox:
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
Option Explicit
 
Dim tabl() As String
Dim ligne As Integer
 
 
 
 
 
Private Sub CheckBox1_Change()
Dim i As Integer
Dim variable As String
 
 
Range("X" & ligne).Clear
 
If CheckBox1.Value = True Then
    tabl(1) = "2339, "
Else
    tabl(1) = ""
End If
 
For i = 1 To 1000
    variable = variable & tabl(i)
Next
 
Range("X" & ligne).Value = variable
 
UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
 
End Sub
 
 
 
 
 
Private Sub CheckBox2_Change()
Dim i As Integer
Dim variable As String
 
Range("X" & ligne).Clear
 
If CheckBox2.Value = True Then
    tabl(2) = "2359, "
Else
    tabl(2) = ""
End If
 
For i = 1 To 1000
    variable = variable & tabl(i)
Next
 
Range("X" & ligne).Value = variable
 
UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
 
End Sub
Code Passer à la ligne:
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
 
 
Private Sub passeralaligne_Click()
 
 
ligne = ligne + 1
 
 
ReDim tabl(1000) As String
 
 
 
If Range("X" & ligne).Value Like "*" & "2339" & "*" Then
    CheckBox1.Value = True
Else
    CheckBox1.Value = False
End If
 
If Range("X" & ligne).Value Like "*" & "2359" & "*" Then
    CheckBox2.Value = True
Else
    CheckBox2.Value = False
End If
 
Label1.Caption = ligne
 
Label3.Caption = Range("g" & ligne).Value
 
Label4.Caption = Range("h" & ligne).Value
 
Label5.Caption = Range("i" & ligne).Value
 
UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
 
End Sub
Code Remonter la ligne :
Code d'Initialisation:
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
Private Sub UserForm_Initialize()
Dim i As Integer
 
' Initialise le tableau et la première ligne
ReDim tabl(1000) As String
ligne = ActiveCell.Row
 
Label1.Caption = ligne
 
Label3.Caption = Range("g" & ligne).Value
 
Label4.Caption = Range("h" & ligne).Value
 
Label5.Caption = Range("i" & ligne).Value
 
UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
 
If Range("X" & ligne).Value Like "*" & "2339" & "*" Then
    CheckBox1.Value = True
Else
    CheckBox1.Value = False
End If
 
If Range("X" & ligne).Value Like "*" & "2359" & "*" Then
    CheckBox2.Value = True
Else
    CheckBox2.Value = False
End If
 
 
End Sub

Merci d'avance à tous pour votre aide !

David.