I. Introduction▲
				L'une des nouveautés les plus visibles d'Office 2007, a été le remplacement des menus par le ruban. 
Deux camps se sont aussitôt formés : 
			
- Les inconditionnels ne voulant plus entendre parler de menu.
 - Les réfractaires déconcertés par la place occupée et par le changement de langage nécessaire à la personnalisation. du ruban
 
Or il s'avère que, pour ceux qui le souhaitent, l'on peut tout à fait supprimer le ruban dans une application et le remplacer par des menus personnalisables.
Cela ne peut fonctionner qu'avec des fichiers .mdb ou .mde.
 Pour les fichiers au nouveau format 2007 .accdb 
				et .accde, vous devez passer directement à la configuration du ruban. 
			
I-A. Illustration▲
Voici une base d'une version 2000-2003, ouverte avec Access 2007, avec son menu dans l'onglet Compléments du ruban.

Voici dans la même application, le même menu sans le ruban.

II. Mise en application▲
II-A. Principes de fonctionnement▲
- Condition 1 
Vos menus doivent être créés dynamiquement
Cela peut sembler à première vue un obstacle, mais en fait après avoir lu et assimilé l'excellent tutoriel de Philippe JOCHMANS sur le lien suivant https://starec.developpez.com/tuto/barrecommande/. vous vous apercevrez que même en étant un néophyte comme moi, cela devient tout à fait réalisable. - Condition 2 
Vous devez créer votre barre de menus par code, lors du démarrage de l'application. - Condition 3 
Vous devez paramétrer votre application pour qu'elle refuse le Ruban et les menus intégrés, et pour qu'elle accepte votre menu personnalisé. 
II-B. Application▲
Pour étayer notre propos nous allons simuler une application avec trois formulaires.
- Un formulaire Menu général "Frm_Accueil" avec un menu popup "Fichier" et un menu popup "Edition"
- Un formulaire N°1 "Frm_1" sans menu

- Un formulaire N°2 "Frm_2" avec un menu popup "Fichier", des boutons de filtre, tri , recherche et retour sur le menu général.

II-B-1. Code Vba▲
Il faut commencer par s'assurer que la référence Microsoft Office 12 Object Library est bien cochée, ainsi que Microsoft DAO X.XX Object Library

II-B-1-a. Module Fonctions▲
Nous allons créer un module appelé " Fonctions " dans lequel nous mettrons toutes les fonctions à appeler.
Option Compare Database
Option Explicit
'------------------------------------------------------------
' Tri_croissant
'-----------------------------------------------------------
Public Function Tri_croissant()
    On Error GoTo Tri_croissant_Err
    DoCmd.RunCommand acCmdSortAscending
Tri_croissant_Exit:
    Exit Function
Tri_croissant_Err:
    MsgBox Error$
    Resume Tri_croissant_Exit
End Function
'------------------------------------------------------------
' Tri_décroissant
'------------------------------------------------------------
Public Function Tri_decroissant()
    On Error GoTo Tri_decroissant_Err
    DoCmd.RunCommand acCmdSortDescending
Tri_decroissant_Exit:
    Exit Function
Tri_decroissant_Err:
    MsgBox Error$
    Resume Tri_decroissant_Exit
End Function
'--------------------------------------------------------------
'Retour formulaire accueil
'------------------------------------------------------------
Public Function Retour()
    On Error GoTo Retour_Err
    'Ferme le formulaire et revient au formulaire d'accueil
    DoCmd.Close acForm, "Frm_2"
    Form_Frm_Accueil.SetFocus
    'Reconstruit la barre de menus originale
    Call CreateMenuGen
Retour_Exit:
    Exit Function
Retour_Err:
    MsgBox Error$
    Resume Retour_Exit
