Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec groupe d'options

3 réponses
Avatar
Julien
Bonjour,

J'ai un groupe d'option ind=E9pendant de 3 valeurs et en=20
fonction de la valeur choisie, elle affecte une valeur =E0=20
un champ du formulaire (ce dernier stockant la valeur=20
dans une table) :

Select Case Me.groupe_option.Value
Case 1
Me.activity_steps.Value =3D "Valeur1"
Case 2
Me.activity_steps.Value =3D "Valeur2"
Case 3
Me.activity_steps.Value =3D "Valeur3"
Case Else
Me.activity_steps.Value =3D Null
End Select
End If

Jusque l=E0 aucun probl=E8me. Dans ce formulaire, lorsque la=20
valeur 3 a =E9t=E9 d=E9finie, il n'est plus possible de choisir=20
une autre option (le groupe d'options ne doit plus =EAtre=20
modifiable).

J'ai donc mis le code suivant l'=E9v=E9nement BeforeUpdate du=20
cadre groupe_option :

Private Sub groupe_option_BeforeUpdate(Cancel As=20
Integer) =20
If Me.activity_steps =3D "Valeur3" Then
MsgBox "Modification impossible.", vbCritical
Me.groupe_option.Undo
Cancel =3D True
Exit Sub
End If
End Sub

Si la valeur 3 est d=E9finie dans le groupe d'options et=20
que je clique sur une autre option (par exemple la=20
deuxi=E8me), le message s'affiche et la valeur n'est pas=20
modifi=E9e dans le champ activity_steps, mais le groupe=20
d'option affiche quand m=EAme la deuxi=E8me option comme=20
activ=E9e. Je souhaiterais que le groupe d'options reste=20
sur la valeur avant la modification (sinon =E7a pourrait=20
pr=EAter =E0 confusier). Je pensais que le Cancel =3D True=20
revenait =E0 l'=E9tat initial du groupe d'options, mais de=20
toute =E9vidence pas tout le temps.

Est-ce que quelqu'un =E0 une id=E9e pour garder l'option=20
activ=E9e avant modification ?

Merci de votre aide
Salutations =E0 tous
Julien

3 réponses

Avatar
Hubert Canevet
Bon, alors pour dire à quel point je suis frais, j'ai eu
le temps de taper tout un laïus pour dire que je n'avais
pas compris, avant de comprendre.

Donc, une fois qu'on a choisi l'option 3, ça
signifie "statut définitif", et on n'a plus le droit de
revenir en arrière.

