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 du haut du Userform1 et de deux checkbox:
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 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
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 Remonter 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 d'Initialisation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Idem avec "ligne - 1"
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.
Partager