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 :

Evènement SurClic : Appliquer l'évènement uniquement lorsqu'une valeur change [AC-2016]


Sujet :

IHM

  1. #1
    Candidat au Club
    Homme Profil pro
    Stage ingenieur performance aeronautique
    Inscrit en
    Janvier 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Stage ingenieur performance aeronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Evènement SurClic : Appliquer l'évènement uniquement lorsqu'une valeur change
    Bonjour,

    Je vais commencer par vous expliquez le contexte de mon projet. Je suis en stage en Nouvelle Zélande et j'ai pour mission de créer une base de donnée pour aéroport qui pourra être exportée et utilisée dans deux logiciels de calcul par les ingénieurs de performance d'aéronerfs. J'utilise Access 2007-2016. Je n'ai pas été formé à utiliser Access mais j'ai suivi un cours sur la base d'utilisation d'Access. Cependant ce cours ne rentre pas assez en détail. J'ai commencé à utiliser Access il y a deux mois lorsque j'ai commencé mon stage.

    J'utilise Access en anglais. J'écrirai les termes anglais que j'utilise entre parenthèse.

    Dans mon formulaire, j'ai créé un sous-formulaire (sub-form) qui reprend les ostacles liés à un aeroport.
    Dans ce sous-formulaire, j'ai un champ qui s'appelle "ObDistRef". Ce champ est une liste déroulante (combo-box) qui peut avoir comme valeur "BR brake release" ou "LO liftoff end of runway".
    J'ai aussi un champ "Dist" qui est la distance entre "ObDistRef" et l'obstacle. La valeur de ce champ dépend de la valeur de "ObDistRef".

    Mon but est, lorsque l'utilisateur choisi un "ObDistRef" le champ "Dist" doit se corriger automatiquement. Pour faire cela, j'ai créé un évènement SurClic (on-click) où j'ai réussi à écrire le code suivant qui fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ObDistRef_Click()
              If Me.ObDistRef = "BR brake release" Then
              Me.Dist = Me.Dist + Me.Parent.TORA_FNL
              Else: Me.Dist = Me.Dist - Me.Parent.TORA_FNL
              End If
    End Sub
    Mon problème : Lorsque je clique plusieurs fois sur la même valeur de "ObDistRef". Les équations se répètent.

    Mon souhait : J'aimerai que les équations ne s'opèrent que lorsque la valeur du champ "ObDistRef" change.

    J'ai essayé de couper/coller ce code dans l'évènement "sur-changement" (on change event) et dans l'évènement "after update" mais le problème persiste.

    Ma question : Comment compléter mon code pour que les équations ne s'opèrent uniquement lorsque la valeur du champ "ObDistRef" change?

    Merci pour votre aide,
    Mat

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Déjà je te recommande d'utiliser l'événement After Update qui correspond à ce que tu veux détecter.

    1. Ensuite, ton formulaire est-il en mode feuille de données (il ressemble à une feuille Excel) ou en mode continu (une série de "lignes" avec les champs dedans) ?
    2. Est-ce que le champ Dist et bien un champ dépendant ?

    Si tu as répondu Oui à la 1èere question et Non à la seconde, tu as sans doute la cause de ton problème.
    Les champs indépendant sont "Recopiés" sur tous les enregistrements quand tu es dans l'un des modes signalés.
    Et il n'y a pas de parade à cela.

    La seule solution est que Dist fasse partie des champs de la source de données et que le champ soit un champ dépendant.

    Si non, peux-tu poster une copie d'écran de ton formulaire, ça donnera peut-être une idée.
    Attention, si il y a des logos de compagnie ou autre propriété intellectuelle, pense à les caviarder dans l'image pour éviter les problème de droit ou de mauvais usage.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Autre remarque de conception.

    Il est déconseillé de tester des valeurs de données "en dur" dans le code comme tu l'as fait pour "BR brake release".
    Je te suggère d'avoir un champ dans ta table des obstacles qui indique dans quel sens tu dois faire le calcul de différence (qui vaudrait -1, 0 ou 1 probablement ou peut-être simplement -1 ou 1).

    Ça donnerai quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Dist = Me.Dist + (Me.OffsetSign * Me.Parent.TORA_FNL)
    Et tu fais une correction de distance cumulative ?
    Si je choisi 2 obstacles de suite sur le même enregistrement, je vais avoir 2 modifications de distance ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Candidat au Club
    Homme Profil pro
    Stage ingenieur performance aeronautique
    Inscrit en
    Janvier 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Stage ingenieur performance aeronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci pour ta réponse.
    Mes collègues sont rentré de vacances et on a fini par trouver la solution.

    La problème avec mon code c'était que j'avais une boucle dans mon équation. Avoir un me.dist des deux côté de l'équation voulait dire qu'à chaque nouvelle itération j'écrasais l'ancienne valeur.

    Pour résoudre ce problème, j'ai créé une valeur initiale et une valeur finale.
    Le code devient donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ObDistRef_Click ()
          If Me.ObDistRef = "BR brake release" Then
          Me.Dist_FNL = me.Dist_init + Me.Parent.TORA_FNL
           ELSE: Me.Dist_FNL = Me.Dist_init -  Me.Parent.TORA_FNL
           End IF
    End Sub
    Oui, mes champs sont bien dépendant.

    Je pense avoir comprit ta deuxième remarque mais je ne suis pas sur de comment modifier mon fichier access. Mais pour le moment mon interface fonction. Quand j'arriverai à la phase d'optimisation dans mon projet j'approfondirai ta remarque.
    Non, les distances ne sont pas cumulative. Elle correspondent a un unique obstacle. Donc dans ma table il y a une distance calculé pour chaque obstacle.

    Merci,
    Mat

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

Discussions similaires

  1. Exécution lorsque une valeur change parmi une plage
    Par Janny dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/05/2009, 13h56
  2. Pause dans un programme lorsqu'une variable change de valeur.
    Par Jérôme Lambert dans le forum Visual Studio
    Réponses: 5
    Dernier message: 21/10/2008, 11h26
  3. Réponses: 2
    Dernier message: 20/01/2008, 17h31
  4. [XSL]appliquer la fonction substring sur une valeur récupéré
    Par totoranky dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 22/02/2006, 17h21
  5. Calcul Stock Actuel mm lorsqu'une valeur est null
    Par priest69 dans le forum Access
    Réponses: 3
    Dernier message: 12/09/2005, 18h58

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