J'avoue d'entrée que j'ai la flemme de faire des tests,
mais voilà ce que je tenterais : à l'arrivée sur un
enregistrement (Form_Current, si je ne m'abuse),
Groupe_Option.Locked = (activity_steps = "Valeur3"). Ce
qui a pour effet que si le champ activity_steps
vaut "Valeur3", il n'y a rien à programmer, l'utilisateur
ne peut pas modifier le groupe d'options. En revanche, si
le champ contient autre chose, on peut.

Il reste à informer l'utilisateur qui n'aurait pas compris.

Sub Groupe_Option_GotFocus()
If Groupe_Option.Locked then
MsgBox "Cet enregistrement a déjà reçu une validation
définitive. Modification impossible."
Endif
End Sub

Remplacer le mot enregistrement par ce qu'il désigne, bien
entendu. Un dossier, un colis, un étudiant ...

On peut trouver à critiquer : si on arrive sur le groupe
d'options par la touche tabulation, et qu'il est
verrouillé, alors on aura le message. Si ce n'est que
cela, on peut mettre Groupe_Option.TabStop = Not
(Groupe_Option.Locked), juste après avoir modifié Locked
donc dans Form_Current. Pour faire cela il n'est pas
impossible qu'on doive d'abord sélectionner un autre
contrôle à l'aide de la méthode SetFocus.


-----Message d'origine-----
Bonjour,

J'ai un groupe d'option indépendant de 3 valeurs et en
fonction de la valeur choisie, elle affecte une valeur à
un champ du formulaire (ce dernier stockant la valeur
dans une table) :

Select Case Me.groupe_option.Value
Case 1
Me.activity_steps.Value = "Valeur1"
Case 2
Me.activity_steps.Value = "Valeur2"
Case 3
Me.activity_steps.Value = "Valeur3"
Case Else
Me.activity_steps.Value = Null
End Select
End If

Jusque là aucun problème. Dans ce formulaire, lorsque la
valeur 3 a été définie, il n'est plus possible de choisir
une autre option (le groupe d'options ne doit plus être
modifiable).

J'ai donc mis le code suivant l'événement BeforeUpdate du
cadre groupe_option :

Private Sub groupe_option_BeforeUpdate(Cancel As
Integer)
If Me.activity_steps = "Valeur3" Then
MsgBox "Modification impossible.", vbCritical
Me.groupe_option.Undo
Cancel = True
Exit Sub
End If
End Sub

Si la valeur 3 est définie dans le groupe d'options et
que je clique sur une autre option (par exemple la
deuxième), le message s'affiche et la valeur n'est pas
modifiée dans le champ activity_steps, mais le groupe
d'option affiche quand même la deuxième option comme
activée. Je souhaiterais que le groupe d'options reste
sur la valeur avant la modification (sinon ça pourrait
prêter à confusier). Je pensais que le Cancel = True
revenait à l'état initial du groupe d'options, mais de
toute évidence pas tout le temps.

Est-ce que quelqu'un à une idée pour garder l'option
activée avant modification ?

Merci de votre aide
Salutations à tous
Julien


.



Avatar
Hubert Canevet
Bon, alors pour dire à quel point je suis frais, j'ai eu
le temps de taper tout un laïus pour dire que je n'avais
pas compris, avant de comprendre.

Donc, une fois qu'on a choisi l'option 3, ça
signifie "statut définitif", et on n'a plus le droit de
revenir en arrière.

J'avoue d'entrée que j'ai la flemme de faire des tests,
mais voilà ce que je tenterais : à l'arrivée sur un
enregistrement (Form_Current, si je ne m'abuse),
Groupe_Option.Locked = (activity_steps = "Valeur3"). Ce
qui a pour effet que si le champ activity_steps
vaut "Valeur3", il n'y a rien à programmer, l'utilisateur
ne peut pas modifier le groupe d'options. En revanche, si
le champ contient autre chose, on peut.

Il reste à informer l'utilisateur qui n'aurait pas compris.

Sub Groupe_Option_GotFocus()
If Groupe_Option.Locked then
MsgBox "Cet enregistrement a déjà reçu une validation
définitive. Modification impossible."
Endif
End Sub

Remplacer le mot enregistrement par ce qu'il désigne, bien
entendu. Un dossier, un colis, un étudiant ...

On peut trouver à critiquer : si on arrive sur le groupe
d'options par la touche tabulation, et qu'il est
verrouillé, alors on aura le message. Si ce n'est que
cela, on peut mettre Groupe_Option.TabStop = Not
(Groupe_Option.Locked), juste après avoir modifié Locked
donc dans Form_Current. Pour faire cela il n'est pas
impossible qu'on doive d'abord sélectionner un autre
contrôle à l'aide de la méthode SetFocus.


-----Message d'origine-----
Bonjour,

J'ai un groupe d'option indépendant de 3 valeurs et en
fonction de la valeur choisie, elle affecte une valeur à
un champ du formulaire (ce dernier stockant la valeur
dans une table) :

Select Case Me.groupe_option.Value
Case 1
Me.activity_steps.Value = "Valeur1"
Case 2
Me.activity_steps.Value = "Valeur2"
Case 3
Me.activity_steps.Value = "Valeur3"
Case Else
Me.activity_steps.Value = Null
End Select
End If

Jusque là aucun problème. Dans ce formulaire, lorsque la
valeur 3 a été définie, il n'est plus possible de choisir
une autre option (le groupe d'options ne doit plus être
modifiable).

J'ai donc mis le code suivant l'événement BeforeUpdate du
cadre groupe_option :

Private Sub groupe_option_BeforeUpdate(Cancel As
Integer)
If Me.activity_steps = "Valeur3" Then
MsgBox "Modification impossible.", vbCritical
Me.groupe_option.Undo
Cancel = True
Exit Sub
End If
End Sub

Si la valeur 3 est définie dans le groupe d'options et
que je clique sur une autre option (par exemple la
deuxième), le message s'affiche et la valeur n'est pas
modifiée dans le champ activity_steps, mais le groupe
d'option affiche quand même la deuxième option comme
activée. Je souhaiterais que le groupe d'options reste
sur la valeur avant la modification (sinon ça pourrait
prêter à confusier). Je pensais que le Cancel = True
revenait à l'état initial du groupe d'options, mais de
toute évidence pas tout le temps.

Est-ce que quelqu'un à une idée pour garder l'option
activée avant modification ?

Merci de votre aide
Salutations à tous
Julien


.



Avatar
Julien
Merci Hubert de ta réponse,

Elle a résolu mon problème en partie, mais j'ai toujours
un petit hic avec ce groupe d'options (j'ai oublié de te
dire que je travaille avec Access 2000).

Lorsque l'utilisateur active l'option 3 du groupe
d'options, j'ai mis un msgbox demandant de confirmer si
oui ou non, il souhaite activer cette option (comme tu
l'as justement dit c'est un statut définitif).

Et si il clique sur non, j'aimerais que le groupe
d'options revienne à la valeur précédente (1 ou 2 ou
Null). Et malheureusement, si l'utilisateur clique sur
Non dans la msgbox, le groupe d'option ne revient pas à
son état initial.

