Il reste quand-même dommage de ne pas mettre en oeuvre quelque-chose d'aussi simple que ceci :
Nouveau projet :
1) Sur Feuil1 : "Voilà une consigne" en A1 et 0 en B1
2) Sur un userform :
- Une textbox Textbox1
- une checkbox CheckBox1
et ce code :
Au lancement du userform : on constate que la textbox est vide et que la checkbox n'est pas cochéeCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Private Sub CheckBox1_Click() CheckBox1.Value = Worksheets("Feuil1").Range("B1") End Sub Private Sub UserForm_Activate() CheckBox1.ControlSource = "Feuil1!B1" End Sub Private Sub CheckBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) TextBox1.Text = Worksheets("Feuil1").Range("A1") If CheckBox1.Value = False Then Worksheets("Feuil1").Range("B1") = True End If End Sub
On clique sur la checkbox --->>> la consigne apparait dans la textbox et la checkbox est cochée
L'utilisateur est alors considéré comme ayant lu
S'il clique à nouveau sur la checkbox (pour relire la consigne éventuellement effacée par d'autres gestes) : la consigne réapparait dans la textbox et la checkbox reste cochée (il avait lu, donc non à décocher)
Voilà le principe simple. On peut s'amuser à l'agrémenter (modification du Caption de la checkbox selon qu'elle est non cochée - pour inviter à prendre connaissance de la consigne - puis, lorsqu'elle est cochée, d'un texte précisant qu'on peut toujours relire en cliquant sur la checkbox)
Voilà. Tout bête et sans va-et-vient en tous sens ni interventions par booléenne pour éviter l'effet "chien se mordant la queue".
Nota : que le mot "VRAI" ou "FAUX" apparaisse en B1 sur certaines machines et "TRUE" ou "FALS"E sur d'autres n'a absolument rien à voir avec la valeur conservée en mémoire par Excel (elle sera toujours True ou False)
EDIT : on obtiendrait d'ailleurs le même résultat en ne liant qu'après le mouseup et en bloquant ensuite (puisque si a été lu, a été lu)
Il vaut toutefois mieux mettre la liaison :Code:
1
2
3
4
5
6
7
8
9 Private Sub CheckBox1_Click() CheckBox1.Value = Not CheckBox1.Value ' on force à garder l'état End Sub Private Sub CheckBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) TextBox1.Text = Worksheets("Feuil1").Range("A1") ' on affiche systématiquement la consigne (lecture ou relecture) Worksheets("Feuil1").Range("B1") = True ' si on a cliqué, on a affiché et on est supposé lire CheckBox1.ControlSource = "Feuil1!B1" ' on lie maintenant B1 à la checkbox End Sub
dans l'évènement Activate même de l'Userform, si l'on veut que l'état de la checkbox soit conservé entre 2 sessions ou entre deux chargements de l'userform.Code:CheckBox1.ControlSource = "Feuil1!B1"