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 :

Dans un formulaire ACCESS, retourner au champ précédent


Sujet :

IHM

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2016
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 171
    Points : 79
    Points
    79
    Par défaut Dans un formulaire ACCESS, retourner au champ précédent
    Dans un formulaire (F_Pays), ne teste si le champ "Pays_Nom" est blanc (Null) lorsque le focus est reçu par le champ suivant "Pays_ISO", si tel est le cas, un beep est émis, un message apparaît, la couleur de l'étiquette du champ Nom devient rouge et, après avoir valider le message, le focus devrait revenir au champ Nom. Or, si tout se passe comme prévu, le curseur revient sur le champ précédent, mais disparaît aussitôt de sorte que si je veux encoder le nom que j'avais omis d'introduire, ce n'est pas possible sans manipuler la souris et placer le curseur à la position prévue. J'ai essayé avec DoCmd.GoToControl "Pays_Nom" ainsi qu'avec Forms!F_Pays!Pays_Nom.SetFocus ou Pays_Nom.SetFocus, rien ne change.
    Quelqu'un aurait-il la solution ?
    D'avance merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Private Sub Pays_ISO_GotFocus()
      If IsNull(Me.Pays_Nom) = True Then
         Beep
         Me.[Pays_Nom_Étiquette].ForeColor = RGB(255, 0, 0)
         MsgBox " Le nom du pays est obligatoire !"
           DoCmd.GoToControl "Pays_Nom"
     
      Else: Me.[Pays_Nom_Étiquette].ForeColor = RGB(128, 128, 128)
      End If
     
    End Sub

  2. #2
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Salut,
    Regardez ici, dans Example vous avez la réponse.

  3. #3
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2016
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 171
    Points : 79
    Points
    79
    Par défaut Dans un formulaire ACCESS, retourner au champ précédent
    Merci Hyperion13. Néanmoins, j'ai beau lire et relire l'article, je ne comprends pas ce que je devrais modifier pour que le curseur revienne sur le champ 'Pays_Nom' lorsque ce champ reste vide et génère un message d'erreur après lequel je tape simplement sur 'ENTER' pour acquiescer. J'ai rajouté un 'VbOK' dans la définition du MsgBox, dimensionné une réponse et inclus une condition sur la réponse, mais cela ne change rien.
    Je ne sais donc toujours pas comment résoudre mon problème qui est, je le rappelle, de tester,dans un formulaire, à la réception du Focus par le champ2, le champ1 et si ce dernier est vide, le signaler par un message de manière à attirer l'attention et, ensuite, après avoir fait "ENTER" de retourner au champ1 afin de permettre de le compléter et annuler ainsi l'erreur. Le curseur retourne au champ1 et immédiatement après, c'est le nom du formulaire qui est encadré dans la liste des objets à gauche du cadre de travail et si je replace le curseur sur le champ1 et le laisse vide, le test ne se fait plus. Bref, je ne comprends pas ce qui se passe.
    Je joins copie de la BDD.
    Merci d'avance.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Salut
    Je viens de tester la sub() de votre Post#1 et elle fonctionne correctement !
    L'étiquette vire au rouge et le curseur se place bien sur la textbox Pays_Nom

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 769
    Points : 14 810
    Points
    14 810
    Par défaut
    bonjour,
    je ne comprends pas ce que je devrais modifier pour que le curseur revienne sur le champ 'Pays_Nom' lorsque ce champ reste vide
    en l'état actuel de ton formulaire, tu risque de t'embarquer dans beaucoup de code pour la saisie et le contrôle de 2 champs. D'autant que la saisie d'un nouveau pays est plutôt exceptionnelle.
    Pour info, il est impossible de donner le focus à un contrôle lorsque qu'il est en cours de mise à jour: par exemple quand tu cliques sur le bouton Enregistrer, tu sors du contrôle Pays_ISO ce qui déclenche l'évènement Before_Update au même moment, ce qui crée ton désagrément sur la mise en focus.

    Actuellement, ton formulaire n'empêche pas la saisie d'un code ISO avec le nom du pays non renseigné, ce malgré un message d'avertissement il est tout à fait possible de cliquer de nouveau sur code ISO saisir un code et enregistrer la saisie: normal, puisque tu fais tes contrôles sur sortie de contrôle, alors que l'usage est de le faire avant mise à jour.
    Pour 2 champs de saisie, il faut faire au plus simple et ne pas chercher absolument à alerter dès que l'utilisateur bouge la souris, il faut lui laisser le temps de faire la saisie et intervenir avant l'insertion, c'est tout.
    Et quand tout est OK, on lance une requête d'insertion.

    Je te propose donc passer par un formulaire indépendant (sans source de données, même si je ne suis pas partisan de cette méthode) qui fait tous les contrôles en une seule fois au clic du bouton Enregistrer, l'avantage est que tant que la saisie ne respecte pas les règles de validation, RIEN ne sera injecté dans la table. Et pas besoin d'un formulaire de contrôle pour dire quoi faire ...
    BDD121_240204.zip
    PS: il n'y a que 3 objets dans la base jointe:
    - la table T_Pays
    - le formulaire F_Pays
    - le module Module1

  6. #6
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2016
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 171
    Points : 79
    Points
    79
    Par défaut Dans un formulaire ACCESS, retourner au champ précédent
    Mercie Hyperion13 pour votre réponse. Je vais examiner cela cet après-midi. J'ai remarqué également que le même phénomène se produisait dans le F_FourNouveau sur le test du champ Four_RsoCiv. Je me demande si ce n'est pas la présence du Module1 qui dérange les tests; ce module est déclaré "explicit". Auparavant ce test fonctionnait correctement.
    Je vous tiens informé dès que j'aurai actualisé la BDD sur base de vos dernières infos.
    Bonne journée. Encore merci.

  7. #7
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2016
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 171
    Points : 79
    Points
    79
    Par défaut Dans un formulaire ACCESS, retourner au champ précédent
    J'avais le même problème avec la solution que vous me proposiez et, an fait, mon travail était correct, mais j'ai remarqué que lorsque j'ouvrais le formulaire (F_Pays) avec la souris, instinctivement le curseur de la souris restait dans le menu "OBJET" situé à gauche du formulaire. Je me suis donc demandé s'il n'y avait pas un lien avec le fait qu'à la fin de ma procédure le curseur revenait bien un bref instant sur le champ souhaité avant de mettre en évidence le nom d'un formulaire dans le menu de gauche.
    J'ai donc ouvert le formulaire en veillant de placer ensuite le curseur de la souris dans le formulaire, peu importe l'endroit, et là le curseur, à la fin de la procédure, est retourné sur le champ souhaité et y est resté de manière à me permettre d'introduire d'autres informations.
    Merci à tous pour votre collaboration qui m'a permis de faire cette découverte à laquelle je serai attentif à l'avenir.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/10/2018, 08h39
  2. [AC-2010] Champs visibles sous condition dans un formulaire Access
    Par benadry dans le forum IHM
    Réponses: 8
    Dernier message: 23/09/2015, 13h48
  3. Masquer un champ vide dans un formulaire access
    Par anassyto dans le forum IHM
    Réponses: 2
    Dernier message: 25/06/2013, 16h24
  4. Réponses: 3
    Dernier message: 09/02/2012, 22h24
  5. champs obligatoire dans un formulaire access 2007
    Par mimi2030 dans le forum IHM
    Réponses: 1
    Dernier message: 06/07/2011, 13h32

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