Bonjour a tous,
Nouveau sur ce forum, désolé si cette question à été posée !!!
Je cale sur un problème de personnalisation du ruban.
j'ais mis 6 bouton pour aller sur des feuilles précises. Le "bouton id" à le même nom que la feuille de destination
pas d'erreur à la validation mais dans excel cela ne fonctionne pas.
est-il obligatoire de créer une macro dans le classeur ?
quel syntaxe mettre ?
Merci pour votre aide
Le début du code est ci-après :
Le nom du classeur est :Gestion 2012-2013.xlsm
Ce que tu as écrit crée les boutons mais n'indique nullement à excel d'aller sur une feuille X d'un classeur Y.
Franchement modifier le ruban programmatiquement dan excel ce n'est pas très intuitif.
D'excellents tutos (en anglais simple) par Ron de Bruin, MVP néerlandais ici Change the Ribbon in Excel 2007 or Excel 2010
Mais le plus simple c'est quand même de mettre les boutons dans le classeur
ou de mettre des liens hypertexte renvoyant vers les feuilles d'intérêt sur chaque page importante du classeur (avec un sommaire en première page par exemple)
Mon classeur à plus de 400 feuille excel, si je passe par le ruban pour les secteur principaux c'est dans le but de réduire la taille de mon classeur. Le fichier pèse 5 Mo.
De plus pour la navigation entre les feuilles c'est plus simple....
Merci
Le fait de mettre les boutons dans le menu ne réduira en rien la taille de ton fichier.
Pour la navigation entre les feuilles c'est effectivement une bonne solution de faire cela dans le ruban mais autant avec 2003 et antérier c'était facile à faire autant maintenant comme tu peux t'en rendre compte c'est un peu galère.
En fait un truc un peu bourrin mais qui marche très bien c'est de faire les menus... dans excel 2003 puis d'ouvrir le classeur dans excel 2007 tu retrouves tes boutons et menus dans l'onglet complément
Je te propose 3 solutions alternatives à télécharger ici pour essayer et voir si ça te convient Ce lien n'existe plus Ce lien n'existe plus Ce lien n'existe plus
| mais qui marche très bien c'est de faire les menus... dans excel 2003
| puis d'ouvrir le classeur dans excel 2007
Je pense que tu sais déjà, on peut ajouter directement une barre des menus directement dans
un classeur 2007/2010 et comme tu le mentionnes le retrouver sous l'onglet Complément.
À titre d'exemple, voici l'ancien menu d'Excel 2003 que l'on peut ajouter dans les récentes versions
VB:
Sub Recréer_Ancien_Menu()
Dim MichD As CommandBar
On Error Resume Next
'Supprime la barre "MichD" si elle existe
Application.CommandBars("MichD").Delete
'Créer une barre de menu personnalisée
Set MichD = Application.CommandBars.Add("MichD", , True)
'copie les menus dans la nouvelle barre des menus
With CommandBars("Built-in Menus")
.Controls("&Fichier").Copy MichD
.Controls("&Edition").Copy MichD
.Controls("&Affichage").Copy MichD
.Controls("&Insertion").Copy MichD
.Controls("F&ormat").Copy MichD
.Controls("&Outils").Copy MichD
.Controls("&Données").Copy MichD
.Controls("&Fenêtre").Copy MichD
.Controls("&?").Copy MichD
End With
'Rendre visible la nouvelle barre des menus
'Elle sera disponible sous l'onglet "Complément" de
'la barre des menus dans les versions Excel 2007 et 2010
Application.CommandBars("MichD").Visible = True
End Sub
Mais si tu veux utiliser cela pour que ce soit disponible dans tous les classeurs que tu ouvres,
Tu copies cette procédure dans un module standard d'un classeur vierge et tu utilises
l'événement "Workbook_Open" pour appeler la procédure.
Profite de l'occasion que la fenêtre VBA soit ouverte pour modifier le nom du projetVBA
de ce classeur. C'est sous ce nom que tu retrouveras plus tard, ta macro complémentaire.
Pour ce faire, tu sélectionnes le projetVBA et tu modifies la propriété Name.
Il ne te reste plus qu'à enregistrer le fichier comme fichier de macros complémentaires (.xlam)
en t'assurant d'en placer une copie dans ce répertoire : (Windows 7 et Office 2010)
Pour que la barre des menus soit disponibles, il ne te reste plus qu'à cocher la macro complémentaire
(Fichiers / Options / Compléments / complément Excel / atteindre et tu coches la macro complémentaire
Pour ceux que la chose intéresse, tu peux faire la même chose avec Word:
Dans la procédure, tu n'as qu'à modifier le nom des menus des lignes inhibées de la
procédure par les noms des menus de la version Word 2003.
Le principe est similaire pour PowerPoint...etc!
VB:
Sub Recréer_Ancien_Menu()
Dim MichD As CommandBar
On Error Resume Next
'Supprime la barre "MichD" si elle existe
Application.CommandBars("MichD").Delete
'Créer une barre de menu personnalisée
Set MichD = Application.CommandBars.Add("MichD", , True)
x = CommandBars(1).Name
'copie les menus dans la nouvelle barre des menus
With CommandBars("Menu bar")
.Controls("&Fichier").Copy MichD
.Controls("&Edition").Copy MichD
.Controls("&Affichage").Copy MichD
.Controls("&Insertion").Copy MichD
'.Controls("F&ormat").Copy MichD
.Controls("&Outils").Copy MichD
'.Controls("&Données").Copy MichD
.Controls("&Fenêtre").Copy MichD
.Controls("&?").Copy MichD
End With
'Rendre visible la nouvelle barre des menus
'Elle sera disponible sous l'onglet "Complément" de
'la barre des menus dans les versions Excel 2007 et 2010
Application.CommandBars("MichD").Visible = True
End Sub
Cela peut certainement aider ceux qui ont des classeurs volumineux.
N.B. Un petit détail, dans ton formulaire à l'ouverture, les 2 combobox devraient afficher 1 ou
le nombre de feuilles visibles car il est impossible d'avoir 0 feuille affichée dans un classeur,
il en faut au moins une.
;-)
| à choisir le nombre d'onglets visibles à droite et à gauche de la feuille active
Ok, j'ai regardé très rapidement.
Une petite dernière pour ceux qui voudraient créer la barre des menus d'Excel 2003
selon la langue de l'application, français, anglais...
VB:
Sub Creer_Menu_Excel_2003()
On Error Resume Next
'Supprime la barre "MichD" si elle existe
Application.CommandBars("MichD").Delete
'Créer une barre de menu personnalisée
Set MichD = Application.CommandBars.Add("MichD", , True)
'copie les menus dans la nouvelle barre des menus
With Application.CommandBars("Built-in Menus")
.FindControl(ID:=30002).Copy MichD
.FindControl(ID:=30003).Copy MichD
.FindControl(ID:=30004).Copy MichD
.FindControl(ID:=30005).Copy MichD
.FindControl(ID:=30006).Copy MichD
.FindControl(ID:=30007).Copy MichD
.FindControl(ID:=30008).Copy MichD
.FindControl(ID:=30009).Copy MichD
.FindControl(ID:=30010).Copy MichD
End With
'Rendre visible la nouvelle barre des menus
'Elle sera disponible sous l'onglet "Complément" de
'la barre des menus dans les versions Excel 2007 et 2010
Application.CommandBars("MichD").Visible = True
End Sub
Oui tu as raison MichD, c'est ce qu'il y a de plus simple et surtout ça ne nécessite ni d'installer un nouvel outil, ni surtout d'apprendre un autre langage de programmation !
Pour tes archives Misange, cette macro recrée la barre de menu Word 2003 dans Word 2010.
On peut utiliser la même pour PowerPoint. On retrouve sur le Net, beaucoup d'add-on payants
pour obtenir ceci.
Il ne reste plus qu'à la copie dans un module standard de l'application sélectionnéé.
En fait, la seule différence entre la procédure pour Excel et celle-ci applicable pour
Word et PowerPoint,
Pour Excel, il faut utiliser cette ligne de code :
With CommandBars("Built-in Menus")
Pour Word et PowerPoint,
With Application.CommandBars("Menu bar")
Le menu est créé selon la langue de l'application
'------------------------------------------------
Sub Creer_Menu_Word_2003() 'Ou PowerPoint 2003
On Error Resume Next
'Supprime la barre "MichD" si elle existe
Application.CommandBars("MichD").Delete
'Créer une barre de menu personnalisée
Set MichD = Application.CommandBars.Add("MichD", , True)
'copie les menus dans la nouvelle barre des menus
With Application.CommandBars("Menu bar")
.FindControl(ID:=30002).Copy MichD
.FindControl(ID:=30003).Copy MichD
.FindControl(ID:=30004).Copy MichD
.FindControl(ID:=30005).Copy MichD
.FindControl(ID:=30006).Copy MichD
.FindControl(ID:=30007).Copy MichD
.FindControl(ID:=30008).Copy MichD
.FindControl(ID:=30009).Copy MichD
.FindControl(ID:=30010).Copy MichD
End With
'Rendre visible la nouvelle barre des menus
'Elle sera disponible sous l'onglet "Complément" de
'la barre des menus dans les versions Word ou Powerpoint 2007 et 2010
Application.CommandBars("MichD").Visible = True
End Sub
'------------------------------------------------
petit rectificatif, MichD, il semblerait qu'il y a erreur sur l'index 30008 !? ce serait 30011 !
très certainement une erreur d'inattention, à la vitesse ou tu réponds ça ne m'étonne pas !
en tous les cas encore un grand merçi à toi !
With Application.CommandBars("Built-in Menus")
.FindControl(ID:=30002).Copy MichD
.FindControl(ID:=30003).Copy MichD
.FindControl(ID:=30004).Copy MichD
.FindControl(ID:=30005).Copy MichD
.FindControl(ID:=30006).Copy MichD
.FindControl(ID:=30007).Copy MichD
.FindControl(ID:=30008).Copy MichD ' <<<<<<<< ici c'est 30011 !?
.FindControl(ID:=30009).Copy MichD
.FindControl(ID:=30010).Copy MichD
End With