Création d'un menu personnalisé [Résolu]

dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention - 12 juil. 2016 à 12:39 - Dernière réponse : dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention
- 25 août 2016 à 00:22
Bonjour,
j'aimerai créer une macro dans thisworkbook qui me permettrait de créer à chaque ouverture du classeur
un menu personnalisé. la macro réinitialisera à chaque fois le toolbar et créera des boutons qui me permettront de manipuler mes macros. En fait j'aimerai que tout utilisateur à qui jenvoierai mon classeur puisse avoir accès au menu personnalisé sans problème. Est ce possible avc excel vba?????? de l'aide svp!!!!
Afficher la suite 

25 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 12 juil. 2016 à 12:48
0
Utile
Bonjour,
de l'aide sur ta question ? Une réponse à apporter ? ===>>
Oui, cela l'est (possible).
Sur quelle partie (isolée, et spécifique) de ton code rencontres-tu ta difficulté ?
(relis s'il te plait à ce propos les règles de ce forum).

Commenter la réponse de ucfoutu
dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention - 13 juil. 2016 à 16:56
0
Utile
je n'ai pas encore commencé à coder cette partie là... je voulais juste savoir si cest possible et voudrais également une documentation sur la création de menus personnalisés par macro
Commenter la réponse de dyjatou92
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 14 juil. 2016 à 15:23
0
Utile
1
Bonjour,

Qu'est-ce que tu entends par menu personnalisé ?
Et quelle version utilises-tu ?

Il y a différentes méthodes d'approche selon les besoins.
Ça pourrait être un combobox qui contient les différentes macros que tu utilises.
Ou un Userform ouvert en vbModeless qui contiendrait des contrôles déclencheurs.
Ou un menu intégré à ceux d'Excel (selon la version)
Ou un menu sur click droit d'une cellule
dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention - 14 juil. 2016 à 16:02
Avez vous une documentation ou plusieurs qui traitent de ces méthodes? Merci
Commenter la réponse de cs_MPi
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 14 juil. 2016 à 18:45
0
Utile
1
Bonjour,
Ce que tu demandes relève avant tout de la conception.
Il n'y a pas, en ce domaine, UNE ou QUELQUES méthode(s) ! Il y en a une véritable floppée (autant qu'il y a d'idées de conception).
Commence par arrêter la tienne, d'idée.
La conception n'est pas la vocation de ce forum, dédié, lui, à la recherche de solution à une difficulté technique, spécifique, parfaitement isolée et accompagnée du code tenté pour la résoudre.
Par ailleurs : si ce que tu cherches à faire est ajouter dans la barre d'outil de Excel un menu personnalisé, ce que tu auras à faire dépendra avant tout de ta version Excel
A lire :
http://ericrenaud.fr/Ribbon.htm
Cette lecture t'apprendra que depuis la version 2007, c'est en XML (et non VBA), que se gère et s'écrit la barre de menus de Excel.
dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention - 15 juil. 2016 à 17:34
MERCI....
Commenter la réponse de ucfoutu
0
Utile
Après apprentissage j'ai essayé le code suivant mais j'ai l'erreur d'exécution suivant: erreur d'exécution '91' variable objet ou variable de bloc With non définie
ThisWorkbook.Protect "feuzzz"
Dim Cbar As CommandBar
Dim Donngener As CommandBarButton
Dim Nouv As CommandBarButton
Dim Supp As CommandBarButton
Dim Donn As CommandBarButton
Dim Actu As CommandBarButton
Dim Corr As CommandBarButton
Dim w As Worksheet
For Each w In ActiveWorkbook.Sheets
w.Protect Password:="feuzzz", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True
Next
Set Cbar = CommandBars.Add(Name, [Position], [MenuBar], [Temporary])
Cbar.Visible = True
Cbar.Name = "PROGIWATERCOLD"
Cbar.Position = msoBarBottom
Set Nouv = Cbar.Controls.Add(msoControlButton)
With Nouv
.Style = msoButtonIconAndCaptionBelow
.FaceId = 137
.Caption = "Nouveau local"
.OnAction = "Copy_Feuille"
.TooltipText = "Permet d'ajouter un nouveau local"
.BeginGroup = True
.Priority = 2
End With
Set Supp = Cbar.Controls.Add(msoControlButton)
With Supp
.Style = msoButtonIconAndCaptionBelow
.FaceId = 1088
.Caption = "Supprimer le local"
.OnAction = "Suppression_Local"
.TooltipText = "Permet de supprimer le local"
.BeginGroup = True
.Priority = 3
End With
Set Donngener = Cbar.Controls.Add(msoControlButton)
With Donngener
.Style = msoButtonIconAndCaptionBelow
.FaceId = 576
.Caption = "Température et Constructeur"
.OnAction = "Saisir_cond_clim"
.TooltipText = "Permet de donner la température intérieure des locaux et le constructeur pour les différents équipements"
.BeginGroup = True
.Priority = 1
End With
Set Donn = Cbar.Controls.Add(msoControlButton)
With Donn
.Style = msoButtonIconAndCaptionBelow
.FaceId = 588
.Caption = "Données du local"
.OnAction = "Recup_donnees_local"
.TooltipText = "Permet de donner les données du local"
.BeginGroup = True
.Priority = 4
End With
Set Corr = Cbar.Controls.Add(msoControlButton)
With Corr
.Style = msoButtonIconAndCaptionBelow
.FaceId = 960
.Caption = "Recalculer"
.OnAction = "corrigerBT"
.TooltipText = "Permet de recalculer le bilan thermique pour l'ensemble des locaux"
.BeginGroup = True
.Priority = 5
End With
Set Actu = Cbar.Controls.Add(msoControlButton)
With Actu
.Style = msoButtonIconAndCaptionBelow
.FaceId = 1020
.Caption = "Actualiser l'onglet Synthèse"
.OnAction = "Somme_charges"
.TooltipText = "Permet d'actualiser le tableau de synthèse des différents locaux"
.BeginGroup = True
.Priority = 6
End With
Commenter la réponse de dyjatou92
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 20 juil. 2016 à 13:53
0
Utile
1
Prends s'il te plait l'(habitude :
1) de présenter ton code entre balises code
2) de dire sur quelle ligne de code l'erreur est dénoncée
Merci de t'y conformer.
dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention - 20 juil. 2016 à 16:51
ok. l'erreur se trouve à partir de:
Set Cbar = CommandBars.Add(Name, [Position], [MenuBar], [Temporary]) 
Commenter la réponse de ucfoutu
0
Utile
1
bonjour,

Peut'être en instanciant le commandbar

Ce type d'erreur me fait penser à

pas uniquement déclarer les objets
Dim Cbar As CommandBar 
Dim Donngener As CommandBarButton 
Dim Nouv As CommandBarButton 
Dim Supp As CommandBarButton 
Dim Donn As CommandBarButton 
Dim Actu As CommandBarButton 
Dim Corr As CommandBarButton 




mais aussi les instancier

Dim Cbar As new CommandBar 
Dim Donngener As new CommandBarButton 
Dim Nouv As new CommandBarButton 
Dim Supp As new CommandBarButton 
Dim Donn As new CommandBarButton 
Dim Actu As new CommandBarButton 
Dim Corr As new CommandBarButton 




Pas testé.


Bonne journée
dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention - 20 juil. 2016 à 16:52
ok. A quoi servirait le fait de les instancier stp???
Commenter la réponse de cgandco
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 20 juil. 2016 à 16:34
0
Utile
1
Je pense qu'il y a un problème ici...
Set Cbar = CommandBars.Add(Name, [Position], [MenuBar], [Temporary])  

dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention - 20 juil. 2016 à 16:38
oui cest exactement cette ligne là que le debogueur me signale
Commenter la réponse de cs_MPi
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 20 juil. 2016 à 17:51
0
Utile
Bonjour,

La réponse est là:

http://fring.developpez.com/vba/excel/barremenu/#L1.4
Commenter la réponse de cs_Le Pivert
dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention - 22 août 2016 à 12:38
0
Utile
1
bonjour j'ai finalement opté pour la solution de customui editor qui me permet de créer un menu personnalisé à ma guise. Le menu a été bien ajouté à mon fichier Excel mais le seul problème est que les boutons exécutant les macros ne marchent pas. Le message d'erreur suivant survient à chaque fois que je presse sur l'un des boutons: impossible d'exécuter la macro il est possible qu'elle ne soit disponible dans le classeur ou que toutes les macros soient désactivées. Aidez moi svp
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 22 août 2016 à 14:24
Quel est le code XML que tu as écrit ou généré avec Custom UI
Et comment gères-tu ça dans ton code VBA ?
Commenter la réponse de dyjatou92
dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention - 22 août 2016 à 14:26
0
Utile
1
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="PROGIWATERCOLD" label="Menu PROGIWATERCOLD" insertAfterMso="TabHome" visible="true">
<group id="grp0" label="PROGIWATERCOLD Tools">
<button id="btn0" size="large" label="Données générales" screentip="Données générales" supertip=" Permet de renseigner la tempéture intérieure des locaux et le constructeur des équipents de climatisation" imageMso="PlayMacro" onAction="Saisir_cond_clim"/>
<button id="btn1" size="large" label="Nouveau local" screentip="Nouveau local" supertip=" Permet la création d'un nouveau local" imageMso="BlogHomePage" onAction="Copy_Feuille"/>
<button id="btn2" size="large" label="Suppression local" screentip="Suppression local" supertip=" Permet la suppression d'un local" imageMso="CoverPageRemove" onAction="Suppression_Local"/>
<button id="btn3" size="large" label="Données du local" screentip="Données du local" supertip="Permet de renseigner les données intérieures du local" imageMso="RmsSendBizcardDesign" onAction="Recup_donnees_local"/>
<button id="btn4" size="large" label="Bilan thermique" screentip="Bilan thermique" supertip=" Permet d'actualiser le bilan thermique global " imageMso="Calculator" onAction="Resume_Simple"/>
<button id="btn5" size="large" label="Synthèse" screentip="Synthèse" supertip=" Permet d'actualiser la synthèse du bilan thermique et des équipements de climatisation" imageMso="PersonaStatusBusy" onAction="SommeFeuilles"/>
<button id="btn6" size="large" label="Correction" screentip="Synthèse" supertip=" Permet de recalculer le bilan thermique une fois les données générales changées" imageMso="Refresh" onAction="corrigerBT"/>
<button id="btn7" size="large" label="Page de garde" screentip="Page de garde" supertip=" Permet de remplir la page de garde" imageMso="AutoFormatWizard" onAction="Saisie_pagedegarde"/>
<button id="btn8" size="large" label="Pertes de charges" screentip="Calculs de pertes de charges" supertip=" Permet de calculer les pertes de charges pour chaque tronçon enregistrée" imageMso="SetPertWeight" onAction="Calcul_pertes"/>
<button id="btn9" size="large" label="Tronçons principaux" screentip="Tronçons principaux" supertip=" Permet de calculer les diamètres des tronçons principaux du réseau de tuyauterie" imageMso="ModuleInsert" onAction="CalculTroncons"/>
<button id="btn10" size="large" label="Suppression tronçon" screentip="Suppression tronçon" supertip=" Permet de supprimer le tronçon se trouvant sur la ligne sélectionnée" imageMso="ReviewRejectChange" onAction="supp"/>
<button id="btn11" size="large" label="Raffraîchir le tableau" screentip="Raffraîchir le tableau " supertip=" Permet de raffraîchir le tableau des pertes de charges ou de calcul des diamètres de tronçons principaux" imageMso="ViewGridlinesWord" onAction="supp"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

j'ai par la suite copier les callback des boutons sur un module standard.
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 22 août 2016 à 21:56
Et comment écris-tu l'appel à cette macro, disons
Saisir_cond_clim
Est-ce que tu lui mets un paramètre NomVariable As IRibbonControl ?
Commenter la réponse de dyjatou92
dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention - 22 août 2016 à 21:59
0
Utile
5
j'ai fait comme ceci pour toutes les macros
'Callback for btn0 onAction
Sub Saisir_cond_clim(control As IRibbonControl)
End Sub

'Callback for btn1 onAction
Sub Copy_Feuille(control As IRibbonControl)
End Sub

'Callback for btn2 onAction
Sub Suppression_Local(control As IRibbonControl)
End Sub

'Callback for btn3 onAction
Sub Recup_donnees_local(control As IRibbonControl)
End Sub

'Callback for btn4 onAction
Sub Resume_Simple(control As IRibbonControl)
End Sub

'Callback for btn5 onAction
Sub SommeFeuilles(control As IRibbonControl)
End Sub

'Callback for btn6 onAction
Sub corrigerBT(control As IRibbonControl)
End Sub

'Callback for btn7 onAction
Sub Saisie_pagedegarde(control As IRibbonControl)
End Sub

'Callback for btn8 onAction
Sub Calcul_pertes(control As IRibbonControl)
End Sub

'Callback for btn9 onAction
Sub CalculTroncons(control As IRibbonControl)
End Sub

'Callback for btn10 onAction
Sub supp(control As IRibbonControl)
End Sub

'Callback for btn11 onAction
Sub raffraichir(control As IRibbonControl)
End Sub
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 23 août 2016 à 15:11
Ça semble correct, mais as-tu ajouté du code à ces macros ?
dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention > cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 23 août 2016 à 15:49
non pas vraiment. Qu'est ce que je pourrais bien y ajouter comme code????? Je croyais que les callback suffisaient.
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 23 août 2016 à 17:57
Mets-y le code que tu as déjà créé ou seulement le nom de ces macros (plus simple...)
dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention > cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 23 août 2016 à 18:21
je viends d'essayer ta dernière propoition mais lorsque je presse sur les boutons le même message d'erreur survient :(
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 24 août 2016 à 17:38
Commenter la réponse de dyjatou92
dyjatou92 34 Messages postés mercredi 15 juin 2016Date d'inscription 30 septembre 2016 Dernière intervention - 25 août 2016 à 00:22
0
Utile
Bonjour à tous,
j'ai finalement trouvé la solution à mon problème. En fait il fallait juste ajouter au niveau des parenthèses de la déclaration de chaque macro:
control As IRibbonControl

Ce n'était pas la peine de créer un module standard pour y copier les callback de toutes les macros vu qu'elles ont été déjà créées
Merci à toutes les personnes qui ont répondu à mon appel de détresse
Commenter la réponse de dyjatou92

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.