End FunctionII-B-1-b. Module Menus▲
Puis nous créons un autre module "Menus"
Option Compare Database
Option Explicit
Public Function CreateMenu()
    Dim cmb As Office.CommandBar
    Dim btn As Office.CommandBarButton
    Dim cmbBtn1 As CommandBarButton
    Dim cmbBtn2 As CommandBarButton
    Dim cmbBtn3 As CommandBarButton
    Dim cmbBtn4 As CommandBarButton
    Dim cmbBtn5 As CommandBarButton
    Dim cmbBtn6 As CommandBarButton
    Dim cmbFic As Office.CommandBarPopup
    On Error Resume Next
    Application.CommandBars("MyMenu").Delete
    ' On crée la barre de menu
    Set cmb = Application.CommandBars.Add("MyMenu", msoBarTop, True, False)
    ' On crèe le menu fichier
    Set cmbFic = cmb.Controls.Add(msoControlPopup)
    cmbFic.Caption = "&Fichier"
    'On ajoute les boutons Apercu, Mise en page et Imprimer
    Set btn = cmbFic.Controls.Add(msoControlButton, 247)
    Set btn = cmbFic.Controls.Add(msoControlButton, 109)
    Set btn = cmbFic.Controls.Add(msoControlButton, 4)
    'On Ajoute le bouton  Filtre
    Set cmbBtn1 = cmb.Controls.Add(msoControlButton, 640)
    cmbBtn2.BeginGroup = True
    'On Ajoute le bouton "Tous les enregistrements"
    Set cmbBtn2 = cmb.Controls.Add(msoControlButton, 605)
    ' Ajout sur la barre du bouton  "Recherche"
    Set cmbBtn3 = cmb.Controls.Add(msoControlButton, 141)
    cmbBtn3.BeginGroup = True
    ' Ajout sur la barre du bouton  "Tri croissant"
    Set cmbBtn4 = cmb.Controls.Add(msoControlButton)
    With cmbBtn4
        .Style = msoButtonIcon
        .BeginGroup = True
        .FaceId = 210
        .TooltipText = "Tri croissant"
        .OnAction = "=Tri_croissant()"
    End With
    ' Ajout sur la barre du bouton  "Tri décroissant"
    Set cmbBtn5 = cmb.Controls.Add(msoControlButton)
    With cmbBtn5
        .Style = msoButtonIcon
        .BeginGroup = False
        .FaceId = 211
        .TooltipText = "Tri décroissant"
        .OnAction = "=Tri_decroissant()"
    End With
    ' Ajout sur la barre du bouton  "Retour accueil"
    Set cmbBtn6 = cmb.Controls.Add(msoControlButton)
    With cmbBtn6
        .Caption = "Retour Accueil"
        .Style = msoButtonIconAndCaption
        .BeginGroup = True
        .FaceId = 2151
        .TooltipText = "Retour au menu principal"
        .OnAction = "=Retour()"
    End With
    cmb.Visible = True
End Function
Public Function CreateMenuGen()
  ' Création de la barre de menus du formulaire  d'accueil
    Dim cmb As Office.CommandBar
    Dim cmbFic As Office.CommandBarPopup
    On Error Resume Next
    Application.MenuBar = ""
    Application.CommandBars("MyMenu").Delete
    Set cmb = Application.CommandBars.Add("MyMenu", msoBarTop, True, False)
    ' ajout du menu popup "fichier"
    Set cmbFic = Application.CommandBars("Menu Bar").Controls(1)
    cmbFic.Copy cmb
    ' ajout du menu popup "Edition"
    Set cmbFic = Application.CommandBars("Menu Bar").Controls(2)
    cmbFic.Copy cmb
	Call CreatePropertyMenu    
	cmb.Visible = True
End FunctionII-B-1-c. Code Formulaire Menu Général▲
Option Compare Database
Option Explicit
Private Sub Cmd_OpenForm1_Click()
    On Error GoTo Err_Cmd_OpenForm1_Click
    Dim stDocName As String
    DoCmd.RunCommand acCmdWindowHide
    stDocName = "Frm_1"
    DoCmd.OpenForm stDocName, acNormal
Exit_Cmd_OpenForm1_Click:
    Exit Sub
Err_Cmd_OpenForm1_Click:
    MsgBox Err.Description
    Resume Exit_Cmd_OpenForm1_Click
End Sub
Private Sub Cmd_OpenForm2_Click()
    On Error GoTo Err_Cmd_OpenForm2_Click
    Dim stDocName As String
    'Ouvre le formulaire Frm_2
    Application.Echo False
    DoCmd.RunCommand acCmdWindowHide
    stDocName = "Frm_2"
    DoCmd.OpenForm stDocName, acNormal
    DoCmd.Maximize
    'transforme la barre de menus du formulaire 2
    Call CreateMenu
    Application.Echo True
Exit_Cmd_OpenForm2_Click:
    Exit Sub
Err_Cmd_OpenForm2_Click:
    MsgBox Err.Description
    Resume Exit_Cmd_OpenForm2_Click
End Sub
Private Sub Form_Load()
'rend la barre de menus visible à l'ouverture
DoCmd.ShowToolbar "MyMenu", acToolbarYes
End SubII-B-1-d. Code Formulaire 1▲
Code Sur Form_Frm1
Option Compare Database
Option Explicit
Private Sub Cmd_Retour_Click()
    On Error GoTo Err_Cmd_Retour_Click
    'On ferme le formulaire
    DoCmd.Close
    'on revient au formulaire d'accueil
    Form_Frm_Accueil.SetFocus
    'On rend visible le menu
    DoCmd.ShowToolbar "MyMenu", acToolbarYes
