Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/10/2011, 16h08   #1
Invité de passage
 
Homme Laurent
Développeur Java
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Java
Secteur : Service public

Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 0
Points : 0
Par défaut Problème avec Undo

Bonjour à tous,
Tout d'abord, désolé si je ne poste pas au bon endroit mais je suis nouveau sur le forum
Voici mon problème j'essaie de tester la valeur d'une date dans un contrôle indépendant sur un formulaire (Access 2003), et si cette date remonte à moins de 20 ans, je voudrais un message d'erreur et forcer à recommencer la saisie.
Après plusieurs recherches, j'ai donc fais ceci :
Code :
1
2
3
4
5
6
Private Sub DateSouhaitee_BeforeUpdate(Cancel As Integer)
If (DatePart("yyyy", Now) - DatePart("yyyy", DateSouhaitee)) < 20 Then
    MsgBox ("Date trop récente pour" & Chr(10) & "prévoir une destruction...")
    Me.Undo
End If
End Sub
Mais rien ne se passe. Je sais que le sujet a été plusieurs fois traité mais je ne vois vraiment pas ce qui cloche...
D'avance merci.
lolodij21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 16h44   #2
Membre régulier
 
Inscription : février 2010
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 100
Points : 92
Points : 92
Bonjour

A la place de Me.Undo, mets :

J'ai vérifié au passage, il faut placer le code dans l'évènement AfterUpdate et non BeforeUpdate pour que la remise à 0 du champ soit prise en compte sans générer d'erreurs.

Cordialement,
Beub'.
Beub' est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/10/2011, 17h06   #3
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 223
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 223
Points : 9 927
Points : 9 927
Envoyer un message via Skype™ à Domi2
Bonjour,

Autant utiliser un événement plus approprié, à mon sens, soit "Avant MAJ" de ton formulaire.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Form_BeforeUpdate(Cancel As Integer)
 
    'Test de plausibilité
    If (DatePart("yyyy", Now) - DatePart("yyyy", DateSouhaitee)) < 20 Then
        MsgBox ("Date trop récente pour" & Chr(10) & "prévoir une destruction...")
 
        Me.DateSouhaitee.SetFocus
 
        Cancel = True
 
        Exit Sub
 
    End If
 
End Sub
Domi2
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/10/2011, 17h07   #4
Invité de passage
 
Homme Laurent
Développeur Java
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Java
Secteur : Service public

Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 0
Points : 0
Un grand merci Beub' c'était bien ça...
Par contre aurais tu une méthode pour replacer le focus sur mon contrôle car j'essaie (toujours dans l'événement Après mise à jour)
Code :
Me.DateSouhaitee.setFocus
Mais cela ne fait rien...
lolodij21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 17h14   #5
Invité de passage
 
Homme Laurent
Développeur Java
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Java
Secteur : Service public

Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 0
Points : 0
Bonjour Domi2,
J'ai bien tenté ta méthode ( qui me paraissait plus logique mais j'obtiens l'erreur 2108 : Vous devez enregistrer le champ avant d'exécuter la méthode SetFocus

En tous cas merci de ta réponse.
Cordialement,
lolodij21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 17h57   #6
Membre régulier
 
Inscription : février 2010
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 100
Points : 92
Points : 92
Le Cancel = True permet déjà de ne pas quitter le champ (il remplace le SetFocus). Mais je ne sais pas remettre à 0 le champ sur un beforeupdate

D'un autre côté, si on est coincé dans le champ (avec le Cancel = True), il n'y a pas vraiment de raison de le remettre à 0... On restera dans le champ tant que le test de validation ne sera pas positif => remise à 0 inutile, l'utilisateur est contraint de le faire.

En ce qui concerne le setFocus, je sais qu'il a tendance à être capricieux (une simple recherche sur google t'en diras plus). Donc pas de solution rapide à te donner. J'y réfléchirai ce soir !

Cela dit, à vue de nez, passe par un beforeupdate avec un Cancel = True : ça verrouillera le focus sur le champ texte tant que la valeur sera erronée. Si tu veux garder une porte de sortie pour l'utilisateur (je te le conseille, quand même... ), mets dans ta condition un "If Me.DateSouhaitee <> '' ". Tu pourras ainsi identifier si :
- la date est valide => changement de focus toléré
- la date est invalide => changement de focus non toléré avec message expliquant les possibilités.
- le champ est vide => changement de focus toléré

Cordialement,
Beub'.
Beub' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 21h28   #7
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 223
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 223
Points : 9 927
Points : 9 927
Envoyer un message via Skype™ à Domi2
La discussion sur le SetFocus, oui, mais bon.

Il ne faut pas perdre de vue qu'on utilise l'évènement Avant MAJ d'un formulaire.

Et qu'en principe, on a pas un seul contrôle sur celui-ci, mais plusieurs, donc autant de tests de plausibilités possibles. Et comme on ne sait pas d'avance lequel peut échouer, on redonne le focus au contrôle.

Pas besoin également de vider le contrôle ou de la mettre à zéro. Ayant reçu le focus, il est actif et en surbrillance. Donc, à la première frappe, l'ancienne valeur sera annulée.

Citation:
Envoyé par lolodij21 Voir le message
j'obtiens l'erreur 2108 : Vous devez enregistrer le champ avant d'exécuter la méthode SetFocus
Combien de contrôles sur ton formulaire ? Plusieurs ou uniquement le champ date ?

Et comment déclenches-tu la validation des données ?
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 00h23   #8
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 895
Points : 3 895
salut domi2 , Beub' et bienvenu lolodij21,

autrement:
feuille de propriétés/données/valide si
mettre:
cf <F1> pour plus ample description et personnalisation du message.
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h48.


 
 
 
 
Partenaires

Hébergement Web