OVH Cloud OVH Cloud

Appel macro avec argument à partir d'un menu popup

9 réponses
Avatar
axee
Bonjour à tous,
Bonne Année pour commencer :)

J'essaye veinement de réaliser qqchose qui me semblait facile au
début...je crée un petit menu (sommaire) qui reprends tous les onglets
existants dans le classeur actif, lorsque l'on clique sur le nom d'une
feuille de calcul ds le menu, cela lance une macro qui sélectionne la
feuille en question...du moins c'est censé le faire, mais je rencontre
un soucis.

Voici la partie de mon code qui pose pb :

Sub auto_open()

Dim fll As Worksheet
Dim mMain As CommandBarPopup, mSub As CommandBarPopup

Call DeleteSommaireMenu

Set mMain = Application.CommandBars(1).Controls.Add(msoControlPopup,
1, , , True)
With mMain
.Caption = "&Sommaire"
.Tag = "SommaireMenu"
End With

For Each fll In Worksheets
With mMain.Controls.Add(Type:=msoControlButton,
Temporary:=True)
.Caption = fll.Name
.OnAction = "gotosheet(" & fll.Name & ")"
.
End With
Next

Set mSub = Nothing
Set mMain = Nothing
End Sub

la procedure gotosheet contient seulement un sheets.select(argument)

Le pb est simple, le OnAction m'empêche de faire un passage de
paramètre ( j'ai essayé avec double cote, simple cote, sans rien, soit
il me faire une erreur à l'appel, soit il reste inerte...bref, si qqun
entrevoit une petite astuce pour contourner cet obstacle :)

Merci d'avance pour vos conseils ^^

9 réponses

Avatar
Pascal Engelmajer
Salut,
voir l'exemple
http://www.ilyapa.net/excel/commandBarFeuilles.zip
génère automatiquement un barre de menu
à adapter
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"aXee" a écrit dans le message de news:

Bonjour à tous,
Bonne Année pour commencer :)

J'essaye veinement de réaliser qqchose qui me semblait facile au
début...je crée un petit menu (sommaire) qui reprends tous les onglets
existants dans le classeur actif, lorsque l'on clique sur le nom d'une
feuille de calcul ds le menu, cela lance une macro qui sélectionne la
feuille en question...du moins c'est censé le faire, mais je rencontre
un soucis.

Voici la partie de mon code qui pose pb :

Sub auto_open()

Dim fll As Worksheet
Dim mMain As CommandBarPopup, mSub As CommandBarPopup

Call DeleteSommaireMenu

Set mMain = Application.CommandBars(1).Controls.Add(msoControlPopup,
1, , , True)
With mMain
.Caption = "&Sommaire"
.Tag = "SommaireMenu"
End With

For Each fll In Worksheets
With mMain.Controls.Add(Type:=msoControlButton,
Temporary:=True)
.Caption = fll.Name
.OnAction = "gotosheet(" & fll.Name & ")"
.
End With
Next

Set mSub = Nothing
Set mMain = Nothing
End Sub

la procedure gotosheet contient seulement un sheets.select(argument)

Le pb est simple, le OnAction m'empêche de faire un passage de
paramètre ( j'ai essayé avec double cote, simple cote, sans rien, soit
il me faire une erreur à l'appel, soit il reste inerte...bref, si qqun
entrevoit une petite astuce pour contourner cet obstacle :)

Merci d'avance pour vos conseils ^^


Avatar
Pascal Engelmajer
Salut,
Suite...
je ne crois pas que la procédure appellés par OnAction accepte de paramètre.
Quelqu'un pourrait peut-être préciser ce point.
J'ai donc créé un module standard ou j'écris une procédure pour appeler
chaque feuille.
Il est simple d'adapter mon exemple pour "msoControlPopup"
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Pascal Engelmajer" a écrit dans le
message de news:
Salut,
voir l'exemple
http://www.ilyapa.net/excel/commandBarFeuilles.zip
génère automatiquement un barre de menu
à adapter
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"aXee" a écrit dans le message de news:

Bonjour à tous,
Bonne Année pour commencer :)

J'essaye veinement de réaliser qqchose qui me semblait facile au
début...je crée un petit menu (sommaire) qui reprends tous les onglets
existants dans le classeur actif, lorsque l'on clique sur le nom d'une
feuille de calcul ds le menu, cela lance une macro qui sélectionne la
feuille en question...du moins c'est censé le faire, mais je rencontre
un soucis.

Voici la partie de mon code qui pose pb :

Sub auto_open()

Dim fll As Worksheet
Dim mMain As CommandBarPopup, mSub As CommandBarPopup

Call DeleteSommaireMenu

Set mMain = Application.CommandBars(1).Controls.Add(msoControlPopup,
1, , , True)
With mMain
.Caption = "&Sommaire"
.Tag = "SommaireMenu"
End With

