ACCESS - question bête! [Fermé]

Signaler
-
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
-
Bonjour à tous,

vous allez bien rire en lisant mon problème:

j'ai une appli sous ACCESS, à son ouverture cela ouvre automatiquement un menu principal et ça l'agrandit.
Par le biais de outils/Démarrage, je n'ai plus de barre d'outil, sauf celle qui est "générale": Fichier, Edition...
J'ai cherché sur les forum comment la supprimer. Cela est simple, c'est le code:
Private Sub SUPP_MENU()
DoCmd.ShowToolbar "menu bar", acToolbarNo
End Sub


Mon problème, et c'est là que vous allez rire, c'est que je n'arrive pas à mettre ça dans la macro AUTOEXEC que j'ai créée. En effet, cette macro je ne l'ai pas créée en VB, mais directement avec l'outil "Macro" de Access.
Dans ACCESS, je ne trouve pas comment lui dire "exécute la macro SUPP_MENU" parce qu'il ne me la propose pas dans la liste déroulante de sélection des macros.
Et dans VB, je ne sais pas où il a caché le code de la macro AUTOEXEC!!!

Voilà, c'est très bête, et je cherche cette idiotie depuis un petit moment, pour éviter de me taper la honte sur le Web... Pas de pot, je ne trouve pas...
En espérant m'être correctement exprimée, j'espère que quelqu'un pourra m'aider.

10 réponses


Bonjour,

De mémoire :

Sélectionner votre macro, clic droit, choisir [ Convertir la macro ... ]

Section Module, votre routine est la, vous n'avez qui y ajouté l'instruction souhaité.

Lupin
Bonjour Lupin et un grand merci pour ta réponse.

J'ai convertit la macro en Visual Basic, et effectivement j'y trouve bien les instructions du AUTOEXEC.
Mais quand je rajoute ma ligne de commande, il ne l'exécute pas lors de la réouverture du fichier, pourtant, si je l'exécute à part elle fonctionne correctement. C'est comme s'il ne tenait pas compte des instructions VB.
Peux-tu me donner un indice?

re:

Execute-il les autres instructions que tu avais dans la macro original ?

Si oui, a quel endroit as-tu placer le code de la fonction ?

Private Sub SUPP_MENU()
    DoCmd.ShowToolbar "menu bar", acToolbarNo
End Sub


Ici la Sub est déclaré en Private, donc elle doit être dans le même module
que la macro [ AUTOEXEC ].

Sinon, tu peux remplacer la déclaration par :

Public Sub SUPP_MENU()
    DoCmd.ShowToolbar "menu bar", acToolbarNo
End Sub


et faire ton appel : Call SUPP_MENU

Lupin
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
Bonjour Lupin! Merci pour ta réponse rapide, je n'étais pas sur PC depuis.

Oui il exécute bien les autres instructions.

En fait, j'ai convertie la macro AUTOEXEC que j'avais créée sous ACCESS. Cela a créé un nouveau module.
J'ai modifié le contenu de ce module pour obtenir:

Function AUTOEXEC()
On Error GoTo AUTOEXEC_Err

    DoCmd.OpenForm "MENU_PRINCIPAL", acNormal, "", "", acReadOnly, acNormal
    DoCmd.Maximize
    DoCmd.ShowToolbar "menu bar", acToolbarNo

AUTOEXEC_Exit:
    Exit Function

AUTOEXEC_Err:

    MsgBox Error$
    Resume AUTOEXEC_Exit
    
End Function


J'ai donc inséré ma nouvelle commande directement dans la macro.



Et là je viens de tester en utilisant un CALL SUPP_MENU:
Function AUTOEXEC()
On Error GoTo AUTOEXEC_Err

    DoCmd.OpenForm "MENU_PRINCIPAL", acNormal, "", "", acReadOnly, acNormal
    DoCmd.Maximize
    Call SUPP_MENU

AUTOEXEC_Exit:
    Exit Function

AUTOEXEC_Err:

    MsgBox Error$
    Resume AUTOEXEC_Exit
    

End Function

Private Sub SUPP_MENU()
DoCmd.ShowToolbar "menu bar", acToolbarNo
End Sub


