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

VBA Access Discussion :

List Box Selection Multiple: problème mise à jour macro


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut List Box Selection Multiple: problème mise à jour macro
    Salut à tous!

    J'ai un petit problème avec une macro access.

    Ce que je voudrais faire est de montrer/faire disparaitre un onglet à la séléction d'une option donnée qui se trouve dans une liste multiple d'un formulaire.

    Es. (voir dans le fichier en annexe): si je séléctionne dans une liste à choix multiple le valeur "aaa", alor l'onglet Page7 doit apparaitre (même si la valeur est séléctionnée avec d'autres), autrement l'onglet doit être caché.

    J'ai donc écrit une macro très simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Multiple_Change()
      Dim psEngType As String
          psEngType = Me.Multiple.Text
        If InStr(psEngType, "aaa") > 0 Then
            Me.Page7.Visible = True
        Else
            Me.Page7.Visible = False
        End If
    End Sub
    Toutefois mon problème est que pour faire bien marcher la macro, je dois séléctionner pour deux fois les valeurs, car apparamment le changement n'a pas lieu.

    Je crois que en effet, la macro lise une fois le code, en prénant la valeur originaire qui se trouve enregistrée dans une table, mais ne s'exécute pas après son changement.

    Je crois que c'est plus simple de comprendre le tout dans le fichier d'exemple que j'ai mis en annexe...

    Qu'est-ce que je doit faire?

    Merci,

    giopas
    Fichiers attachés Fichiers attachés

  2. #2
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut
    Tente de mettre _Exit() plutôt que _Change()

    La macro s'effectuera quand l'utilisateur quitte la liste. Ce n'est pas instantané mais ça a le mérite de marcher (j'ai déjà été confronté à ce problème et c'est maintenant la solution que j'adopte).

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci pour la réponse.

    J'ai essayé donc avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Multiple_Exit(Cancel As Integer)
      Dim psEngType As String
          psEngType = Me.Multiple.Text
        If InStr(psEngType, "aaa") > 0 Then
            Me.Page7.Visible = True
        Else
            Me.Page7.Visible = False
        End If
    End Sub
    Toutefois je vois que si le contrôle reste jusqu'au je ne change pas de TAB (je pense se à cela qui se refère l'EXIT). Ce n'est pas une solution terrible, mais si personne d'autre a une idée, je crains qu'elle soit la seule.

    Autrement, je me disais que je pourrais faire tourner la macro deux fois, ainsi que le code lise correctement le nouveau valeur. Comment peux-je faire cela?

    Merci,

    giopas

  4. #4
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut
    Autre solution que tu pourrais essayer: mettre le focus sur un autre controle, et revenir sur ta liste.

    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 Multiple_Change()
    Me.page7.setfocus
    Me.multiple.setfocus
     
      Dim psEngType As String
          psEngType = Me.Multiple.Text
        If InStr(psEngType, "aaa") > 0 Then
            Me.Page7.Visible = True
        Else
            Me.Page7.Visible = False
        End If
    End Sub

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Ehmm, où est-ce que je devrais mettre cette macro?

    Pardon, mais je suis encore un novice...

    Qu'est-ce que c'est Multiple_focus?

    Super merci!!!

    EDIT: je suis bête, "multiple" est mon champ!!

  6. #6
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut
    As tu réussi?

    Je n'ai pas fait de changements transcendantaux dans ta macro, laisse la où elle est (dans l'espace associé à ton formulaire dans l'éditeur visual basic).

    Le seul changement que j'ai fait c'est : sortir du contrôle "Multiple", afin que sa nouvelle valeur soit prise en compte (en mettant le focus sur "page7", mais tu peux le mettre sur n'importe quoi d'autre), puis j'ai fait revenir le focus sur "Multiple".

    Par contre je n'ai pas vraiment testé la fonction donc j'espère qu'elle marche, sinon je laisse à d'autres t'éclairer de leurs lumières...

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Oui, j'ai essayé et j'obtiens l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur d'exécution: '28':
     
    Espace pile insuffisant
    Je crois que ici il y a une explication, mais je ne comprends pas comment dois-je faire alors...

    Un dernier aide?

    MERCI!!!

  8. #8
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut
    Et en enlevant le Me.Multiple.Setfocus? Ca donne quoi?
    Tu as une fonction associée à "page7"?

    Essaye d'envoyer le focus sur un bouton non associé à une fonction si page7 l'est.

    Je t'avoue que je ne suis pas convaincu que ca marche, et je pense que tu devras peut être te contenter d'un _Exit() ou _LostFocus()...

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci Glherbier!

    J'ai essayé d'enlever Me.Multiple.SetFocus et aussi Me.Page7.SetFocus, mais j'obtiens toujours la même erreur.

    J'ai aussi créé un bouton vide dans le db en exemple et modifié le code comme il suit, mais j'ai toujours la même erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Multiple_Change()
    Me.Commande8.SetFocus
    Dim psEngType As String
          psEngType = Me.Multiple.Text
        If InStr(psEngType, "aaa") > 0 Then
            Me.Page7.Visible = True
        Else
            Me.Page7.Visible = False
        End If
    End Sub
    EDIT: je peux te demander d'essayer avec le fichier de test que j'ai attaché, stp?

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Finalement j'ai mis la macro dans LostFocus(), mais je voudrais que le tab apparaisse/soit caché aussi lors de l'ouverture du formulaire.

    Toutefois, si je le mets le même code aussi dans Form_Load(), j'obtiens un bug qui dise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Multiple.Text... = <Impossible de faire référence à une propriété ou de...
    Comment je dois faire?

  11. #11
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Points : 77
    Points
    77
    Par défaut
    C'est parce que le bouton est en cours de "création" et donc tu ne peux pas accéder à sa méthode valeur.

    D'ailleurs sa valeur est nulle, non?

    Donc pourquoi t'embêtes tu, si tu mets juste dans Form_Load()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.Page7.Visible = False
    cela ne te convient pas?

    Ce que tu peux faire par contre durant la création d'un formulaire, c'est accéder à la valeur par défaut du contrôle (et la changer):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.Multiple.Defaultvalue
    Je ne sais pas si ça t'aide...

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Encore merci.

    Non, en effet, le formulaire est une collection de donnés des clients en formulaire unique avec différents tabs pour différentes informations.

    Dans le premier tab j'ai un filtre multiple (ce dont on parle) qui permet de classer le client par type de service qu'on lui fournit.

    Pour chaque client je peux avoir donc différents services à lui fournir.

    Dès lors, dans le cas où je ne fournie pas un tel service "aaa", alors je n'ai pas besoin de montrer le tab "Page7", autrement je veux qu'il apparaisse.

    En effet, par hazard il se trouve que le premier enregistrement ait besoin de visualiser le tab (donc Me.Page7.Visible = True), mais quand je change à travers une liste déroulante de client, ou bien quand je change service proposé au client, je voudrais que le tab s'affiche ou pas en relation du service fourni.

    En cas de modification, grâce à toi, je suis arrivé à le faire d'une facon acceptable. Toutefois, je devrais encore lancer la macro ex-novo à chaque changement du client...

    Comment je peux faire?

    Merci!!

    EDIT: je ne comprend pas avec la deuxième solution ce qu'il devrait se passer...

    EDIT2: j'ai modifié le db d’exemple pour montrer le problème dans le Formulaire3: je voudrais que quand je change d'enregistrement, les tabs s'affichent en suivant la règle définie dans la macro.
    Fichiers attachés Fichiers attachés

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Pardon, est-ce quelqu’un a une idée à proposer sur le sujet (dernier message) ci-dessus?

    Merci!

Discussions similaires

  1. [Débutant] Problème Mise à jour UI avec liste wpf
    Par bobylastar49 dans le forum C#
    Réponses: 1
    Dernier message: 27/02/2013, 21h06
  2. Problème mise à jour liste déroulante
    Par dav787 dans le forum VBA Access
    Réponses: 1
    Dernier message: 10/10/2011, 19h57
  3. Réponses: 1
    Dernier message: 15/10/2009, 10h11
  4. mise en page (liste déroulante) select multiple
    Par jojo22222 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 18/05/2006, 19h23
  5. [HTML] Problème mise à jour des fichiers en cache
    Par El Riiico dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 05/09/2005, 17h00

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