For Each fll In Worksheets
With mMain.Controls.Add(Type:=msoControlButton,
Temporary:=True)
.Caption = fll.Name
.OnAction = "gotosheet(" & fll.Name & ")"
.
End With
Next

Set mSub = Nothing
Set mMain = Nothing
End Sub

la procedure gotosheet contient seulement un sheets.select(argument)

Le pb est simple, le OnAction m'empêche de faire un passage de
paramètre ( j'ai essayé avec double cote, simple cote, sans rien, soit
il me faire une erreur à l'appel, soit il reste inerte...bref, si qqun
entrevoit une petite astuce pour contourner cet obstacle :)

Merci d'avance pour vos conseils ^^






Avatar
Mick79
Bonjour Pascal

Désolé, sous WinXP et Excel2002 , cette procédure engendre une erreur à la
ligne

Set monModule = Wb.VBProject.VBComponents(nomModule).codeModule

Tout juste téléchargé du site
Qu'est-ce que je ne fais pas ?

--
Salut
Michel ---- ;o)

Pascal Engelmajer wrote:
Salut,
voir l'exemple
http://www.ilyapa.net/excel/commandBarFeuilles.zip
génère automatiquement un barre de menu
à adapter
Bonjour à tous,
Bonne Année pour commencer :)

J'essaye veinement de réaliser qqchose qui me semblait facile au
début...je crée un petit menu (sommaire) qui reprends tous les
onglets existants dans le classeur actif, lorsque l'on clique sur le
nom d'une feuille de calcul ds le menu, cela lance une macro qui
sélectionne la feuille en question...du moins c'est censé le faire,
mais je rencontre un soucis.

Voici la partie de mon code qui pose pb :

Sub auto_open()

Dim fll As Worksheet
Dim mMain As CommandBarPopup, mSub As CommandBarPopup

Call DeleteSommaireMenu

Set mMain >> Application.CommandBars(1).Controls.Add(msoControlPopup, 1, , , True)
With mMain
.Caption = "&Sommaire"
.Tag = "SommaireMenu"
End With

For Each fll In Worksheets
With mMain.Controls.Add(Type:=msoControlButton,
Temporary:=True)
.Caption = fll.Name
.OnAction = "gotosheet(" & fll.Name & ")"
.
End With
Next

Set mSub = Nothing
Set mMain = Nothing
End Sub

la procedure gotosheet contient seulement un sheets.select(argument)

Le pb est simple, le OnAction m'empêche de faire un passage de
paramètre ( j'ai essayé avec double cote, simple cote, sans rien,
soit il me faire une erreur à l'appel, soit il reste inerte...bref,
si qqun entrevoit une petite astuce pour contourner cet obstacle :)

Merci d'avance pour vos conseils ^^




Avatar
Michel Pierron
Salut aXee
Essaie avec:
"'NomDeLaMacro""" & "Arg""'"
(Guillemet / apostrophe / Nom de la macro à exécuter / 3 guillemets et
l'argument en cadré par des guillemets suivi d'une apostrophe encadrée par
des guillemets).
MP

"aXee" a écrit dans le message de
news:
Bonjour à tous,
Bonne Année pour commencer :)

J'essaye veinement de réaliser qqchose qui me semblait facile au
début...je crée un petit menu (sommaire) qui reprends tous les onglets
existants dans le classeur actif, lorsque l'on clique sur le nom d'une
feuille de calcul ds le menu, cela lance une macro qui sélectionne la
feuille en question...du moins c'est censé le faire, mais je rencontre
un soucis.

Voici la partie de mon code qui pose pb :

Sub auto_open()

Dim fll As Worksheet
Dim mMain As CommandBarPopup, mSub As CommandBarPopup

Call DeleteSommaireMenu

Set mMain = Application.CommandBars(1).Controls.Add(msoControlPopup,
1, , , True)
With mMain
.Caption = "&Sommaire"
.Tag = "SommaireMenu"
End With

For Each fll In Worksheets
With mMain.Controls.Add(Type:=msoControlButton,
Temporary:=True)
.Caption = fll.Name
.OnAction = "gotosheet(" & fll.Name & ")"
.
End With
Next

Set mSub = Nothing
Set mMain = Nothing
End Sub

la procedure gotosheet contient seulement un sheets.select(argument)

Le pb est simple, le OnAction m'empêche de faire un passage de
paramètre ( j'ai essayé avec double cote, simple cote, sans rien, soit
il me faire une erreur à l'appel, soit il reste inerte...bref, si qqun
entrevoit une petite astuce pour contourner cet obstacle :)

Merci d'avance pour vos conseils ^^


