VBA : Changement du mode d'affichage

Le
Gloops
Bonjour tout le monde,

Je cherche à changer le mode d'affichage d'un formulaire, par l'action =

d'une touche.

Par le menu, déclenché par l'utilisateur, ça se passe très bien. =
On peut
passer du mode table au mode formulaire.

Par le code, si j'en crois la page
http://support.microsoft.com/kb/128425/en-us ça donne, pour View / For=
m :
DoCmd.DoMenuItem A_FORMBAR, 2, 1, , A_MENU_VER20

Le premier ennui c'est que si je fais ça je me ramasse une erreur 2174,=

impossible de changer de mode d'affichage pour le moment.

Normal, on est en train de traiter la touche.

Je renvoie ça dans le timer, que je déclenche à partir de la touche=
.

L'instruction s'exécute proprement, sans message d'erreur, ce que je
peux vérifier en recommençant après avoir mis une pause dessus, mai=
s
l'ennui c'est que ça ne se voit pas à l'écran : le formulaire reste=
en
mode table.

Si je fais par curiosité une simulation de touches pour appeler le menu=

(pas terrible, ça fonctionne dans une version et terminé), erreur 217=
4,
sauf si je laisse l'utilisateur valider par Entrée.

Est-ce que ça inspire quelqu'un ? Ouvrir un autre formulaire pour qu'il=

vienne modifier le mode d'affichage de celui-ci ? Hum, un peu lourd,
peut-être ?
Je m'en suis sorti en fermant et rouvrant le formulaire, avec une
variable booléenne pour arrêter le code.


(Access 2003 SP2, Windows XP Pro)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
3stone
Le #6380931
Salut,

"Gloops" Je cherche à changer le mode d'affichage d'un formulaire, par l'action
d'une touche.

Par le menu, déclenché par l'utilisateur, ça se passe très bien. On peut
passer du mode table au mode formulaire.

Par le code, si j'en crois la page
http://support.microsoft.com/kb/128425/en-us ça donne, pour View / Form :
DoCmd.DoMenuItem A_FORMBAR, 2, 1, , A_MENU_VER20
[...]



Evite les 'DoMenuItem' qui datent de Access 2.0 ;-(

Utilise plutôt :

DoCmd.RunCommand acCmdFormView
et
DoCmd.RunCommand acCmdDatasheetView

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Gloops
Le #6335251
3stone a écrit, le 12/11/2007 21:07 :
Evite les 'DoMenuItem' qui datent de Access 2.0 ;-(

Utilise plutôt :

DoCmd.RunCommand acCmdFormView
et
DoCmd.RunCommand acCmdDatasheetView



Ah, effectivement, ils étaient passés à travers, ceux-là :)

Le seul ennui, c'est que ça laisse Access de marbre :

Pendant et après DoCmd.RunCommand acCmdFormView, le formulaire courant
reste affiché en mode table.
Il faut mettre une pause dans la procédure pour être sûr qu'elle es t
exécutée.

Je me demande quoi faire avec l'aide de acFormView, qui présente
quelques constantes, et rien d'autre :
acDesign = 1
acFormDS = 3
acFormPivotChart = 5
acFormPivotTable = 4
acNormal = 0
acPreview = 2

3stone
Le #6335221
Salut,

"Gloops"
3stone a écrit, le 12/11/2007 21:07 :
Evite les 'DoMenuItem' qui datent de Access 2.0 ;-(

Utilise plutôt :

DoCmd.RunCommand acCmdFormView
et
DoCmd.RunCommand acCmdDatasheetView



Ah, effectivement, ils étaient passés à travers, ceux-là :)

Le seul ennui, c'est que ça laisse Access de marbre :
----

Le 'DoCmd' s'adresse en principe à l'objet qui a le focus...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)

Gloops
Le #6335191
3stone a écrit, le 19/11/2007 20:08 :

Le 'DoCmd' s'adresse en principe à l'objet qui a le focus...



Ah, ça, pour avoir le focus, il a le focus ...

Je me suis fait jeter depuis Form_KeyPress, alors j'ai déclenché un
Form_Timer, et l'instruction est bien exécutée. Tant que je ne mets p as
de pause dedans, je n'ai aucun moyen d'en être sûr.

Etant donné qu'il n'y a

Gloops
Le #6335181
Gloops a écrit, le 19/11/2007 21:25 :
3stone a écrit, le 19/11/2007 20:08 :

Le 'DoCmd' s'adresse en principe à l'objet qui a le focus...



Ah, ça, pour avoir le focus, il a le focus ...

Je me suis fait jeter depuis Form_KeyPress, alors j'ai déclenché un
Form_Timer, et l'instruction est bien exécutée. Tant que je ne mets pas
de pause dedans, je n'ai aucun moyen d'en être sûr.

Etant donné qu'il n'y a
aucun autre moyen que le focus pour indiquer à quel formulaire s'adress e

l'instruction, je me doutais un peu qu'il était nécessaire :)


Publicité
Poster une réponse
Anonyme