OVH Cloud OVH Cloud

Tester si un control est verrouillé

6 réponses
Avatar
Didier LONGET
Bonjour,

Dans un formulaire j'aimerais tester si l'utilisateur a rempli tous les
champs obligatoires et l'inviter à le faire en positionnant le curseur sur le
champ non rempli...
la routine suivante fonctionne très bien :

Private Sub Sauvegarder_Click()
Dim Ctl As Control
For Each Ctl In Me.Controls

If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
GoTo FIN2
Else
End If

Next Ctl
Enregistrement
FIN2:
End Sub

Sauf...que certain controle sont bloqués volontairement...comment procéder
pour que ma routine saute un controle s'il n'est pas activé ???

du genre : if me.controls.enable = false then goto FIN2:

6 réponses

Avatar
Raymond [mvp]
Bonjour.

tu as indiqué la réponse toi-même.
il faut rajouter le test dans ta procédure mais il serait préférable de
placer toutes tes fonctions dans l'événement beforeupdate ( à voir):
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Ctl As Control
For Each Ctl In Me.Controls
If Ctl.Enabled Then
If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
Cancel = True
Exit Sub
End If
End If
Next Ctl
Enregistrement
End Sub

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier LONGET" <Didier a écrit dans le
message de news:
Bonjour,

Dans un formulaire j'aimerais tester si l'utilisateur a rempli tous les
champs obligatoires et l'inviter à le faire en positionnant le curseur sur
le
champ non rempli...
la routine suivante fonctionne très bien :

Private Sub Sauvegarder_Click()
Dim Ctl As Control
For Each Ctl In Me.Controls

If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
GoTo FIN2
Else
End If

Next Ctl
Enregistrement
FIN2:
End Sub

Sauf...que certain controle sont bloqués volontairement...comment procéder
pour que ma routine saute un controle s'il n'est pas activé ???

du genre : if me.controls.enable = false then goto FIN2:


Avatar
Didier LONGET
Merci infiniment Raymond....en fait je bloquais car je m'évertuais à faire un
test du genre : If Ctl.Enabled=true then...

En tout cas, tes réponses pertinentes et ta DISPONIBILITE nous font, nous
amateurs, nous réconcilier avec le genre humain....!!!!!

Cordialement

Didier






Bonjour.

tu as indiqué la réponse toi-même.
il faut rajouter le test dans ta procédure mais il serait préférable de
placer toutes tes fonctions dans l'événement beforeupdate ( à voir):
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Ctl As Control
For Each Ctl In Me.Controls
If Ctl.Enabled Then
If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
Cancel = True
Exit Sub
End If
End If
Next Ctl
Enregistrement
End Sub

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier LONGET" <Didier a écrit dans le
message de news:
Bonjour,

Dans un formulaire j'aimerais tester si l'utilisateur a rempli tous les
champs obligatoires et l'inviter à le faire en positionnant le curseur sur
le
champ non rempli...
la routine suivante fonctionne très bien :

Private Sub Sauvegarder_Click()
Dim Ctl As Control
For Each Ctl In Me.Controls

If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
GoTo FIN2
Else
End If

Next Ctl
Enregistrement
FIN2:
End Sub

Sauf...que certain controle sont bloqués volontairement...comment procéder
pour que ma routine saute un controle s'il n'est pas activé ???

du genre : if me.controls.enable = false then goto FIN2:







Avatar
Didier LONGET
Bonjour,

J'obtiens le code erreur 438....me manquerait t'il une référence....j'ai
beau cherché je ne trouve pas...
quand je tape ctl l'option enabled n'apparait pas....

Merci de votre patience...
cordialement
Didier

"Raymond [mvp]" wrote:

Bonjour.

tu as indiqué la réponse toi-même.
il faut rajouter le test dans ta procédure mais il serait préférable de
placer toutes tes fonctions dans l'événement beforeupdate ( à voir):
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Ctl As Control
For Each Ctl In Me.Controls
If Ctl.Enabled Then
If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
Cancel = True
Exit Sub
End If
End If
Next Ctl
Enregistrement
End Sub

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier LONGET" <Didier a écrit dans le
message de news:
Bonjour,

Dans un formulaire j'aimerais tester si l'utilisateur a rempli tous les
champs obligatoires et l'inviter à le faire en positionnant le curseur sur
le
champ non rempli...
la routine suivante fonctionne très bien :

Private Sub Sauvegarder_Click()
Dim Ctl As Control
For Each Ctl In Me.Controls

If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
GoTo FIN2
Else
End If

Next Ctl
Enregistrement
FIN2:
End Sub

Sauf...que certain controle sont bloqués volontairement...comment procéder
pour que ma routine saute un controle s'il n'est pas activé ???

du genre : if me.controls.enable = false then goto FIN2:







Avatar
Raymond [mvp]
l'option n'apparaît pas mais elle est bonne de même que controltype.

