IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Problème avec Undo [AC-2003]


Sujet :

IHM

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 20
    Points
    20
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut
    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'.

  3. #3
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DateSouhaitee.setFocus
    Mais cela ne fait rien...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    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,

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut
    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'.

  7. #7
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    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 ?

  8. #8
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    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 895
    Points : 4 325
    Points
    4 325
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo