menu vba

  • Initiateur de la discussion jack desbois
  • Date de début
J

jack desbois

Guest
bonjour, j'ai un probleme avec les menu, je personnalise ma barre de menu excel en ajoutant un nouveau menu puis à l'interieur de ce nouveau menu je mets des menus prédéfinis auxquelles j'affecte des macros qui vont me permettre d'inscrire un nom dans la cellule selectionner lorsque je clique sur cet élément du menu.
Mon probleme est que ce menu que j'ai crée ne s'ouvre pas lorsque j'ouvre excel, je suis obligé de recréer le menu et de réaffecter les différentes macros. comment faire pour que le menu s'ouvre des que j'ouvre excel. Merci pour votre aide.
 

Jam

XLDnaute Accro
Salut Jack,

Crée un fichier xl que tu nommera PERSO.XLS.
Mets y ton code VBA.
Enregistre ensuite ce fichier dans
C:'\\Documents and Settings'\\UTILISATEUR'\\Application Data'\\Microsoft'\\Excel'\\XLSTART

EN relançant XL, et si le code VBA est lancé via Workbook_Open() tes menus devraient apparaître sans problème.

Autre solution,
Créer une macro complémentaire.

Bon courage
 
J

jack desbois

Guest
salut MrExcel

merci de ta réponse si rapide.
En fait, je crois que ta solution ne va pas me convenir, car cette modification à faire dans C:'Documents and Settings'UTILISATEUR'Application Data'Microsoft'Excel'XLSTART est à faire dans chaque ordinateur qui utilise le fichier non???

En fait, mon fichier excel, a pour vocation de voyager un peu partout... Je voudrais donc que mon fichier emporte avec lui la solution.....


Merci d'avance
 

galopin01

XLDnaute Occasionnel
bonjour,
peux-tu préciser un peu la manière dont tu
personnalise ma barre de menu excel en ajoutant un nouveau menu
VBA ? Clic Droit + Personnaliser ?

PS : Ca fait quelques années que je ne me suis plus entraîné à ce genre de gymnastique, mais si mes souvenirs sont bon il n'est pas possible de modifier les MENUS prédéfinis par Ajout ? Il faut que je révise ? Tout change si vite...
A+

Message édité par: galopin01, à: 10/03/2005 16:57
 
J

jack desbois

Guest
Salut a tous

Voila comment j'ai fait mon menu.
En fait pour le creer, je lance la macro AddMenu.
Je souhaitrais donc que cette macro se lance avec l'ouverture du menu, puis se supprime avec sa fermeture si possible. (dans tous les cas, il ne faut pas que 2 menus soient crées puis 3...)



Sub AddMenu()

Dim oMainMenuBar As Object
Dim oNewMenu As Object
Dim oSousMenu As Object
Dim oSousMenu1 As Object
Dim oSousMenu2 As Object
Dim oSousMenu3 As Object
Dim oSousMenu4 As Object
Dim oSousMenu5 As Object
Dim oSousMenu6 As Object
Dim oSousMenu7 As Object



CustomizationContext = 'PERSO.XLA' 'Application.NormalTemplate

Set oMainMenuBar = CommandBars.Item('Worksheet Menu Bar')
Set oNewMenu = oMainMenuBar.Controls.Add(Type:=msoControlPopup)
Set oSousMenu = oNewMenu.Controls.Add(Type:=msoBarTypeMenuBar)
Set oSousMenu1 = oNewMenu.Controls.Add(Type:=msoBarTypeMenuBar)
Set oSousMenu2 = oNewMenu.Controls.Add(Type:=msoBarTypeMenuBar)
Set oSousMenu3 = oNewMenu.Controls.Add(Type:=msoBarTypeMenuBar)
Set oSousMenu4 = oNewMenu.Controls.Add(Type:=msoBarTypeMenuBar)
Set oSousMenu5 = oNewMenu.Controls.Add(Type:=msoBarTypeMenuBar)
Set oSousMenu6 = oNewMenu.Controls.Add(Type:=msoBarTypeMenuBar)
Set oSousMenu7 = oNewMenu.Controls.Add(Type:=msoBarTypeMenuBar)


oNewMenu.Caption = 'macros'
oSousMenu.Caption = Cells(1, 1)
oSousMenu1.Caption = Cells(2, 1)
oSousMenu2.Caption = Cells(3, 1)
oSousMenu3.Caption = Cells(4, 1)
oSousMenu4.Caption = Cells(5, 1)
oSousMenu5.Caption = Cells(6, 1)
oSousMenu6.Caption = Cells(7, 1)
oSousMenu7.Caption = Cells(8, 1)


oSousMenu.OnAction = 'asso1_menu()'
oSousMenu1.OnAction = 'asso2_menu()'
oSousMenu2.OnAction = 'asso3_menu()'
oSousMenu3.OnAction = 'asso4_menu()'
oSousMenu4.OnAction = 'asso5_menu()'
oSousMenu5.OnAction = 'asso6_menu()'
oSousMenu6.OnAction = 'asso7_menu()'
oSousMenu7.OnAction = 'asso8_menu()'

End Sub


Je vous remercie..
 

galopin01

XLDnaute Occasionnel
Re :
Je pense que tu peux supprimer la ligne
CustomizationContext = 'PERSO.XLA' 'Application.NormalTemplate
ensuite tu mets ça dans ton ThisWorkBook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars('Worksheet Menu Bar').Controls('macros').Delete
End Sub

Private Sub Workbook_Open()
AddMenu
End Sub
Ok ?
 

galopin01

XLDnaute Occasionnel
Re :
Sauf que je viens de comprendre que supprimer la référence à la XLA t'oblige à déclarer tes éléments de menus dans ta macros
oSousMenu.Caption = 'Macro1'

et les procédures ('asso1_menu()'...) qui vont avec dans CE classeur, mais celà ne me semble pas compliquer à gérer.
Ensuite la portabilité est totale.
A+
 
J

jack desbois

Guest
re galopin01

j'ai testé en enlevant la ligne
CustomizationContext = 'PERSO.XLA' 'Application.NormalTemplate
et en rajoutant
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars('Worksheet Menu Bar').Controls('macros').Delete
End Sub

Private Sub Workbook_Open()
AddMenu
End Sub

et c'est tout..
Apparement ca marche!! pas besion de modifier mes procédures mis à part les
oSousMenu.OnAction = 'asso1_menu()'
qui deviennent
oSousMenu.OnAction = 'asso1_menu'

le menu s'ouvre et se ferme avec le menu, c parfait.

un grand merci a toi donc et a tous sur ce forum....
je vous tiens au courant apres test à la fac demain....
 
J

jack desbois

Guest
re bonjour

D'abord merci a tous, mon menu fonctionne comme espéré....
mais je suis très gourmand...
Comme vous l'avez sans doute compris, mon menu prend se sert d'une liste de noms dans une colonne de ma feuiie 1.(oSousMenu.Caption = Cells(1, 1))
Dans le code que j'ai posté le menu est donc composé de 8 sous elements correspondant à mes 8 lignes de la colonne A.
j'ai eu la désagréable mais prévisible surprise de découvrie que si je supprime une ligne de ma colonne A, un element du menu devient blanc au lieu de disparaitre....
En gros, si je fait mon menu avec 8 ligne et que je supprime la derniere en cours de route, le dernier element du fichier devient blanc, mais la macro associée est toujours fonctionnelle...

Est il possible de modifier le code pour que le nombre d'élément réelement créeé par le menu corresponde au nombre de ligne de ma colonne A ?


Je Joint le fichier pour plus de précisions.. merci d'avance
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Jack, Roger, le Fil, le Forum

Huum Huum pas très catholique cette histoire, en fait je n'ai pas tout suivi non plus, et sans Fichier joint (qui, je le rappelle, doit être nommé sans caractères spéciaux, ni espace, et zippé avec moins de 50ko, en s'assurant que l'extension '.zip' est en minuscule)

Je propose une analyse de tes données comme ceci :
Code:
Sub HuumHuum()
Dim TabMenu() As String
Dim i As Byte, x As Byte

    For i = 1 To 8
        If Cells(i, 1) <> '' Then
            ReDim Preserve TabMenu(x)
            TabMenu(x) = Cells(i, 1)
            x = x + 1
        End If
    Next

    Select Case x
        Case 8
            MsgBox 'Ton code pour 8 items'
        Case 7
            MsgBox 'Ton code pour 7 items'
        Case Else
            MsgBox 'Woooarf'
    End Select

End Sub

Je conseillerai d'identifier la feuille aussi ... avec un With Sheets('LaFeuilleContenantLesNomsDeMenu').... avant le Loop et un End With à la fin

Bon Week End
@+Thierry
 
J

jack desbois

Guest
excusez moi pour le probleme de fichier joint.
le voila normalement [file name=menu.zip size=12701]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/menu.zip[/file]
 

Pièces jointes

  • menu.zip
    20.5 KB · Affichages: 24
  • menu.zip
    20.5 KB · Affichages: 20
  • menu.zip
    20.5 KB · Affichages: 24

galopin01

XLDnaute Occasionnel
Bonjour,
Toujours un peu à vue de nez...
Si tu tes éléments du sous-menus sont variables il te faut une clause si qui examinent la valeurs des cells...
si cells <> ''
oSousMenu.OnAction = 'mamacro'
sinon
oSousMenu.OnAction = ''

Sinon en principe on pilote ces menus avec des Arrays ( d'ailleurs ton code y gagnerai en clarté ) et...
dans les 2 cas :

rafraichir ton menu par un appel de
Private Sub Worksheet_Change(ByVal Target As Range)
à chaque changement dans la zone...

Comme je suis devenu un peu fainéant je laisse réfléchir un peu Thierry pendant que je consulte mes vieux prog.

A+
 

galopin01

XLDnaute Occasionnel
Avant d'attaquer les recherches... sur un plan purement conceptuel, il me semble qu'il y a une possibilité de griser un élément qu'on veut désactiver...
Cette option ne serait pas meilleure ?
A+

Message édité par: galopin01, à: 12/03/2005 15:17
 
J

jack debois

Guest
re

en effet mes éléments de menu vont etres variables et semble til assez nombreux. (+ de 30).

Il serait peur etre bon d'organiser tt ca en array comme tu le suggere. Malheureusement si je connais les arrays de nom, je sias pas m'en servir...
Votre aide serait donc la bienvenue.


Griser un elemnt du menu qui n'et pas utilisé peut etre une solution, moins satisfaisante que de ne pas faire apparaitre cet élément, mais ca paux passer... En core une fois, merci de votre aide

D'avance merci
 

Discussions similaires

Réponses
12
Affichages
404
Réponses
1
Affichages
349

Statistiques des forums

Discussions
312 508
Messages
2 089 143
Membres
104 047
dernier inscrit
bravetta