Mais il n'exécute toujours pas SUPP_MENU. Il exécute toujours la macro définir dans ACCESS.

re:

Tu peux essayer de ces 2 façons :

Function AUTOEXEC()
On Error GoTo AUTOEXEC_Err

    DoCmd.OpenForm "MENU_PRINCIPAL", acNormal, "", "", acReadOnly, acNormal
    DoCmd.Maximize
    Call SUPP_MENU

AUTOEXEC_Exit:
    Exit Function

AUTOEXEC_Err:

    MsgBox Error$
    Resume AUTOEXEC_Exit
    

End Function

Private Sub SUPP_MENU()
    MsgBox "Avant"
    DoCmd.ShowToolbar "menu bar", acToolbarNo
    MsgBox "Après"
End Sub
'


ou

Function AUTOEXEC()
On Error GoTo AUTOEXEC_Err

    MsgBox "Avant"
    DoCmd.ShowToolbar "menu bar", acToolbarNo
    MsgBox "Après"
    DoCmd.OpenForm "MENU_PRINCIPAL", acNormal, "", "", acReadOnly, acNormal
    DoCmd.Maximize
    Call SUPP_MENU

AUTOEXEC_Exit:
    Exit Function

AUTOEXEC_Err:

    MsgBox Error$
    Resume AUTOEXEC_Exit
    

End Function
'


Ainsi, tu pourras valider l'exécution de la ligne :

DoCmd.ShowToolbar "menu bar", acToolbarNo

Peut-être, y a-t-il une erreur de syntaxe ???

Lupin
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
ACCESS ne lit pas ma macro du tout en fait.
Par exemple, si je supprime la macro AUTOEXEC créée directement dans ACCESS, plus rien ne se passe.
Ce que j'ai mis en VB Access, il ne le lit pas.

re:

Bon, là c'est plus indicatif !

Dans un premier temps et ce de façon intuitive car je n'ai pas Access sous la main,

la procédure devrait être déclaré comme une procédure et non comme une fonction.

Function AUTOEXEC()

devrait plutôt su lire :

Sub AUTOEXEC()

mais, en regardant sur Google, j'ai cru comprendre qu'il faut dire au projet d'Access
de démerrer sur une procédure plutôt que sur un formulaire.

J'aurai accès à Access ce soir et je te dirai ce qu'il en est.

Lupin
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
Merci pour ton aide.
Je vais attendre tes conseils de ce soir.
Bon après-midi

Bonsoir,

enfin pour moi, et je pourrais même dire bonne nuit (00:04) :-)

Terminant un cours sur vb.net, je regarde sous access ton dilème :-)

Dans mon premier message, je me suis gouré royalement, même dans
mon bouquin, je n'ai rien trouvé sur Auto_Open, le traditionnel
évènement sous Word et Excel et je ne l'avais jamais utiliser.

Et tu était dans le droit chemin en utilisant la macro AutoExec reconnu
dès l'ouverture de Access, alors voici ce qui me plait, j'aurai beaucoup
apprit avec toi !

C'est là toute ma récompense :-)

