Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/03/2011, 17h53   #1
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
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 :
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
Type de fichier : zip TESTtab.zip (60,8 Ko, 10 affichages)
giopas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 18h34   #2
Membre du Club
 
Inscription : août 2008
Messages : 86
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 86
Points : 43
Points : 43
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).
Glherbier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 19h02   #3
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
Merci pour la réponse.

J'ai essayé donc avec:

Code :
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
giopas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 10h55   #4
Membre du Club
 
Inscription : août 2008
Messages : 86
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 86
Points : 43
Points : 43
Autre solution que tu pourrais essayer: mettre le focus sur un autre controle, et revenir sur ta liste.

Code :
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
Glherbier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 12h10   #5
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
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!!
giopas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 12h36   #6
Membre du Club
 
Inscription : août 2008
Messages : 86
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 86
Points : 43
Points : 43
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...
Glherbier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 14h18   #7
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
Oui, j'ai essayé et j'obtiens l'erreur:

Code :
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!!!
giopas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 14h27   #8
Membre du Club
 
Inscription : août 2008
Messages : 86
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 86
Points : 43
Points : 43
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()...
Glherbier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 14h50   #9
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
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 :
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?
giopas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 16h53   #10
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
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 :
Me.Multiple.Text... = <Impossible de faire référence à une propriété ou de...
Comment je dois faire?
giopas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 18h24   #11
Membre du Club
 
Inscription : août 2008
Messages : 86
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 86
Points : 43
Points : 43
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 :
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 :
1
2
 
Me.Multiple.Defaultvalue
Je ne sais pas si ça t'aide...
Glherbier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 19h03   #12
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
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
Type de fichier : zip TESTtab2.zip (66,5 Ko, 6 affichages)
giopas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 10h29   #13
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme

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

Merci!
giopas est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h02.


 
 
 
 
Partenaires

Hébergement Web