Avatar
Pascal Engelmajer
Salut,
je pense aussi qu'il s'agit d'un pb de référence...
'nécessite les références aux librairies suivantes
'Visual Basic For Application
'Microsoft Excel 8.0 Object Library
'Microsoft Forms 2.0 Object Library
'Basic For Application Extensibility 5.3
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Mick79" a écrit dans le message de news:
O#Nq$
Bonjour Pascal

Désolé, sous WinXP et Excel2002 , cette procédure engendre une erreur à la
ligne

Set monModule = Wb.VBProject.VBComponents(nomModule).codeModule

Tout juste téléchargé du site
Qu'est-ce que je ne fais pas ?

--
Salut
Michel ---- ;o)

Pascal Engelmajer wrote:
Salut,
voir l'exemple
http://www.ilyapa.net/excel/commandBarFeuilles.zip
génère automatiquement un barre de menu
à adapter
Bonjour à tous,
Bonne Année pour commencer :)

J'essaye veinement de réaliser qqchose qui me semblait facile au
début...je crée un petit menu (sommaire) qui reprends tous les
onglets existants dans le classeur actif, lorsque l'on clique sur le
nom d'une feuille de calcul ds le menu, cela lance une macro qui
sélectionne la feuille en question...du moins c'est censé le faire,
mais je rencontre un soucis.

Voici la partie de mon code qui pose pb :

Sub auto_open()

Dim fll As Worksheet
Dim mMain As CommandBarPopup, mSub As CommandBarPopup

Call DeleteSommaireMenu

Set mMain > >> Application.CommandBars(1).Controls.Add(msoControlPopup, 1, , , True)
With mMain
.Caption = "&Sommaire"
.Tag = "SommaireMenu"
End With

For Each fll In Worksheets
With mMain.Controls.Add(Type:=msoControlButton,
Temporary:=True)
.Caption = fll.Name
.OnAction = "gotosheet(" & fll.Name & ")"
.
End With
Next

Set mSub = Nothing
Set mMain = Nothing
End Sub

la procedure gotosheet contient seulement un sheets.select(argument)

Le pb est simple, le OnAction m'empêche de faire un passage de
paramètre ( j'ai essayé avec double cote, simple cote, sans rien,
soit il me faire une erreur à l'appel, soit il reste inerte...bref,
si qqun entrevoit une petite astuce pour contourner cet obstacle :)

Merci d'avance pour vos conseils ^^








Avatar
Michel Gaboly
Bonjour,

Il faut probablement que tu coches la référence "Microsoft Visual Basic
for Applications Extensibility".

Pour ce faire, environnement VBA, menu "Outils", "Références".



Bonjour Pascal

Désolé, sous WinXP et Excel2002 , cette procédure engendre une erreur à la
ligne

Set monModule = Wb.VBProject.VBComponents(nomModule).codeModule

Tout juste téléchargé du site
Qu'est-ce que je ne fais pas ?

--
Salut
Michel ---- ;o)

Pascal Engelmajer wrote:
Salut,
voir l'exemple
http://www.ilyapa.net/excel/commandBarFeuilles.zip
génère automatiquement un barre de menu
à adapter
Bonjour à tous,
Bonne Année pour commencer :)

J'essaye veinement de réaliser qqchose qui me semblait facile au
début...je crée un petit menu (sommaire) qui reprends tous les
onglets existants dans le classeur actif, lorsque l'on clique sur le
nom d'une feuille de calcul ds le menu, cela lance une macro qui
sélectionne la feuille en question...du moins c'est censé le faire,
mais je rencontre un soucis.

Voici la partie de mon code qui pose pb :

Sub auto_open()

Dim fll As Worksheet
Dim mMain As CommandBarPopup, mSub As CommandBarPopup

Call DeleteSommaireMenu

Set mMain > >> Application.CommandBars(1).Controls.Add(msoControlPopup, 1, , , True)
With mMain
.Caption = "&Sommaire"
.Tag = "SommaireMenu"
End With

For Each fll In Worksheets
With mMain.Controls.Add(Type:=msoControlButton,
Temporary:=True)
.Caption = fll.Name
.OnAction = "gotosheet(" & fll.Name & ")"
.
End With
Next

Set mSub = Nothing
Set mMain = Nothing
End Sub

la procedure gotosheet contient seulement un sheets.select(argument)

Le pb est simple, le OnAction m'empêche de faire un passage de
paramètre ( j'ai essayé avec double cote, simple cote, sans rien,
soit il me faire une erreur à l'appel, soit il reste inerte...bref,
si qqun entrevoit une petite astuce pour contourner cet obstacle :)

Merci d'avance pour vos conseils ^^




--
Cordialement,

Michel Gaboly
http://www.gaboly.com



Avatar
Michel Pierron
.OnAction = "'gotosheet""" & "fll.Name" & "'" devrait suffir.
MP