Exit_Cmd_Retour_Click:
    Exit Sub
Err_Cmd_Retour_Click:
    MsgBox Err.Description
    Resume Exit_Cmd_Retour_Click
End Sub
Private Sub Form_Load()
    DoCmd.ShowToolbar "MyMenu", acToolbarNo
End SubII-B-1-e. Code Formulaire 2▲
Code Sur Form_Frm_2
Option Compare Database
Option Explicit
Private Sub Form_Load()
'Rend le menu visible
    DoCmd.ShowToolbar "MyMenu", acToolbarYes
    Me.SetFocus
End SubII-B-2. Options de démarrage▲
Quatre propriétés de démarrage nous intéressent plus particulièrement.
- La propriété AllowBuiltInToolbars qui correspond à "Autoriser les menus intégrés "
 - La propriété AllowFullMenus qui correspond à " Afficher les menus complets "
 - La propriété StartUpMenuBar qui correspond à " Barre de Menu "
 - La propriété StartUpForm qui correspond à " Afficher le formulaire "
 
Pour paramétrer ces propriétés nous allons ajouter les codes suivants dans le module " Menus "
Function ModifProp(chNomPropriete As String, varTypeProp As Variant, varValeurProp As Variant) As Integer
    Dim MyDb As DAO.Database
    Dim prp As DAO.Property
    Const conErreurPropNonTrouvee = 3270    'code erreur si propriété non trouvée
    Set MyDb = CurrentDb
    On Error GoTo Change_Err
    MyDb.Properties(chNomPropriete) = varValeurProp
    ModifProp = True
    Exit Function
Change_Err:
    If Err = conErreurPropNonTrouvee Then   'Crèe la propriété
        Set prp = MyDb.CreateProperty(chNomPropriete, varTypeProp, varValeurProp)
        MyDb.Properties.Append prp
        Resume Next
    Else
        ModifProp = False
        Exit Function
    End If
End Function
Public Function CreatePropertyMenu()
    Call ModifProp("AllowBuiltInToolbars", dbBoolean, False)    'refuse les menus intégrés
    Call ModifProp("AllowFullMenus", dbBoolean, False)          'refuse les menus complets
    Call ModifProp("StartUpMenuBar", dbText, "MyMenu")          'nom du menu à l'ouverture
    Call ModifProp("StartUpForm", dbText, "")                   'Pas de formulaire au démarrage
                                                                'c'est l'autoexec qui doit le faire.
End FunctionCréons une procédure à lancer au démarrage. Pour cela un petit module " Load "
Option Compare Database
Option Explicit
Public Function demarrage()
    Application.Echo False
    'Lance le processus
    Call CreateMenuGen
    
    'Ouvre le formulaire d'accueil
    Dim stDocName As String
    stDocName = "Frm_Accueil"
    DoCmd.OpenForm stDocName, acNormal
    DoEvents
    Application.Echo True
End Function
						Il ne reste plus qu'à créer une macro autoexec lançant la fonction " demarrage () " 
 Voilà c'est 
						terminé. Vous pouvez ouvrir votre application et voir le résultat.
 Ne pas oublier que vous avez 
						la touche Maj au démarrage pour revenir aux menus normaux. 
					
III. Conclusion▲
				Je n'ai pas créé ce processus pour m'opposer aux adeptes du Ruban (dont je me sers régulièrement), mais 
				simplement pour montrer que l'on peut tout à fait opter pour une solution autre que celle imposée. 
				
				Cela s'apparente un peu à du bricolage et cela peut sembler compliqué, mais une fois créé quelques 
				menus standards, cela devient presque aussi facile qu'avant.
 Si les menus sont créés de cette façon dans 
				les versions antérieures, ils pourront être lus sans problème avec Access 2007 et vous pourrez les 
				modifier à votre guise. Vous pouvez ainsi anticiper la transition.
				 Mon regret est bien sûr que cela ne fonctionne pas avec les nouveaux formats d'Access. 
			
Vous pouvez télécharger le fichier servant d'exemple
A noter que ces applications fonctionnent avec le Runtime.
IV. Remerciements▲
Je tiens à remercier tout particulièrement Domi2, Philippe JOCHMANS, Tofalu, Pierre FAUCONNIER et l'équipe des rédacteurs Office pour leur patience et leur accueil.