Première chose, au moment de rajouter la ligne de code dans la fonction,
tu étais dans l'éditeur VBA, à gauche tu devrais voir 2 zones, une en haut
[ Projet - NomDeTaTable ] et une en bas [ Propriétés - de l'objet pointé].

Donc, pointe le module qui devrait se nommer [ Macro convertie - Autoexec ]
et dans la zone du bas, dans la propriété [ Name ], inscrit Demarrage (sans accent).

Si j'étais toi, je changerais aussi le nom de la fonction, car selon ce que je vois dans le
code c'est une ouverture automatique d'un formulaire, j'appellerais cela [ AutoOpen ]
mais ce n'est que mon idée, libre à toi de conserver les noms en place.

J'ai donc fait comme toi en créant d'abord une macro que je nommé [ AutoExec ]

Je converti celle-ci en module avec le code, et j'obtiens le même résultat que toi, la
fonction ne s'exécute pas.

Maintenant ce qu'il te reste à faire, c'est de créer une nouvelle macro qui
s'intitule [ Exécuter code ], à ce stade dans le bas du panorama, tu as une zone
de texte nommé [ Nom fonction ] avec une objet (parcourir) au bout de la zone,
l'élément [...].

Une fenetre apparait avec dans une zone le mot [ Fonctions ] précédé d'un +,
clic sur ce +, et ensuite clic sur ta base et "non les [ Fonctions intégrées]".

Dans ta base tu découvrira le module qui devrait se nommer [ Demarrage ] ou
[ Macro convertie ... ] si tu n'as pas changer le nom, tu clic dessus,

et la tu trouveras la function créé, un dernier clic sur celle ci et elle apparait
dans la zone de formule, un clic sur OK et c'est terminé.

Ton code va s'exécuter. :-)

Lupin

re:

c'est la fonction testé:
Function AUTOEXEC()
On Error GoTo AUTOEXEC_Err

    DoCmd.ShowToolbar "menu bar", acToolbarNo
    DoCmd.OpenForm "MENU_PRINCIPAL", acNormal, "", "", acReadOnly, acNormal
    DoCmd.Maximize
    Call SUPP_MENU

AUTOEXEC_Exit:
    Exit Function

AUTOEXEC_Err:

    MsgBox Error$
    Resume AUTOEXEC_Exit
    

End Function
'


Lupin
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
Bonjour Lupin,

Merci pour tes explications très détaillées. Je suis contente que la résolution de ce problème t'apporte également un intérêt!
Malheureusement, j'ai suivi scrupuleusement toutes tes instructions, et j'ai toujours une barre d'outils qui traîne (Fichier/Edition/Insertion/Enregistrement/Fenêtre).
Quand j'exécute la macro SUPP_MENU, celle-ci se supprime bien. Mais elle ne se supprime toujours pas à l'ouverture du fichier. Je ne comprends pas. Ta procédure devrait parfaitement résoudre mon problème. Je dois avoir un truc qui ne colle pas.
Je me permets de t'envoyer ce que j'ai exactement, si tu pouvais chercher où est mon erreur?

Première chose, au moment de rajouter la ligne de code dans la fonction,
tu étais dans l'éditeur VBA, à gauche tu devrais voir 2 zones, une en haut
[ Projet - NomDeTaTable ] et une en bas [ Propriétés - de l'objet pointé].
Donc, pointe le module qui devrait se nommer [ Macro convertie - Autoexec ]
et dans la zone du bas, dans la propriété [ Name ], inscrit Demarrage (sans accent).

---> effectué

Si j'étais toi, je changerais aussi le nom de la fonction, car selon ce que je vois dans le
code c'est une ouverture automatique d'un formulaire, j'appellerais cela [ AutoOpen ]
mais ce n'est que mon idée, libre à toi de conserver les noms en place.

---> effectué. Voici mon nouveau code:
Function AUTO_OPEN()
On Error GoTo AUTO_OPEN_Err

    DoCmd.OpenForm "MENU_PRINCIPAL", acNormal, "", "", acReadOnly, acNormal
    DoCmd.Maximize
    Call SUPP_MENU

AUTO_OPEN_Exit:
    Exit Function
    
AUTO_OPEN_Err:

    MsgBox Error$
    Resume AUTO_OPEN_Exit
    
End Function

Sub SUPP_MENU()
    DoCmd.ShowToolbar "menu bar", acToolbarNo
End Sub


Pour SUPP_MENU, j'ai essayé avec private sub, public sub, dans un autre module.


J'ai donc fait comme toi en créant d'abord une macro que je nommé [ AutoExec ]
Je converti celle-ci en module avec le code, et j'obtiens le même résultat que toi, la
fonction ne s'exécute pas.
Maintenant ce qu'il te reste à faire, c'est de créer une nouvelle macro qui
s'intitule [ Exécuter code ], à ce stade dans le bas du panorama, tu as une zone
de texte nommé [ Nom fonction ] avec une objet (parcourir) au bout de la zone,
l'élément ..............et la tu trouveras la function créé, un dernier clic sur celle ci et elle apparait
dans la zone de formule, un clic sur OK et c'est terminé.

--> J'ai modifié la macro ACCESS AUTOEXEC et dedans j'ai mis "Exécuter code" et j'ai sélectionné la fonction "AUTO_OPEN" comme tu me l'as expliqué.
J'ai aussi essayé de créer une macro AUTOEXEC2 qui exécute la fonction AUTO_OPEN, et AUTOEXEC qui exécute la macro AUTOEXEC2.

Et à l'ouverture, il a tout d'abord une barre d'outils Fichier/Edition/Affichage/Insertion/Outil/Fenêtre/?.
Il ouvre le formulaire MENU_PRINCIPAL, il l'agrandit, et quand il exécute SUPP_MENU, une barre d'outil un peu différente apparaît: Fichier/Edition/Insertion/Enregistrement/Fenêtre/?. Alors je me suis dit que ma macro SUPP_MENU ne pointait pas sur cette barre d'outils là, malheureusement si. Si je force l'exécution de ma macro SUPP_MENU, la "seconde" barre d'outil d'efface bie !? !? !

Là, je suis un peu dépitée, j'ai essayé de torturer le tout dans tous les sens, mais rien n'y fait.
J'oublie forcément quelquechose, mais je n'arrive pas à mettre le doigt dessus.
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
Problème résolu (mais en recherche d'une meilleure solution)!
Dans Outils/Démarrage, j'avais décoché toutes les options.
Or par hasard, j'ai découvert que si la case "Afficher les barres d'outils intégrées" est décochée, ACCESS n' exécute pas ma macro SUPP_MENU. Pourquoi comment, je ne comprends pas trop, car je ne vois même pas le rapport.

Donc il faut que je la coche. Certes dans ce cas, je n'ai plus ma barre d'outil "Fichier/Edition...", mais j'en ai deux autres que je ne vois pas si "Afficher les barres d'outils intégrées" est décochée: les barres d'outil "Mise en forme" et "Formulaire". Du coup, il faut maintenant que je trouve le code pour désafficher ces nouvelles barres d'outils!!!
Aaaarggh!!! comme dirait Garfield!

J'ai aussi découvert qu'on peut personnaliser la barre d'outil et autoriser ou non le masquage des barres: Affichage / Barre d'outil / personnaliser.

J'explique comment je m'en suis sortie, ça aiderait peut-être d'autres personnes:
1) j'ai coché la case "Afficher les barres d'outils intégrées".
2) j'ai autorisé le masquage de toutes les barres d'outil
3) J'ai ouvert ACCESS en mode modification, j'ai ouvert un formulaire pour lequel il affichait les deux barres d'outils "Mise en forme" et "Formulaire".
4) Dans Affichage / Barres d'outils, je décoche ces deux barres d'outils.
5) A la prochaine ouverture du fichier, toutes les barres ont disparues.