J'ai pourtant utilisé Cancel = True de l'événement
BeforeUpdate, j'ai également utilisé l'option
Me.groupe_option.Undo, mais rien n'y fait.

Je sèche... Si tu as une autre idée

En tout cas merci de ton aide et j'espère te relire

Julien


-----Message d'origine-----
Bon, alors pour dire à quel point je suis frais, j'ai eu
le temps de taper tout un laïus pour dire que je n'avais
pas compris, avant de comprendre.

Donc, une fois qu'on a choisi l'option 3, ça
signifie "statut définitif", et on n'a plus le droit de
revenir en arrière.

J'avoue d'entrée que j'ai la flemme de faire des tests,
mais voilà ce que je tenterais : à l'arrivée sur un
enregistrement (Form_Current, si je ne m'abuse),
Groupe_Option.Locked = (activity_steps = "Valeur3"). Ce
qui a pour effet que si le champ activity_steps
vaut "Valeur3", il n'y a rien à programmer,
l'utilisateur

ne peut pas modifier le groupe d'options. En revanche,
si

le champ contient autre chose, on peut.

Il reste à informer l'utilisateur qui n'aurait pas
compris.


Sub Groupe_Option_GotFocus()
If Groupe_Option.Locked then
MsgBox "Cet enregistrement a déjà reçu une validation
définitive. Modification impossible."
Endif
End Sub

Remplacer le mot enregistrement par ce qu'il désigne,
bien

entendu. Un dossier, un colis, un étudiant ...

On peut trouver à critiquer : si on arrive sur le groupe
d'options par la touche tabulation, et qu'il est
verrouillé, alors on aura le message. Si ce n'est que
cela, on peut mettre Groupe_Option.TabStop = Not
(Groupe_Option.Locked), juste après avoir modifié Locked
donc dans Form_Current. Pour faire cela il n'est pas
impossible qu'on doive d'abord sélectionner un autre
contrôle à l'aide de la méthode SetFocus.