il faut compléter ta procédure en te limitant aux contrôles texte sinon tu
auras des erreurs sur les boutons et les étiquettes.
exemple ( à compléter )
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Ctl As Control
For Each Ctl In Me.Controls
If Ctl.ControlType = acTextBox Then
If Ctl.Enabled Then
If IsNull(Ctl) Then
Ctl.SetFocus
MsgBox "Zone non renseignée!" & Ctl.Name
Cancel = True
Exit Sub
End If
End If
End If
Next Ctl
End Sub


--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier LONGET" a écrit dans le
message de news:
Bonjour,

J'obtiens le code erreur 438....me manquerait t'il une référence....j'ai
beau cherché je ne trouve pas...
quand je tape ctl l'option enabled n'apparait pas....

Merci de votre patience...
cordialement
Didier

"Raymond [mvp]" wrote:

Bonjour.

tu as indiqué la réponse toi-même.
il faut rajouter le test dans ta procédure mais il serait préférable de
placer toutes tes fonctions dans l'événement beforeupdate ( à voir):
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Ctl As Control
For Each Ctl In Me.Controls
If Ctl.Enabled Then
If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
Cancel = True
Exit Sub
End If
End If
Next Ctl
Enregistrement
End Sub

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier LONGET" <Didier a écrit dans le
message de news:
Bonjour,

Dans un formulaire j'aimerais tester si l'utilisateur a rempli tous les
champs obligatoires et l'inviter à le faire en positionnant le curseur
sur
le
champ non rempli...
la routine suivante fonctionne très bien :

Private Sub Sauvegarder_Click()
Dim Ctl As Control
For Each Ctl In Me.Controls

If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
GoTo FIN2
Else
End If

Next Ctl
Enregistrement
FIN2:
End Sub

Sauf...que certain controle sont bloqués volontairement...comment
procéder
pour que ma routine saute un controle s'il n'est pas activé ???

du genre : if me.controls.enable = false then goto FIN2:









Avatar
Didier LONGET
Merci pour la réponse, celà fonctionne mais effectivement pas avec les
listes déroulantes....je reste perplexe car le code que j'avais écrit
ci-dessous fonctionne parfaitement (bien que peu économe en nmbre de
lignes...) et celà me laisse à penser qu'il doit y avoir solution simple à
mettre en oeuvre...tant que je n'ai pas de zone verrouillée le prg développé
dans mon 1er post fonctionne parfaitement, c'est l'introduction des zones
verouillée qui pose prb....



'dévérouillé dans le formulaire si choix précédent -1
If Me!SNUMP.Enabled = True And IsNull(Me!SNUMP) Then
Me!SNUMP.SetFocus
MsgBox "Zone non renseignée!"
Exit Sub
End If
'dévérouillé dans le formulaire si choix précédent -1
If Me!SHD.Enabled = True And IsNull(Me!SHD) Then
Me!SHD.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'dévérouillé dans le formulaire si choix précédent -1
If Me!SHF.Enabled = True And IsNull(Me!SHF) Then
Me!SHF.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'dévérouillé dans le formulaire si choix précédent -1
If Me!STAF.Enabled = True And IsNull(Me!STAF) Then
Me!STAF.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'dévérouillé dans le formulaire si choix précédent -2
If Me!Duree.Enabled = True And IsNull(Me!Duree) Then
Me!Duree.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'dévérouillé dans le formulaire si choix précédent -2
If Me!ECHELLE.Enabled = True And IsNull(Me!ECHELLE) Then
Me!ECHELLE.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'apparait dans le formulaire qq soit le choix
If IsNull(Me!SMOTIF) Then
Me!SMOTIF.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'apparait dans le formulaire qq soit le choix
If IsNull(Me!SDATNU) Then
Me!SDATNU.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If

Enregistrement






"Raymond [mvp]" wrote:

l'option n'apparaît pas mais elle est bonne de même que controltype.

il faut compléter ta procédure en te limitant aux contrôles texte sinon tu
auras des erreurs sur les boutons et les étiquettes.
exemple ( à compléter )
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Ctl As Control
For Each Ctl In Me.Controls
If Ctl.ControlType = acTextBox Then
If Ctl.Enabled Then
If IsNull(Ctl) Then
Ctl.SetFocus
MsgBox "Zone non renseignée!" & Ctl.Name
Cancel = True
Exit Sub
End If
End If
End If
Next Ctl
End Sub


--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier LONGET" a écrit dans le
message de news:
Bonjour,

J'obtiens le code erreur 438....me manquerait t'il une référence....j'ai
beau cherché je ne trouve pas...
quand je tape ctl l'option enabled n'apparait pas....

Merci de votre patience...
cordialement
Didier

"Raymond [mvp]" wrote:

Bonjour.

tu as indiqué la réponse toi-même.
il faut rajouter le test dans ta procédure mais il serait préférable de
placer toutes tes fonctions dans l'événement beforeupdate ( à voir):
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Ctl As Control
For Each Ctl In Me.Controls
If Ctl.Enabled Then
If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
Cancel = True
Exit Sub
End If
End If
Next Ctl
Enregistrement
End Sub

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier LONGET" <Didier a écrit dans le
message de news:
Bonjour,

