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

Gestion d'erreur sur un champ date (Access 2000)

9 réponses
Avatar
mission
Bonjour tout le monde.

J'essaie désespérément d'autoriser l'utilisateur à ne rentrer que le jour
dans le champ date d'un sous-formulaire, sachant que l'année et le mois ont
déjà été sélectionnés dans le formulaire père.
Je ne peux pas me contenter d'un champ numérique dar l'utilisateur peut être
obligé de forcer une date différente.
J'ai donc pensé à la gestion d'erreurs....
Sur sortie du champ, j'ai utilisé
On Error Goto ControleDate
Exit Sub
ControleDate:
varJour = me.DateTravail
varAnnée = Forms!frmPère!lstAnnéeChoisie 'num entier
varMois = Forms!frmPère!lstMoisChoisi 'num entier
me.DateTravail = SerialDate(varAnnée, varMois, varJour)
End Sub
Mes divers tests me font penser que je ne gère pas l'erreur assez tôt, et
que ma variable varJour ne sait pas récupérer le contenu du champ
me.DateTravail.
Est-ce que quelqu'un aurait la gentillesse de me remettre sur la voie ?
Merci d'avance.
PG

9 réponses

Avatar
Jessy Sempere
Bonjour

Le mieux dans ton cas, est d'utiliser la propriété "valide si" de ta zone de
texte...
Tu dois définir le format de ta zone de texte à "standard" avec 0 décimale,
ensuite il te suffit de mettre dans la propriété valide si :

0 Et <=Jour(SérieDate(Forms!FormulairePrincipal!ControleAnnee;Forms!FormulairePrincipal!ControleMois + 1;0))


@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



Bonjour tout le monde.

J'essaie désespérément d'autoriser l'utilisateur à ne rentrer que le jour
dans le champ date d'un sous-formulaire, sachant que l'année et le mois ont
déjà été sélectionnés dans le formulaire père.
Je ne peux pas me contenter d'un champ numérique dar l'utilisateur peut être
obligé de forcer une date différente.
J'ai donc pensé à la gestion d'erreurs....
Sur sortie du champ, j'ai utilisé
On Error Goto ControleDate
Exit Sub
ControleDate:
varJour = me.DateTravail
varAnnée = Forms!frmPère!lstAnnéeChoisie 'num entier
varMois = Forms!frmPère!lstMoisChoisi 'num entier
me.DateTravail = SerialDate(varAnnée, varMois, varJour)
End Sub
Mes divers tests me font penser que je ne gère pas l'erreur assez tôt, et
que ma variable varJour ne sait pas récupérer le contenu du champ
me.DateTravail.
Est-ce que quelqu'un aurait la gentillesse de me remettre sur la voie ?
Merci d'avance.
PG





Avatar
mission
Bonjour Jessy,
Je n'ai pas dû bien m'expliquer.
Mon formulaire père contient 2 listes déroulantes lstAnnéeChoisie et
lstMoisChoisi.
Mon sous-formulaire contient un champ date DateTravail formaté Date Abrégée,
destiné à remplir le champ de même nom de ma table tblTravaux.
Logiquement donc, l'opérateur doit saisir la date au format j/m/aa, voire
j/m
Je souhaite lui permettre de ne saisir que j et compléter la date avec les
valeurs lstAnnéeChoisie et lstMoisChoisi.
Ta proposition n'élimine pas le message d'erreur (vous avez sans doute voulu
entrer bla bla bla ) et empêche même la saisie d'une vraie date. Ca
fonctionnerait sans doute avec un contrôle standard, mais celui-ci est de
format Date. Comme je m'appuie dessus pour déjà un certain nombrede
contrôles de cohérence, j'aimerai éviter de le redéfinir.
C'est ainsi que je me proposais de gérer l'erreur renvoyée par Access si je
ne donne qu'une partie insuffisante de la date.
Mais ma bête ne veut pas bosser dans ces conditions :-(

Pas grave et merci encore
PG

Dans son message ,
l'honorable Jessy Sempere écrivait
Bonjour

Le mieux dans ton cas, est d'utiliser la propriété "valide si" de ta
zone de texte...
Tu dois définir le format de ta zone de texte à "standard" avec 0
décimale, ensuite il te suffit de mettre dans la propriété valide si :

0 Et
<=Jour(SérieDate(Forms!FormulairePrincipal!ControleAnnee;Forms!FormulairePrincipal!ControleMois
+ 1;0))


@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



Bonjour tout le monde.

J'essaie désespérément d'autoriser l'utilisateur à ne rentrer que le
jour
dans le champ date d'un sous-formulaire, sachant que l'année et le
mois ont
déjà été sélectionnés dans le formulaire père.
Je ne peux pas me contenter d'un champ numérique dar l'utilisateur
peut être
obligé de forcer une date différente.
J'ai donc pensé à la gestion d'erreurs....
Sur sortie du champ, j'ai utilisé
On Error Goto ControleDate
Exit Sub
ControleDate:
varJour = me.DateTravail
varAnnée = Forms!frmPère!lstAnnéeChoisie 'num entier
varMois = Forms!frmPère!lstMoisChoisi 'num entier
me.DateTravail = SerialDate(varAnnée, varMois, varJour)
End Sub
Mes divers tests me font penser que je ne gère pas l'erreur assez
tôt, et
que ma variable varJour ne sait pas récupérer le contenu du champ
me.DateTravail.
Est-ce que quelqu'un aurait la gentillesse de me remettre sur la
voie ?
Merci d'avance.
PG




Avatar
ze Titi
Bonjour mission

as-tu essayé d'utiliser l'évènement "Sur changement" ?

Dans ton message du jeudi
Bonjour Jessy,
Je n'ai pas dû bien m'expliquer.
Mon formulaire père contient 2 listes déroulantes lstAnnéeChoisie et
lstMoisChoisi.
Mon sous-formulaire contient un champ date DateTravail formaté Date Abrégée,
destiné à remplir le champ de même nom de ma table tblTravaux.
Logiquement donc, l'opérateur doit saisir la date au format j/m/aa, voire j/m
Je souhaite lui permettre de ne saisir que j et compléter la date avec les
valeurs lstAnnéeChoisie et lstMoisChoisi.
Ta proposition n'élimine pas le message d'erreur (vous avez sans doute voulu
entrer bla bla bla ) et empêche même la saisie d'une vraie date. Ca
fonctionnerait sans doute avec un contrôle standard, mais celui-ci est de
format Date. Comme je m'appuie dessus pour déjà un certain nombrede contrôles
de cohérence, j'aimerai éviter de le redéfinir.
C'est ainsi que je me proposais de gérer l'erreur renvoyée par Access si je
ne donne qu'une partie insuffisante de la date.
Mais ma bête ne veut pas bosser dans ces conditions :-(

Pas grave et merci encore
PG

Dans son message ,
l'honorable Jessy Sempere écrivait
Bonjour

Le mieux dans ton cas, est d'utiliser la propriété "valide si" de ta
zone de texte...
Tu dois définir le format de ta zone de texte à "standard" avec 0
décimale, ensuite il te suffit de mettre dans la propriété valide si :

0 Et
<=Jour(SérieDate(Forms!FormulairePrincipal!ControleAnnee;Forms!FormulairePrincipal!ControleMois
+ 1;0))


@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



Bonjour tout le monde.

J'essaie désespérément d'autoriser l'utilisateur à ne rentrer que le
jour
dans le champ date d'un sous-formulaire, sachant que l'année et le
mois ont
déjà été sélectionnés dans le formulaire père.
Je ne peux pas me contenter d'un champ numérique dar l'utilisateur
peut être
obligé de forcer une date différente.
J'ai donc pensé à la gestion d'erreurs....
Sur sortie du champ, j'ai utilisé
On Error Goto ControleDate
Exit Sub
ControleDate:
varJour = me.DateTravail
varAnnée = Forms!frmPère!lstAnnéeChoisie 'num entier
varMois = Forms!frmPère!lstMoisChoisi 'num entier
me.DateTravail = SerialDate(varAnnée, varMois, varJour)
End Sub
Mes divers tests me font penser que je ne gère pas l'erreur assez
tôt, et
que ma variable varJour ne sait pas récupérer le contenu du champ
me.DateTravail.
Est-ce que quelqu'un aurait la gentillesse de me remettre sur la
voie ?
Merci d'avance.
PG




--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info



Avatar
Jessy Sempere
Re,

La solution que je te proposais reste envisageable, si tu veux qu'ils ne
saisissent que le jour, tu utilies la zone de texte que je te disais pour
faire la saisie, par contre, elle doit être indépendante (liée à aucun champ
source).

Ensuite, il te suffit de rajouter sur l'événement "après mise à jour" de
cette zone le code suivant :

private sub TaZoneJour_AfterUpdate()
Me.DateTravail =
DateSerial(Forms("frmPrincipal").controls("lstAnnéeChoisie"),
Forms("frmPrincipal").controls("lstMoisChoisi"),me.TaZoneJour)
End sub

Du coup, ton champ aura bien la bonne valeur vu que la gestion d'erreur que
je te disais plus haut garantira la bonne saisie du jour...

Maintenant, si effectivement, il peuvent aussi avoir le droit de saisir la
date d'un autre mois que celui sélectionné, cette solution ne marchera pas
mais je pense qu'a un moment donné, si on a des crontraintes, on est bien
obligé de les imposer...

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



Bonjour Jessy,
Je n'ai pas dû bien m'expliquer.
Mon formulaire père contient 2 listes déroulantes lstAnnéeChoisie et
lstMoisChoisi.
Mon sous-formulaire contient un champ date DateTravail formaté Date Abrégée,
destiné à remplir le champ de même nom de ma table tblTravaux.
Logiquement donc, l'opérateur doit saisir la date au format j/m/aa, voire
j/m
Je souhaite lui permettre de ne saisir que j et compléter la date avec les
valeurs lstAnnéeChoisie et lstMoisChoisi.
Ta proposition n'élimine pas le message d'erreur (vous avez sans doute voulu
entrer bla bla bla ) et empêche même la saisie d'une vraie date. Ca
fonctionnerait sans doute avec un contrôle standard, mais celui-ci est de
format Date. Comme je m'appuie dessus pour déjà un certain nombrede
contrôles de cohérence, j'aimerai éviter de le redéfinir.
C'est ainsi que je me proposais de gérer l'erreur renvoyée par Access si je
ne donne qu'une partie insuffisante de la date.
Mais ma bête ne veut pas bosser dans ces conditions :-(

Pas grave et merci encore
PG

Dans son message ,
l'honorable Jessy Sempere écrivait
Bonjour

Le mieux dans ton cas, est d'utiliser la propriété "valide si" de ta
zone de texte...
Tu dois définir le format de ta zone de texte à "standard" avec 0
décimale, ensuite il te suffit de mettre dans la propriété valide si :

0 Et
<=Jour(SérieDate(Forms!FormulairePrincipal!ControleAnnee;Forms!FormulairePrincipal!ControleMois
+ 1;0))


@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



Bonjour tout le monde.

J'essaie désespérément d'autoriser l'utilisateur à ne rentrer que le
jour
dans le champ date d'un sous-formulaire, sachant que l'année et le
mois ont
déjà été sélectionnés dans le formulaire père.
Je ne peux pas me contenter d'un champ numérique dar l'utilisateur
peut être
obligé de forcer une date différente.
J'ai donc pensé à la gestion d'erreurs....
Sur sortie du champ, j'ai utilisé
On Error Goto ControleDate
Exit Sub
ControleDate:
varJour = me.DateTravail
varAnnée = Forms!frmPère!lstAnnéeChoisie 'num entier
varMois = Forms!frmPère!lstMoisChoisi 'num entier
me.DateTravail = SerialDate(varAnnée, varMois, varJour)
End Sub
Mes divers tests me font penser que je ne gère pas l'erreur assez
tôt, et
que ma variable varJour ne sait pas récupérer le contenu du champ
me.DateTravail.
Est-ce que quelqu'un aurait la gentillesse de me remettre sur la
voie ?
Merci d'avance.
PG









Avatar
mission
Bonjour ze Titi,
J'ai essayé sur Après mise à jour, sur Changement, sur Sortie, sur Perte
focus, sans succès.
C'est comme mon 'on error' n'existait pas :-(

Voici le code :
Private Sub DateTravail_LostFocus()
On Error GoTo ControleDate
If IsNull(Me.DateTravail) Then Exit Sub
ControleDate:
varAnnée = Forms![frmOuvriers]![lstAnnéeChoisie]
If varAnnée = 9999 Then varAnnée = Year(Date)
varMois = Forms!frmOuvriers!lstMoisChoisi
If varMois = 0 Then varMois = Month(Date)
varJour = Me.DateTravail
If IsNull(varJour) Then varJour = Day(Date)
If varJour = 0 Then varJour = Day(Date)
Me.DateTravail = DateSerial(varAnnée, varMois, varJour)
End Sub

Mais je ne vais pas en faire une pendule à 15 coups avec des ressorts en
bois.
Si ça ne fonctionne pas, je vais ajouter un contrôle pour le jour seulement.

A bientôt et merci pour l'attention.
PG
Avatar
ze Titi
Hello mission !

et avec un
Err.Clear
avant le
varAnnée=Forms!...

En ce jour mémorable du jeudi 08/03/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Bonjour ze Titi,
J'ai essayé sur Après mise à jour, sur Changement, sur Sortie, sur Perte
focus, sans succès.
C'est comme mon 'on error' n'existait pas :-(

Voici le code :
Private Sub DateTravail_LostFocus()
On Error GoTo ControleDate
If IsNull(Me.DateTravail) Then Exit Sub
ControleDate:
varAnnée = Forms![frmOuvriers]![lstAnnéeChoisie]
If varAnnée = 9999 Then varAnnée = Year(Date)
varMois = Forms!frmOuvriers!lstMoisChoisi
If varMois = 0 Then varMois = Month(Date)
varJour = Me.DateTravail
If IsNull(varJour) Then varJour = Day(Date)
If varJour = 0 Then varJour = Day(Date)
Me.DateTravail = DateSerial(varAnnée, varMois, varJour)
End Sub

Mais je ne vais pas en faire une pendule à 15 coups avec des ressorts en
bois.
Si ça ne fonctionne pas, je vais ajouter un contrôle pour le jour seulement.

A bientôt et merci pour l'attention.
PG


--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info

Avatar
mission
Merci Jessy,
C'est effectivement ce que j'avais compris de ta proposition.
Je ne sais pas encore comment je vais faire rouler la chose.
Sans doute avec ce contrôle complémentaire.
Merci encore et bonne continuation.
PG
Avatar
mission
Même motif, même punition.
Mais comme je viens de le dire à Jessy, je ne vais pas me prendre la tête
avec ça.
Ce qui m'ennuie le plus, ce n'est pas de créer un contrôle de plus, mais
plutôt de ne pas pouvoir intercepter cette foutue erreur :-(
Merci tout de même et à (très ?) bientôt.
PG
Avatar
ze Titi
Bonjour mission

Plutôt que de forcer un format date, essaie déjà de mettre un masque de
saisie avec un contrôle de cohérence sur l'évènement "Sur changement".

Dans ton message du jeudi
Même motif, même punition.
Mais comme je viens de le dire à Jessy, je ne vais pas me prendre la tête
avec ça.
Ce qui m'ennuie le plus, ce n'est pas de créer un contrôle de plus, mais
plutôt de ne pas pouvoir intercepter cette foutue erreur :-(
Merci tout de même et à (très ?) bientôt.
PG


--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info