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 de MsGBox sur évènement "Change" d'un contrôle onglet [AC-2003]


Sujet :

IHM

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut Problème de MsGBox sur évènement "Change" d'un contrôle onglet
    Bonjour,

    Je vous explique ce qui me pose problème depuis maintenant deux heures. Malgré mes essais, je ne trouve pas la solution.

    J'ai un formulaire composé d'un contrôle onglet. J'ai 5 onglets. Chaque onglet est composé de cases à cocher, 1 liste déroulante et 1 textbox. J'ai mis en place (grâce à LedZeppII) une procédure qui relève une erreur dans une MsgBox si certaines conditions ne sont pas remplies. (ex: si une certaine case est coché cela dévérouille 3 autres cases. Au moins une de ces 3 cases doit être coché sinon une erreur est levée.)
    J'ai mis le code qui relève les erreurs sur l'évènement Change du contrôle onglet. Le but est que lorsque la personne change d'onglet on lui indique directement ce qui ne va pas via une MsgBox. Cela fonctionne bien.

    Le problème que j'ai :

    Lorsque la MsgBox arrive pour indiquer l'erreur et que la personne clic sur OK. Elle se retrouve sur le nouvel onglet choisi. Je souhaite qu'elle revienne sur l'onglet ou se trouve l'erreur. j'ai donc mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me!monongleterreur.SetFocus
    Le problème c'est que lorsque je rebascule sur l'onglet précedent, l'évènement change est réactivé (logique) et la MsgBox réapparait. Je souhaiterais qu'elle ne soit visible qu'une seule fois c'est à dire lorque la personne change d'onglet et non lorsqu'elle retourne sur l'ancien.

    Je me demande donc comment désactiver l'évènement change lorsque le SetFocus s'active !! (ou tout autre solution...)

    Je sais pas si mon explication est claire.. Hésitez pas à demander pour plus de détails.

    voici une partie de mon code (je précise qu'il fait appel à un module)

    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
    16
    17
    18
    19
    Private Sub CtlTab1_Change()
    Dim strErrsTheme As String, strThm As String
    Dim NbThemesErr As Long
     
            strThm = "Pai"
            strErrsTheme = ValiderControleTheme(Me.IDcontroledossier, strThm)
            If Len(strErrsTheme) > 0 Then
               NbThemesErr = NbThemesErr + 1
               MsgBox strErrsTheme, , strThm
               Me!Paiement.SetFocus
            End If
     
     
            ' Final
            If NbThemesErr > 0 Then
               ' Il y a eu des erreurs
    Exit Sub
    End If
    End Sub
    Si quelqu'un a réussi à comprendre ce que j'ai essayé d'expliquer et pense avoir une solution, je lui en serait très reconnaissant !! MERCI

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    1 - déclarer un flag en en-tête de module du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private gChangedByCode as Boolean
    2 - avant le setfocus, donner la valeur Vrai au flag pour indiquer que le changement est fait par le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [...]
    gChangedByCode = True
    Me!Paiement.SetFocus
    [...]
    3 - sur changement d'onglet, ne pas faire de vérification si modif par le code, et remettre le flag à Faux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub CtlTab1_Change()
    [...]
    If gChangedByCode = True then
        gChangedByCode = False
        Exit Sub
    End If
    [...]
    en fonction de ce qui doit être fait ou non, il faut bien placer le Exit sub et éventuellement l'enlever et mettre le traitement de vérification dans un Else (au cas où du code doit s'exécuter dans tous les cas)

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Bjr Arkham46,

    Tout d'abord je te remercie pour ta réponse très claire.

    Grâce à ta solution, j'ai pu régler mon problème... J'ai adapté le code pour qu'il corresponde à ce que j'attendais et maintenant tout roule !!

    A voir maintenant si ce type de controle sur chaque onglet ne va pas ralentir de facon trop importante le changement d'onglet. Après complation ca a l'air d'aller... reste à voir lors de l'utilisation finale...

    Merci encore

    bonne continuation !

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

Discussions similaires

  1. Update MYSQL sur événement on change
    Par Alexiaetcie dans le forum jQuery
    Réponses: 0
    Dernier message: 24/04/2015, 09h42
  2. Problème sur Request.ServerVariables("QUERY_STRING"
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/03/2005, 11h47

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