"Michel Pierron" a écrit dans le message de
news:
Salut aXee
Essaie avec:
"'NomDeLaMacro""" & "Arg""'"
(Guillemet / apostrophe / Nom de la macro à exécuter / 3 guillemets et
l'argument en cadré par des guillemets suivi d'une apostrophe encadrée par
des guillemets).
MP

"aXee" a écrit dans le message de
news:
Bonjour à tous,
Bonne Année pour commencer :)

J'essaye veinement de réaliser qqchose qui me semblait facile au
début...je crée un petit menu (sommaire) qui reprends tous les onglets
existants dans le classeur actif, lorsque l'on clique sur le nom d'une
feuille de calcul ds le menu, cela lance une macro qui sélectionne la
feuille en question...du moins c'est censé le faire, mais je rencontre
un soucis.

Voici la partie de mon code qui pose pb :

Sub auto_open()

Dim fll As Worksheet
Dim mMain As CommandBarPopup, mSub As CommandBarPopup

Call DeleteSommaireMenu

Set mMain = Application.CommandBars(1).Controls.Add(msoControlPopup,
1, , , True)
With mMain
.Caption = "&Sommaire"
.Tag = "SommaireMenu"
End With

For Each fll In Worksheets
With mMain.Controls.Add(Type:=msoControlButton,
Temporary:=True)
.Caption = fll.Name
.OnAction = "gotosheet(" & fll.Name & ")"
.
End With
Next

Set mSub = Nothing
Set mMain = Nothing
End Sub

la procedure gotosheet contient seulement un sheets.select(argument)

Le pb est simple, le OnAction m'empêche de faire un passage de
paramètre ( j'ai essayé avec double cote, simple cote, sans rien, soit
il me faire une erreur à l'appel, soit il reste inerte...bref, si qqun
entrevoit une petite astuce pour contourner cet obstacle :)

Merci d'avance pour vos conseils ^^






Avatar
Pascal Engelmajer
Salut Michel,
Merci d'avoir répondu à la question (indirectement)
il faut utiliser les simples cotes (')
on peut donc se passer de la macro et utiliser une ligne de code!
.OnAction = "'sheets(""" & fll.Name & """).select:msgbox""ok""'"
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Michel Pierron" a écrit dans le message de news:

.OnAction = "'gotosheet""" & "fll.Name" & "'" devrait suffir.
MP

"Michel Pierron" a écrit dans le message de
news:
Salut aXee
Essaie avec:
"'NomDeLaMacro""" & "Arg""'"
(Guillemet / apostrophe / Nom de la macro à exécuter / 3 guillemets et
l'argument en cadré par des guillemets suivi d'une apostrophe encadrée
par


des guillemets).
MP

"aXee" a écrit dans le message de
news:
Bonjour à tous,
Bonne Année pour commencer :)

J'essaye veinement de réaliser qqchose qui me semblait facile au
début...je crée un petit menu (sommaire) qui reprends tous les onglets
existants dans le classeur actif, lorsque l'on clique sur le nom d'une
feuille de calcul ds le menu, cela lance une macro qui sélectionne la
feuille en question...du moins c'est censé le faire, mais je rencontre
un soucis.

Voici la partie de mon code qui pose pb :

Sub auto_open()

Dim fll As Worksheet
Dim mMain As CommandBarPopup, mSub As CommandBarPopup

Call DeleteSommaireMenu

Set mMain Application.CommandBars(1).Controls.Add(msoControlPopup,
1, , , True)
With mMain
.Caption = "&Sommaire"
.Tag = "SommaireMenu"
End With

For Each fll In Worksheets
With mMain.Controls.Add(Type:=msoControlButton,
Temporary:=True)
.Caption = fll.Name
.OnAction = "gotosheet(" & fll.Name & ")"
.
End With
Next

Set mSub = Nothing
Set mMain = Nothing
End Sub

la procedure gotosheet contient seulement un sheets.select(argument)

Le pb est simple, le OnAction m'empêche de faire un passage de
paramètre ( j'ai essayé avec double cote, simple cote, sans rien, soit
il me faire une erreur à l'appel, soit il reste inerte...bref, si qqun
entrevoit une petite astuce pour contourner cet obstacle :)

Merci d'avance pour vos conseils ^^










Avatar
axee
"Michel Pierron" wrote in message news:...
Salut aXee
Essaie avec:
"'NomDeLaMacro""" & "Arg""'"
(Guillemet / apostrophe / Nom de la macro à exécuter / 3 guillemets et
l'argument en cadré par des guillemets suivi d'une apostrophe encadrée par
des guillemets).
MP



Voici la ligne de code après une petite modif ( et qui fonctionne
parfaitement sour excel 2000 ) :

.OnAction = "'gotosheet""" & fll.Name & "'"

Je remercie donc tous ceux qui ont eu la gentillesse de me répondre
...