Dans un formulaire j'aimerais tester si l'utilisateur a rempli tous les
champs obligatoires et l'inviter à le faire en positionnant le curseur
sur
le
champ non rempli...
la routine suivante fonctionne très bien :

Private Sub Sauvegarder_Click()
Dim Ctl As Control
For Each Ctl In Me.Controls

If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
GoTo FIN2
Else
End If

Next Ctl
Enregistrement
FIN2:
End Sub

Sauf...que certain controle sont bloqués volontairement...comment
procéder
pour que ma routine saute un controle s'il n'est pas activé ???

du genre : if me.controls.enable = false then goto FIN2:














Avatar
Raymond [mvp]
ça va pour quelques contrôles mais si tu rajoutes des contrôles il va
falloir penser de rajouter des lignes. la boucle est plus esthétique en tant
que programmation pure.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier LONGET" a écrit dans le
message de news:
Merci pour la réponse, celà fonctionne mais effectivement pas avec les
listes déroulantes....je reste perplexe car le code que j'avais écrit
ci-dessous fonctionne parfaitement (bien que peu économe en nmbre de
lignes...) et celà me laisse à penser qu'il doit y avoir solution simple à
mettre en oeuvre...tant que je n'ai pas de zone verrouillée le prg
développé
dans mon 1er post fonctionne parfaitement, c'est l'introduction des zones
verouillée qui pose prb....



'dévérouillé dans le formulaire si choix précédent -1
If Me!SNUMP.Enabled = True And IsNull(Me!SNUMP) Then
Me!SNUMP.SetFocus
MsgBox "Zone non renseignée!"
Exit Sub
End If
'dévérouillé dans le formulaire si choix précédent -1
If Me!SHD.Enabled = True And IsNull(Me!SHD) Then
Me!SHD.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'dévérouillé dans le formulaire si choix précédent -1
If Me!SHF.Enabled = True And IsNull(Me!SHF) Then
Me!SHF.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'dévérouillé dans le formulaire si choix précédent -1
If Me!STAF.Enabled = True And IsNull(Me!STAF) Then
Me!STAF.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'dévérouillé dans le formulaire si choix précédent -2
If Me!Duree.Enabled = True And IsNull(Me!Duree) Then
Me!Duree.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'dévérouillé dans le formulaire si choix précédent -2
If Me!ECHELLE.Enabled = True And IsNull(Me!ECHELLE) Then
Me!ECHELLE.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'apparait dans le formulaire qq soit le choix
If IsNull(Me!SMOTIF) Then
Me!SMOTIF.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If
'apparait dans le formulaire qq soit le choix
If IsNull(Me!SDATNU) Then
Me!SDATNU.SetFocus
MsgBox "Zone non renseignée ! "
Exit Sub
End If

Enregistrement






"Raymond [mvp]" wrote:

l'option n'apparaît pas mais elle est bonne de même que controltype.

il faut compléter ta procédure en te limitant aux contrôles texte sinon
tu
auras des erreurs sur les boutons et les étiquettes.
exemple ( à compléter )
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Ctl As Control
For Each Ctl In Me.Controls
If Ctl.ControlType = acTextBox Then
If Ctl.Enabled Then
If IsNull(Ctl) Then
Ctl.SetFocus
MsgBox "Zone non renseignée!" & Ctl.Name
Cancel = True
Exit Sub
End If
End If
End If
Next Ctl
End Sub


--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier LONGET" a écrit dans le
message de news:
Bonjour,

J'obtiens le code erreur 438....me manquerait t'il une
référence....j'ai
beau cherché je ne trouve pas...
quand je tape ctl l'option enabled n'apparait pas....

Merci de votre patience...
cordialement
Didier

"Raymond [mvp]" wrote:

Bonjour.

tu as indiqué la réponse toi-même.
il faut rajouter le test dans ta procédure mais il serait préférable
de
placer toutes tes fonctions dans l'événement beforeupdate ( à voir):
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Ctl As Control
For Each Ctl In Me.Controls
If Ctl.Enabled Then
If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
Cancel = True
Exit Sub
End If
End If
Next Ctl
Enregistrement
End Sub

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Didier LONGET" <Didier a écrit dans
le
message de news:
Bonjour,

Dans un formulaire j'aimerais tester si l'utilisateur a rempli tous
les
champs obligatoires et l'inviter à le faire en positionnant le
curseur
sur
le
champ non rempli...
la routine suivante fonctionne très bien :

Private Sub Sauvegarder_Click()
Dim Ctl As Control
For Each Ctl In Me.Controls

If IsNull(Ctl) Then
DisplayMessage "Zone non renseignée!"
Ctl.SetFocus
GoTo FIN2
Else
End If

Next Ctl
Enregistrement
FIN2:
End Sub

Sauf...que certain controle sont bloqués volontairement...comment
procéder
pour que ma routine saute un controle s'il n'est pas activé ???

du genre : if me.controls.enable = false then goto FIN2: