contrôle de saisie d'un champ en fonction d'un autre champ
6 réponses
Lydya
Bonjour,
Dans un formulaire, j'ai un champ 1 qui peut prendre la valeur oui ou non
(liste)
Si la valeur "oui" est choisie, le champ 2 doit impérativement être rempli
(liste de choix)
Si la valeur "non" est choisie, le champ 2 ne doit absolument pas être
rempli
Après plusieurs recherches et de nombreuses tentatives, je patauge encore...
et je n'arrive à rien!
Voici une des versions de mon code, qui ne fonctionne pas correctement, cad,
quand le champ 1 est à "oui", le champ 2 reste verrouillé, ce qui fait qu'on
ne peut rien choisir et quand il est à "non", le champ 2 est bien verrouillé
mais impossible de valider le formulaire, de passer à l'enregistrement
suivant...
Si vous pouvez m'aider, merci beaucoup, par avance.
--
Private Sub Form_beforeUpdate(Cancel As Integer)
If Me.[Champ1] = "non" Then
MsgBox ("Ne rien saisir")
Cancel = True
Me.[Champ1].SetFocus
With Me.[Champ2]
.Enabled = False
.Locked = True
.Value = ""
End With
End If
If Me.[Champ1].Value = "oui" And IsNull(Me.[Champ2]) Then
Cancel = True
MsgBox "Remplir le champ2"
With Me.[Champ2]
.Enabled = True
.Locked = False
.SetFocus
End With
End If
End Sub
--
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Xavier HUE
Bonjour Lydia,
1) Il faut activer ou non tes zones à chaque changement d'enregistrement.
Private Sub Form_current() Select Case Me.[Champ1] Case "non" Me.[Champ1].SetFocus 'Cette ligne n'est peut être pas nécessaire (dépend du premier controle qui obtient le focus) Me.[Champ2].Enabled = False
Case "oui" Me.[Champ2].Enabled = True
Case Else MsgBox "Valeur champ1 incorrect" Me.[Champ2].Enabled = True End Select
End Sub
2) Il faut activer Champ2 si champ1 passe à "oui" lors de modif
Private Sub Champ1_afterUpdate() ou Champ1_Change() Select Case Me.[Champ1] Case "non" Me.[Champ1].SetFocus Me.[Champ2].Enabled = False Me.[Champ2].Value = "" 'A voir si à faire systématiquement ou seulement avant mise à jour
Case "oui" Me.[Champ2].Enabled = True
End Select End Sub
3) Ta procédure de controle:
Private Sub Form_beforeUpdate(Cancel As Integer)
Select Case Me.[Champ1] Case "non" MsgBox ("Ne rien saisir") Me.[Champ1].SetFocus With Me.[Champ2] .Enabled = False .Value = "" End With
Case "oui" If IsNull(Me.[Champ2]) Then Cancel = True MsgBox "Remplir le champ2" Me.[Champ2].SetFocus End With
Case Else
MsgBox "Valeur incorrect Champ1"
End Select
End Sub
Sauf erreur de ma part (pas testé) Cordialement.
Bonjour Lydia,
1) Il faut activer ou non tes zones à chaque changement
d'enregistrement.
Private Sub Form_current()
Select Case Me.[Champ1]
Case "non"
Me.[Champ1].SetFocus 'Cette ligne n'est peut être pas
nécessaire (dépend du premier controle qui obtient le
focus)
Me.[Champ2].Enabled = False
Case "oui"
Me.[Champ2].Enabled = True
Case Else
MsgBox "Valeur champ1 incorrect"
Me.[Champ2].Enabled = True
End Select
End Sub
2) Il faut activer Champ2 si champ1 passe à "oui" lors de
modif
Private Sub Champ1_afterUpdate() ou Champ1_Change()
Select Case Me.[Champ1]
Case "non"
Me.[Champ1].SetFocus
Me.[Champ2].Enabled = False
Me.[Champ2].Value = "" 'A voir si à faire
systématiquement ou seulement avant mise à jour
Case "oui"
Me.[Champ2].Enabled = True
End Select
End Sub
3) Ta procédure de controle:
Private Sub Form_beforeUpdate(Cancel As Integer)
Select Case Me.[Champ1]
Case "non"
MsgBox ("Ne rien saisir")
Me.[Champ1].SetFocus
With Me.[Champ2]
.Enabled = False
.Value = ""
End With
Case "oui"
If IsNull(Me.[Champ2]) Then
Cancel = True
MsgBox "Remplir le champ2"
Me.[Champ2].SetFocus
End With
1) Il faut activer ou non tes zones à chaque changement d'enregistrement.
Private Sub Form_current() Select Case Me.[Champ1] Case "non" Me.[Champ1].SetFocus 'Cette ligne n'est peut être pas nécessaire (dépend du premier controle qui obtient le focus) Me.[Champ2].Enabled = False
Case "oui" Me.[Champ2].Enabled = True
Case Else MsgBox "Valeur champ1 incorrect" Me.[Champ2].Enabled = True End Select
End Sub
2) Il faut activer Champ2 si champ1 passe à "oui" lors de modif
Private Sub Champ1_afterUpdate() ou Champ1_Change() Select Case Me.[Champ1] Case "non" Me.[Champ1].SetFocus Me.[Champ2].Enabled = False Me.[Champ2].Value = "" 'A voir si à faire systématiquement ou seulement avant mise à jour
Case "oui" Me.[Champ2].Enabled = True
End Select End Sub
3) Ta procédure de controle:
Private Sub Form_beforeUpdate(Cancel As Integer)
Select Case Me.[Champ1] Case "non" MsgBox ("Ne rien saisir") Me.[Champ1].SetFocus With Me.[Champ2] .Enabled = False .Value = "" End With
Case "oui" If IsNull(Me.[Champ2]) Then Cancel = True MsgBox "Remplir le champ2" Me.[Champ2].SetFocus End With
Case Else
MsgBox "Valeur incorrect Champ1"
End Select
End Sub
Sauf erreur de ma part (pas testé) Cordialement.
Lydya
Bonsoir Xavier,
Un grand merci pour ton aide. J'ai juste supprimé 2 msgbox et le Case Else de la procédure de contrôle et ça marche bien.
Deux petites choses que j'aimerais bien améliorer: Lorsque le champ 1 est à "non", que le champ 2 est donc désactivé, si je passe à l'enregistrement suivant, le focus revient sur le dernier champ du formulaire qui a eu le focus dans l'enregistrement en cours et je dois recliquer une deuxième fois sur la flèche de navigation pour avoir une grille vierge et saisir un nouvel enregistrement. => Comment passer directement à un nouvel enregistrement? => Si je veux, à chaque nouvel enregistrement, donner le focus au premier champ du formulaire (quel qu'il soit), où dois-je placer l'instruction?
Encore merci!
Lydya
"Xavier HUE" a écrit dans le message de news:1879301c41b28$72070140$ Bonjour Lydia,
1) Il faut activer ou non tes zones à chaque changement d'enregistrement.
Private Sub Form_current() Select Case Me.[Champ1] Case "non" Me.[Champ1].SetFocus 'Cette ligne n'est peut être pas nécessaire (dépend du premier controle qui obtient le focus) Me.[Champ2].Enabled = False
Case "oui" Me.[Champ2].Enabled = True
Case Else MsgBox "Valeur champ1 incorrect" Me.[Champ2].Enabled = True End Select
End Sub
2) Il faut activer Champ2 si champ1 passe à "oui" lors de modif
Private Sub Champ1_afterUpdate() ou Champ1_Change() Select Case Me.[Champ1] Case "non" Me.[Champ1].SetFocus Me.[Champ2].Enabled = False Me.[Champ2].Value = "" 'A voir si à faire systématiquement ou seulement avant mise à jour
Case "oui" Me.[Champ2].Enabled = True
End Select End Sub
3) Ta procédure de controle:
Private Sub Form_beforeUpdate(Cancel As Integer)
Select Case Me.[Champ1] Case "non" MsgBox ("Ne rien saisir") Me.[Champ1].SetFocus With Me.[Champ2] .Enabled = False .Value = "" End With
Case "oui" If IsNull(Me.[Champ2]) Then Cancel = True MsgBox "Remplir le champ2" Me.[Champ2].SetFocus End With
Case Else
MsgBox "Valeur incorrect Champ1"
End Select
End Sub
Sauf erreur de ma part (pas testé) Cordialement.
Bonsoir Xavier,
Un grand merci pour ton aide.
J'ai juste supprimé 2 msgbox et le Case Else de la procédure de contrôle et
ça marche bien.
Deux petites choses que j'aimerais bien améliorer:
Lorsque le champ 1 est à "non", que le champ 2 est donc désactivé, si je
passe à l'enregistrement suivant, le focus revient sur le dernier champ du
formulaire qui a eu le focus dans l'enregistrement en cours et je dois
recliquer une deuxième fois sur la flèche de navigation pour avoir une
grille vierge et saisir un nouvel enregistrement.
=> Comment passer directement à un nouvel enregistrement?
=> Si je veux, à chaque nouvel enregistrement, donner le focus au premier
champ du formulaire (quel qu'il soit), où dois-je placer l'instruction?
Encore merci!
Lydya
"Xavier HUE" <elxavpub@bupfree.fr> a écrit dans le message de
news:1879301c41b28$72070140$a401280a@phx.gbl...
Bonjour Lydia,
1) Il faut activer ou non tes zones à chaque changement
d'enregistrement.
Private Sub Form_current()
Select Case Me.[Champ1]
Case "non"
Me.[Champ1].SetFocus 'Cette ligne n'est peut être pas
nécessaire (dépend du premier controle qui obtient le
focus)
Me.[Champ2].Enabled = False
Case "oui"
Me.[Champ2].Enabled = True
Case Else
MsgBox "Valeur champ1 incorrect"
Me.[Champ2].Enabled = True
End Select
End Sub
2) Il faut activer Champ2 si champ1 passe à "oui" lors de
modif
Private Sub Champ1_afterUpdate() ou Champ1_Change()
Select Case Me.[Champ1]
Case "non"
Me.[Champ1].SetFocus
Me.[Champ2].Enabled = False
Me.[Champ2].Value = "" 'A voir si à faire
systématiquement ou seulement avant mise à jour
Case "oui"
Me.[Champ2].Enabled = True
End Select
End Sub
3) Ta procédure de controle:
Private Sub Form_beforeUpdate(Cancel As Integer)
Select Case Me.[Champ1]
Case "non"
MsgBox ("Ne rien saisir")
Me.[Champ1].SetFocus
With Me.[Champ2]
.Enabled = False
.Value = ""
End With
Case "oui"
If IsNull(Me.[Champ2]) Then
Cancel = True
MsgBox "Remplir le champ2"
Me.[Champ2].SetFocus
End With
Un grand merci pour ton aide. J'ai juste supprimé 2 msgbox et le Case Else de la procédure de contrôle et ça marche bien.
Deux petites choses que j'aimerais bien améliorer: Lorsque le champ 1 est à "non", que le champ 2 est donc désactivé, si je passe à l'enregistrement suivant, le focus revient sur le dernier champ du formulaire qui a eu le focus dans l'enregistrement en cours et je dois recliquer une deuxième fois sur la flèche de navigation pour avoir une grille vierge et saisir un nouvel enregistrement. => Comment passer directement à un nouvel enregistrement? => Si je veux, à chaque nouvel enregistrement, donner le focus au premier champ du formulaire (quel qu'il soit), où dois-je placer l'instruction?
Encore merci!
Lydya
"Xavier HUE" a écrit dans le message de news:1879301c41b28$72070140$ Bonjour Lydia,
1) Il faut activer ou non tes zones à chaque changement d'enregistrement.
Private Sub Form_current() Select Case Me.[Champ1] Case "non" Me.[Champ1].SetFocus 'Cette ligne n'est peut être pas nécessaire (dépend du premier controle qui obtient le focus) Me.[Champ2].Enabled = False
Case "oui" Me.[Champ2].Enabled = True
Case Else MsgBox "Valeur champ1 incorrect" Me.[Champ2].Enabled = True End Select
End Sub
2) Il faut activer Champ2 si champ1 passe à "oui" lors de modif
Private Sub Champ1_afterUpdate() ou Champ1_Change() Select Case Me.[Champ1] Case "non" Me.[Champ1].SetFocus Me.[Champ2].Enabled = False Me.[Champ2].Value = "" 'A voir si à faire systématiquement ou seulement avant mise à jour
Case "oui" Me.[Champ2].Enabled = True
End Select End Sub
3) Ta procédure de controle:
Private Sub Form_beforeUpdate(Cancel As Integer)
Select Case Me.[Champ1] Case "non" MsgBox ("Ne rien saisir") Me.[Champ1].SetFocus With Me.[Champ2] .Enabled = False .Value = "" End With
Case "oui" If IsNull(Me.[Champ2]) Then Cancel = True MsgBox "Remplir le champ2" Me.[Champ2].SetFocus End With
Case Else
MsgBox "Valeur incorrect Champ1"
End Select
End Sub
Sauf erreur de ma part (pas testé) Cordialement.
Xavier HUE
Bonjour Lydia,
Lorsque le champ 1 est à "non", que le champ 2 est donc désactivé, si je
passe à l'enregistrement suivant, le focus revient sur le dernier champ du
formulaire qui a eu le focus dans l'enregistrement en cours et je dois
recliquer une deuxième fois sur la flèche de navigation pour avoir une
grille vierge et saisir un nouvel enregistrement. Pas facile de te dépanner comme ça!
Au moment où tu clic sur le bouton permettant d'atteindre un nouvel enregistrement (Etoile dans les boutons de navigation), est-ce que ton enregistrement est en cours de modif? Si oui, c'est peut être le Me.[Champ1].SetFocus dans la procédure afterUpdate du formulaire qui "gêne"...
Si le code de ton formulaire n'est pas trop important, poste ici, et je jetterai un oeil.
=> Si je veux, à chaque nouvel enregistrement, donner le focus au premier
champ du formulaire (quel qu'il soit), où dois-je placer l'instruction?
Dans l'Evènement Form_Current. Cet évènement déclenche à chaque changement d'enregistrement.
Private Sub Form_current() 'Donner le Focus à un controle Me.[TonControlAActiver].SetFocus 'ne doit pas être [Champ2] car sa désactivation plus bas plantera
Select Case Me.[Champ1] Case "non" Me.[Champ2].Enabled = False
Case "oui" Me.[Champ2].Enabled = True
End Select
Cordialement.
Bonjour Lydia,
Lorsque le champ 1 est à "non", que le champ 2 est donc
désactivé, si je
passe à l'enregistrement suivant, le focus revient sur le
dernier champ du
formulaire qui a eu le focus dans l'enregistrement en
cours et je dois
recliquer une deuxième fois sur la flèche de navigation
pour avoir une
grille vierge et saisir un nouvel enregistrement.
Pas facile de te dépanner comme ça!
Au moment où tu clic sur le bouton permettant d'atteindre
un nouvel enregistrement (Etoile dans les boutons de
navigation), est-ce que ton enregistrement est en cours de
modif? Si oui, c'est peut être le Me.[Champ1].SetFocus
dans la procédure afterUpdate du formulaire qui "gêne"...
Si le code de ton formulaire n'est pas trop important,
poste ici, et je jetterai un oeil.
=> Si je veux, à chaque nouvel enregistrement, donner le
focus au premier
champ du formulaire (quel qu'il soit), où dois-je placer
l'instruction?
Dans l'Evènement Form_Current.
Cet évènement déclenche à chaque changement
d'enregistrement.
Private Sub Form_current()
'Donner le Focus à un controle
Me.[TonControlAActiver].SetFocus 'ne doit pas être
[Champ2] car sa désactivation plus bas plantera
Select Case Me.[Champ1]
Case "non"
Me.[Champ2].Enabled = False
Lorsque le champ 1 est à "non", que le champ 2 est donc désactivé, si je
passe à l'enregistrement suivant, le focus revient sur le dernier champ du
formulaire qui a eu le focus dans l'enregistrement en cours et je dois
recliquer une deuxième fois sur la flèche de navigation pour avoir une
grille vierge et saisir un nouvel enregistrement. Pas facile de te dépanner comme ça!
Au moment où tu clic sur le bouton permettant d'atteindre un nouvel enregistrement (Etoile dans les boutons de navigation), est-ce que ton enregistrement est en cours de modif? Si oui, c'est peut être le Me.[Champ1].SetFocus dans la procédure afterUpdate du formulaire qui "gêne"...
Si le code de ton formulaire n'est pas trop important, poste ici, et je jetterai un oeil.
=> Si je veux, à chaque nouvel enregistrement, donner le focus au premier
champ du formulaire (quel qu'il soit), où dois-je placer l'instruction?
Dans l'Evènement Form_Current. Cet évènement déclenche à chaque changement d'enregistrement.
Private Sub Form_current() 'Donner le Focus à un controle Me.[TonControlAActiver].SetFocus 'ne doit pas être [Champ2] car sa désactivation plus bas plantera
Select Case Me.[Champ1] Case "non" Me.[Champ2].Enabled = False
Case "oui" Me.[Champ2].Enabled = True
End Select
Cordialement.
Lydya
Bonjour Xavier,
J'ai enlevé le premier focus de la procédure de contrôle (Case "non") et je l'ai placé au début de la procédure Form_current et c'est impeccable. Par contre, j'ai encore un petit souci: Lorsque je modifie un enregistrement dont le champ 1 était "non" pour le mettre à "oui", je n'ai plus l'obligation de saisir le champ 2 avant de quitter l'enregistrement. J'ai tenté de rajouter le test If isNull(Me.[Champ2] etc. dans le Case "oui" de la procédure Domicile_afterUpdate (jai essayé Domicile_Change aussi) mais bizarrement... ça ne le fait pas! Voilà où en est mon (ton) code: -- '1) activation ou non des zones à chaque changement d'enregistrement
Private Sub Form_current() Me.[PremierChampForm].SetFocus
Select Case Me.[Champ1] Case "non" Me.[Champ2].Enabled = False
Case "oui" Me.[Champ2].Enabled = True
Case Else Me.[Champ2].Enabled = True
End Select End Sub
'2) Activation Champ2 si champ1 passe à "oui" lors de modif
Private Sub Champ1_Change() 'ou Champ1_afterUpdate()
Select Case Me.[Champ1] Case "non" Me.[Champ1].SetFocus Me.[Champ2].Enabled = False Me.[Champ2].Value = ""
Case "oui" Me.[Champ2].Enabled = True
End Select
End Sub
'3) Procédure de contrôle:
Private Sub Form_beforeUpdate(Cancel As Integer)
Select Case Me.[Champ1] Case "non" With Me.[Champ2] .Enabled = False .Value = "" End With
Case "oui" If IsNull(Me.[Champ2]) Then Cancel = True MsgBox "Remplir le Champ2" Me.[Champ2].SetFocus End If
End Select
End Sub -- Ah c'est pas facile Access!! Merci de ta patience, j'apprends beaucoup de choses :-)
A bientôt.
Lydya
"Xavier HUE" a écrit dans le message de news:18b0601c41bb1$7290cc70$ Bonjour Lydia,
Lorsque le champ 1 est à "non", que le champ 2 est donc désactivé, si je
passe à l'enregistrement suivant, le focus revient sur le dernier champ du
formulaire qui a eu le focus dans l'enregistrement en cours et je dois
recliquer une deuxième fois sur la flèche de navigation pour avoir une
grille vierge et saisir un nouvel enregistrement. Pas facile de te dépanner comme ça!
Au moment où tu clic sur le bouton permettant d'atteindre un nouvel enregistrement (Etoile dans les boutons de navigation), est-ce que ton enregistrement est en cours de modif? Si oui, c'est peut être le Me.[Champ1].SetFocus dans la procédure afterUpdate du formulaire qui "gêne"...
Si le code de ton formulaire n'est pas trop important, poste ici, et je jetterai un oeil.
=> Si je veux, à chaque nouvel enregistrement, donner le focus au premier
champ du formulaire (quel qu'il soit), où dois-je placer l'instruction?
Dans l'Evènement Form_Current. Cet évènement déclenche à chaque changement d'enregistrement.
Private Sub Form_current() 'Donner le Focus à un controle Me.[TonControlAActiver].SetFocus 'ne doit pas être [Champ2] car sa désactivation plus bas plantera
Select Case Me.[Champ1] Case "non" Me.[Champ2].Enabled = False
Case "oui" Me.[Champ2].Enabled = True
End Select
Cordialement.
Bonjour Xavier,
J'ai enlevé le premier focus de la procédure de contrôle (Case "non") et je
l'ai placé au début de la procédure Form_current et c'est impeccable.
Par contre, j'ai encore un petit souci:
Lorsque je modifie un enregistrement dont le champ 1 était "non" pour le
mettre à "oui", je n'ai plus l'obligation de saisir le champ 2 avant de
quitter l'enregistrement.
J'ai tenté de rajouter le test If isNull(Me.[Champ2] etc. dans le Case "oui"
de la procédure Domicile_afterUpdate (jai essayé Domicile_Change aussi) mais
bizarrement... ça ne le fait pas!
Voilà où en est mon (ton) code:
--
'1) activation ou non des zones à chaque changement d'enregistrement
Private Sub Form_current()
Me.[PremierChampForm].SetFocus
Select Case Me.[Champ1]
Case "non"
Me.[Champ2].Enabled = False
Case "oui"
Me.[Champ2].Enabled = True
Case Else
Me.[Champ2].Enabled = True
End Select
End Sub
'2) Activation Champ2 si champ1 passe à "oui" lors de modif
Private Sub Champ1_Change() 'ou Champ1_afterUpdate()
Select Case Me.[Champ1]
Case "non"
Me.[Champ1].SetFocus
Me.[Champ2].Enabled = False
Me.[Champ2].Value = ""
Case "oui"
Me.[Champ2].Enabled = True
End Select
End Sub
'3) Procédure de contrôle:
Private Sub Form_beforeUpdate(Cancel As Integer)
Select Case Me.[Champ1]
Case "non"
With Me.[Champ2]
.Enabled = False
.Value = ""
End With
Case "oui"
If IsNull(Me.[Champ2]) Then
Cancel = True
MsgBox "Remplir le Champ2"
Me.[Champ2].SetFocus
End If
End Select
End Sub
--
Ah c'est pas facile Access!!
Merci de ta patience, j'apprends beaucoup de choses :-)
A bientôt.
Lydya
"Xavier HUE" <elxavpub@bupfree.fr> a écrit dans le message de
news:18b0601c41bb1$7290cc70$a301280a@phx.gbl...
Bonjour Lydia,
Lorsque le champ 1 est à "non", que le champ 2 est donc
désactivé, si je
passe à l'enregistrement suivant, le focus revient sur le
dernier champ du
formulaire qui a eu le focus dans l'enregistrement en
cours et je dois
recliquer une deuxième fois sur la flèche de navigation
pour avoir une
grille vierge et saisir un nouvel enregistrement.
Pas facile de te dépanner comme ça!
Au moment où tu clic sur le bouton permettant d'atteindre
un nouvel enregistrement (Etoile dans les boutons de
navigation), est-ce que ton enregistrement est en cours de
modif? Si oui, c'est peut être le Me.[Champ1].SetFocus
dans la procédure afterUpdate du formulaire qui "gêne"...
Si le code de ton formulaire n'est pas trop important,
poste ici, et je jetterai un oeil.
=> Si je veux, à chaque nouvel enregistrement, donner le
focus au premier
champ du formulaire (quel qu'il soit), où dois-je placer
l'instruction?
Dans l'Evènement Form_Current.
Cet évènement déclenche à chaque changement
d'enregistrement.
Private Sub Form_current()
'Donner le Focus à un controle
Me.[TonControlAActiver].SetFocus 'ne doit pas être
[Champ2] car sa désactivation plus bas plantera
Select Case Me.[Champ1]
Case "non"
Me.[Champ2].Enabled = False
J'ai enlevé le premier focus de la procédure de contrôle (Case "non") et je l'ai placé au début de la procédure Form_current et c'est impeccable. Par contre, j'ai encore un petit souci: Lorsque je modifie un enregistrement dont le champ 1 était "non" pour le mettre à "oui", je n'ai plus l'obligation de saisir le champ 2 avant de quitter l'enregistrement. J'ai tenté de rajouter le test If isNull(Me.[Champ2] etc. dans le Case "oui" de la procédure Domicile_afterUpdate (jai essayé Domicile_Change aussi) mais bizarrement... ça ne le fait pas! Voilà où en est mon (ton) code: -- '1) activation ou non des zones à chaque changement d'enregistrement
Private Sub Form_current() Me.[PremierChampForm].SetFocus
Select Case Me.[Champ1] Case "non" Me.[Champ2].Enabled = False
Case "oui" Me.[Champ2].Enabled = True
Case Else Me.[Champ2].Enabled = True
End Select End Sub
'2) Activation Champ2 si champ1 passe à "oui" lors de modif
Private Sub Champ1_Change() 'ou Champ1_afterUpdate()
Select Case Me.[Champ1] Case "non" Me.[Champ1].SetFocus Me.[Champ2].Enabled = False Me.[Champ2].Value = ""
Case "oui" Me.[Champ2].Enabled = True
End Select
End Sub
'3) Procédure de contrôle:
Private Sub Form_beforeUpdate(Cancel As Integer)
Select Case Me.[Champ1] Case "non" With Me.[Champ2] .Enabled = False .Value = "" End With
Case "oui" If IsNull(Me.[Champ2]) Then Cancel = True MsgBox "Remplir le Champ2" Me.[Champ2].SetFocus End If
End Select
End Sub -- Ah c'est pas facile Access!! Merci de ta patience, j'apprends beaucoup de choses :-)
A bientôt.
Lydya
"Xavier HUE" a écrit dans le message de news:18b0601c41bb1$7290cc70$ Bonjour Lydia,
Lorsque le champ 1 est à "non", que le champ 2 est donc désactivé, si je
passe à l'enregistrement suivant, le focus revient sur le dernier champ du
formulaire qui a eu le focus dans l'enregistrement en cours et je dois
recliquer une deuxième fois sur la flèche de navigation pour avoir une
grille vierge et saisir un nouvel enregistrement. Pas facile de te dépanner comme ça!
Au moment où tu clic sur le bouton permettant d'atteindre un nouvel enregistrement (Etoile dans les boutons de navigation), est-ce que ton enregistrement est en cours de modif? Si oui, c'est peut être le Me.[Champ1].SetFocus dans la procédure afterUpdate du formulaire qui "gêne"...
Si le code de ton formulaire n'est pas trop important, poste ici, et je jetterai un oeil.
=> Si je veux, à chaque nouvel enregistrement, donner le focus au premier
champ du formulaire (quel qu'il soit), où dois-je placer l'instruction?
Dans l'Evènement Form_Current. Cet évènement déclenche à chaque changement d'enregistrement.
Private Sub Form_current() 'Donner le Focus à un controle Me.[TonControlAActiver].SetFocus 'ne doit pas être [Champ2] car sa désactivation plus bas plantera
Select Case Me.[Champ1] Case "non" Me.[Champ2].Enabled = False
Case "oui" Me.[Champ2].Enabled = True
End Select
Cordialement.
Xavier HUE
Re,
Essaie dans beforeUpdate du formulaire:
Case "oui" If IsNull(Me.[Champ2]) Or Me.[Champ2] = "" Then
A tout hasard.
Cordialement.
Re,
Essaie dans beforeUpdate du formulaire:
Case "oui"
If IsNull(Me.[Champ2]) Or Me.[Champ2] = "" Then