Userform, Valeur des checkbox à l'initialisation et changement de ligne
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:
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:
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:
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:
Idem avec "ligne - 1"
Code d'Initialisation:
Code:
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.