Bon ça c'est déjà bien, ça m'enlève une épine du pied. Je te remercies pour ton aide Lupin, sans toi je n'y serais jamais arrivée!

Néanmoins, si la solution fonctionne, la méthode est tout de même pitoyable. Déjà parce que je ne comprends pas le comportement d'Access dans la gestion de ses barres de menus, et d'autre part parce que mon appli va être mise à dispo par le biais de Citrix. Or pour chaque utilisateur un par un, il faut:
1) changer les options définies dans Outils/Démarrage et désactiver dans VB le code qui masque le barre d'outil "Barres de menus"
2) il faut lancer l'appli via Citrix avec les identifiants de l'utilisateur
3) il faut aller dans la barre d'outil "Barre Menus"/ Affichage / Barre d'outil et décocher les barres d'outils qui traînent.
4) il faut fermer l'appli et enregistrer
5) remettre comme il faut les options définies dans l'appli / Outils/Démarrage et REactiver dans VB le code qui masque la barre.

A la prochaine ouverture de cet utilisateur, c'est bon...
Déjà je vais me faire un cahier de procédure rien que pour faire tout ça, parce que si dans 3 mois, j'ai un nouvel utilisateur, j'aurais du mal à lui fournir l'appli comme il faut!

Voilà, j'espère que toutes mes explications pourront servir au prochain.
En attendant, si quelqu'un a une meilleure méthode, qu'il n'hésite pas à nous la faire partager!

Je passe le sujet en résolu, mais il peut-être amélioré je pense.

Bonne journée au forum, et merci encore Lupin!