Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Je viens de trouver une info majeure de Denis Michon
Il faut encadrer l'ensemble nomProc+espace+Paramètre par des
guillemets+apostrophes et mettre le paramètre entre guillemets.
Désolé pour le dérangement. Bonsoir.
à+twinley
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Je viens de trouver une info majeure de Denis Michon
Il faut encadrer l'ensemble nomProc+espace+Paramètre par des
guillemets+apostrophes et mettre le paramètre entre guillemets.
Désolé pour le dérangement. Bonsoir.
à+twinley
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Je viens de trouver une info majeure de Denis Michon
Il faut encadrer l'ensemble nomProc+espace+Paramètre par des
guillemets+apostrophes et mettre le paramètre entre guillemets.
Désolé pour le dérangement. Bonsoir.
à+twinley
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Bonsoir,
Je n'ai rien trouvé sur .onaction qui indique de pouvoir passer un
argument.
Pour détourner le problème, tu pourrais simplifier la macro pour
renvoyer ensuite un argument vers une macro complète.
exemple :
bouton1 --> .onaction = "macro1"
bouton2 --> .onaction = "macro2"
bouton3 --> .onaction = "macro3"
sub macro1()
mamacro(1)
end sub
sub macro2()
mamacro(2)
end sub
sub macro3()
mamacro(3)
end sub
sub mamacro(argument)
msgbox argument
end sub
@+
FxM
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Bonsoir,
Je n'ai rien trouvé sur .onaction qui indique de pouvoir passer un
argument.
Pour détourner le problème, tu pourrais simplifier la macro pour
renvoyer ensuite un argument vers une macro complète.
exemple :
bouton1 --> .onaction = "macro1"
bouton2 --> .onaction = "macro2"
bouton3 --> .onaction = "macro3"
sub macro1()
mamacro(1)
end sub
sub macro2()
mamacro(2)
end sub
sub macro3()
mamacro(3)
end sub
sub mamacro(argument)
msgbox argument
end sub
@+
FxM
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Bonsoir,
Je n'ai rien trouvé sur .onaction qui indique de pouvoir passer un
argument.
Pour détourner le problème, tu pourrais simplifier la macro pour
renvoyer ensuite un argument vers une macro complète.
exemple :
bouton1 --> .onaction = "macro1"
bouton2 --> .onaction = "macro2"
bouton3 --> .onaction = "macro3"
sub macro1()
mamacro(1)
end sub
sub macro2()
mamacro(2)
end sub
sub macro3()
mamacro(3)
end sub
sub mamacro(argument)
msgbox argument
end sub
@+
FxM
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
Bonsoir FxM
Pas mal ta solution, je n'avais pas pensé à ça.
Comme tu vas le voir, j'ai trouvé la soluce de Denis.
J'ai cherché pendant deux heures sans succés, je post ma question, je
retourne fouiller et c'est le moment de grâce. Il faut poster pour
trouver dans les archives...
Mais où vont-ils chercher tout ça ?
Merci pour ta réponse.
à+twinley
Bonsoir FxM
Pas mal ta solution, je n'avais pas pensé à ça.
Comme tu vas le voir, j'ai trouvé la soluce de Denis.
J'ai cherché pendant deux heures sans succés, je post ma question, je
retourne fouiller et c'est le moment de grâce. Il faut poster pour
trouver dans les archives...
Mais où vont-ils chercher tout ça ?
Merci pour ta réponse.
à+twinley
Bonsoir FxM
Pas mal ta solution, je n'avais pas pensé à ça.
Comme tu vas le voir, j'ai trouvé la soluce de Denis.
J'ai cherché pendant deux heures sans succés, je post ma question, je
retourne fouiller et c'est le moment de grâce. Il faut poster pour
trouver dans les archives...
Mais où vont-ils chercher tout ça ?
Merci pour ta réponse.
à+twinley
Bonjour.
En poursuivant tes recherches, tu aurais trouvé que cette méthode n'est pas fiable car elle ne fonctionne pas sur certaine config.
Ce que je propose :
Une propriété OnAction commune à chacun des boutons de ta barre d'outils nommée "MaBarre", par Exemple "Action"
Et dans un module :
Sub Action()
MsgBox CommandBars("MaBarre").Controls(Application.Caller(1)).Caption
End Sub
Alain CROS
"twinley" a écrit dans le message de news: #Bonsoir FxM
Pas mal ta solution, je n'avais pas pensé à ça.
Comme tu vas le voir, j'ai trouvé la soluce de Denis.
J'ai cherché pendant deux heures sans succés, je post ma question, je
retourne fouiller et c'est le moment de grâce. Il faut poster pour
trouver dans les archives...
Mais où vont-ils chercher tout ça ?
Merci pour ta réponse.
à+twinley
Bonjour.
En poursuivant tes recherches, tu aurais trouvé que cette méthode n'est pas fiable car elle ne fonctionne pas sur certaine config.
Ce que je propose :
Une propriété OnAction commune à chacun des boutons de ta barre d'outils nommée "MaBarre", par Exemple "Action"
Et dans un module :
Sub Action()
MsgBox CommandBars("MaBarre").Controls(Application.Caller(1)).Caption
End Sub
Alain CROS
"twinley" <twinleymax@hotmail.com> a écrit dans le message de news: #C2RILwBFHA.2624@TK2MSFTNGP11.phx.gbl...
Bonsoir FxM
Pas mal ta solution, je n'avais pas pensé à ça.
Comme tu vas le voir, j'ai trouvé la soluce de Denis.
J'ai cherché pendant deux heures sans succés, je post ma question, je
retourne fouiller et c'est le moment de grâce. Il faut poster pour
trouver dans les archives...
Mais où vont-ils chercher tout ça ?
Merci pour ta réponse.
à+twinley
Bonjour.
En poursuivant tes recherches, tu aurais trouvé que cette méthode n'est pas fiable car elle ne fonctionne pas sur certaine config.
Ce que je propose :
Une propriété OnAction commune à chacun des boutons de ta barre d'outils nommée "MaBarre", par Exemple "Action"
Et dans un module :
Sub Action()
MsgBox CommandBars("MaBarre").Controls(Application.Caller(1)).Caption
End Sub
Alain CROS
"twinley" a écrit dans le message de news: #Bonsoir FxM
Pas mal ta solution, je n'avais pas pensé à ça.
Comme tu vas le voir, j'ai trouvé la soluce de Denis.
J'ai cherché pendant deux heures sans succés, je post ma question, je
retourne fouiller et c'est le moment de grâce. Il faut poster pour
trouver dans les archives...
Mais où vont-ils chercher tout ça ?
Merci pour ta réponse.
à+twinley
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
--
à+twinley
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
--
à+twinley
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
--
à+twinley
Bonjour twinley;
Tu n'as besoin que d'une seule procédure; un exemple:
Sub OnActionWithArguments()
Call DelBarre
Dim CmdBar As CommandBar, i%, shName$
Set CmdBar = CommandBars.Add
For i = 1 To 12
shName = Choose(i, "Janvier", "Février" _
, "Mars", "Avril", "Mai", "Juin" _
, "Juillet", "Août", "Septembre", "Octobre" _
, "Novembre", "Décembre")
CmdBarAdd CmdBar, ThisWorkbook, "MontreOnglet" _
, "Affiche l'onglet " & shName, 2520, shName
Next i
CmdBar.Name = "Ma barre de test"
CmdBar.Visible = True
Set CmdBar = Nothing
End Sub
Private Function CmdBarAdd(ParentCmdBar As CommandBar _
, Wbk As Workbook, ProcName$, sToolTip$, lFaceID& _
, ParamArray args() As Variant) As CommandBarButton
Dim Action$, CBtn As CommandBarButton
Dim vArg As Variant, Sep$
Set CBtn = ParentCmdBar.Controls.Add
CBtn.FaceId = lFaceID
CBtn.TooltipText = sToolTip
Action = "'" & Wbk.Name & "'!'" & ProcName
If IsArray(args) Then
For Each vArg In args
Action = Action & Sep & """" & CStr(vArg) & """"
Sep = ","
Next
End If
Action = Action & "'"
CBtn.OnAction = Action
Set CBtn = Nothing
End Function
Sub MontreOnglet(Optional Param$ = "")
MsgBox "Paramètre : " & Param, 64
'ThisWorkbook.Sheets(Param).Select
End Sub
Sub DelBarre()
On Error Resume Next
Application.CommandBars("Ma barre de test").Delete
End Sub
Note qu'avec ce principe, tu pourrais transmettre plusieurs arguments.
MP
"twinley" a écrit dans le message de
news:Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
--
à+twinley
Bonjour twinley;
Tu n'as besoin que d'une seule procédure; un exemple:
Sub OnActionWithArguments()
Call DelBarre
Dim CmdBar As CommandBar, i%, shName$
Set CmdBar = CommandBars.Add
For i = 1 To 12
shName = Choose(i, "Janvier", "Février" _
, "Mars", "Avril", "Mai", "Juin" _
, "Juillet", "Août", "Septembre", "Octobre" _
, "Novembre", "Décembre")
CmdBarAdd CmdBar, ThisWorkbook, "MontreOnglet" _
, "Affiche l'onglet " & shName, 2520, shName
Next i
CmdBar.Name = "Ma barre de test"
CmdBar.Visible = True
Set CmdBar = Nothing
End Sub
Private Function CmdBarAdd(ParentCmdBar As CommandBar _
, Wbk As Workbook, ProcName$, sToolTip$, lFaceID& _
, ParamArray args() As Variant) As CommandBarButton
Dim Action$, CBtn As CommandBarButton
Dim vArg As Variant, Sep$
Set CBtn = ParentCmdBar.Controls.Add
CBtn.FaceId = lFaceID
CBtn.TooltipText = sToolTip
Action = "'" & Wbk.Name & "'!'" & ProcName
If IsArray(args) Then
For Each vArg In args
Action = Action & Sep & """" & CStr(vArg) & """"
Sep = ","
Next
End If
Action = Action & "'"
CBtn.OnAction = Action
Set CBtn = Nothing
End Function
Sub MontreOnglet(Optional Param$ = "")
MsgBox "Paramètre : " & Param, 64
'ThisWorkbook.Sheets(Param).Select
End Sub
Sub DelBarre()
On Error Resume Next
Application.CommandBars("Ma barre de test").Delete
End Sub
Note qu'avec ce principe, tu pourrais transmettre plusieurs arguments.
MP
"twinley" <twinleymax@hotmail.com> a écrit dans le message de
news:eLjEb0vBFHA.3820@TK2MSFTNGP11.phx.gbl...
Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
--
à+twinley
Bonjour twinley;
Tu n'as besoin que d'une seule procédure; un exemple:
Sub OnActionWithArguments()
Call DelBarre
Dim CmdBar As CommandBar, i%, shName$
Set CmdBar = CommandBars.Add
For i = 1 To 12
shName = Choose(i, "Janvier", "Février" _
, "Mars", "Avril", "Mai", "Juin" _
, "Juillet", "Août", "Septembre", "Octobre" _
, "Novembre", "Décembre")
CmdBarAdd CmdBar, ThisWorkbook, "MontreOnglet" _
, "Affiche l'onglet " & shName, 2520, shName
Next i
CmdBar.Name = "Ma barre de test"
CmdBar.Visible = True
Set CmdBar = Nothing
End Sub
Private Function CmdBarAdd(ParentCmdBar As CommandBar _
, Wbk As Workbook, ProcName$, sToolTip$, lFaceID& _
, ParamArray args() As Variant) As CommandBarButton
Dim Action$, CBtn As CommandBarButton
Dim vArg As Variant, Sep$
Set CBtn = ParentCmdBar.Controls.Add
CBtn.FaceId = lFaceID
CBtn.TooltipText = sToolTip
Action = "'" & Wbk.Name & "'!'" & ProcName
If IsArray(args) Then
For Each vArg In args
Action = Action & Sep & """" & CStr(vArg) & """"
Sep = ","
Next
End If
Action = Action & "'"
CBtn.OnAction = Action
Set CBtn = Nothing
End Function
Sub MontreOnglet(Optional Param$ = "")
MsgBox "Paramètre : " & Param, 64
'ThisWorkbook.Sheets(Param).Select
End Sub
Sub DelBarre()
On Error Resume Next
Application.CommandBars("Ma barre de test").Delete
End Sub
Note qu'avec ce principe, tu pourrais transmettre plusieurs arguments.
MP
"twinley" a écrit dans le message de
news:Bonsoir,
Je créé un menu avec 12 entrées pour lancer 12 macros.
Si je pouvais transmettre une valeur (2) ou (5) ou (8) avec la macro,
je simplifie le code avec une seule macro à éxécuter.
Sinon c'est 12 macros identiques avec des vars différentes.
Je n'ai pas trouvé de notes là-dessus.
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup, _
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Janvier"
.OnAction = "montre5onglet(2)"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Février"
.OnAction = "montre5onglet(5)"
End With
etc.
Si je mets .OnAction = "montre5onglet" cela fonctionne mais pour une
macro spécifique.
Est-ce possible de transmettre une var ou bien dois-je écrire 12 macros ?
Merci pour votre aide.
--
à+twinley
Bonjour twinley;
Tu n'as besoin que d'une seule procédure; un exemple:
Sub OnActionWithArguments()
Call DelBarre
Dim CmdBar As CommandBar, i%, shName$
Set CmdBar = CommandBars.Add
For i = 1 To 12
shName = Choose(i, "Janvier", "Février" _
, "Mars", "Avril", "Mai", "Juin" _
, "Juillet", "Août", "Septembre", "Octobre" _
, "Novembre", "Décembre")
CmdBarAdd CmdBar, ThisWorkbook, "MontreOnglet" _
, "Affiche l'onglet " & shName, 2520, shName
Next i
CmdBar.Name = "Ma barre de test"
CmdBar.Visible = True
Set CmdBar = Nothing
End Sub
Private Function CmdBarAdd(ParentCmdBar As CommandBar _
, Wbk As Workbook, ProcName$, sToolTip$, lFaceID& _
, ParamArray args() As Variant) As CommandBarButton
Dim Action$, CBtn As CommandBarButton
Dim vArg As Variant, Sep$
Set CBtn = ParentCmdBar.Controls.Add
CBtn.FaceId = lFaceID
CBtn.TooltipText = sToolTip
Action = "'" & Wbk.Name & "'!'" & ProcName
If IsArray(args) Then
For Each vArg In args
Action = Action & Sep & """" & CStr(vArg) & """"
Sep = ","
Next
End If
Action = Action & "'"
CBtn.OnAction = Action
Set CBtn = Nothing
End Function
Sub MontreOnglet(Optional Param$ = "")
MsgBox "Paramètre : " & Param, 64
'ThisWorkbook.Sheets(Param).Select
End Sub
Sub DelBarre()
On Error Resume Next
Application.CommandBars("Ma barre de test").Delete
End Sub
Note qu'avec ce principe, tu pourrais transmettre plusieurs arguments.
MP
Bonjour twinley;
Tu n'as besoin que d'une seule procédure; un exemple:
Sub OnActionWithArguments()
Call DelBarre
Dim CmdBar As CommandBar, i%, shName$
Set CmdBar = CommandBars.Add
For i = 1 To 12
shName = Choose(i, "Janvier", "Février" _
, "Mars", "Avril", "Mai", "Juin" _
, "Juillet", "Août", "Septembre", "Octobre" _
, "Novembre", "Décembre")
CmdBarAdd CmdBar, ThisWorkbook, "MontreOnglet" _
, "Affiche l'onglet " & shName, 2520, shName
Next i
CmdBar.Name = "Ma barre de test"
CmdBar.Visible = True
Set CmdBar = Nothing
End Sub
Private Function CmdBarAdd(ParentCmdBar As CommandBar _
, Wbk As Workbook, ProcName$, sToolTip$, lFaceID& _
, ParamArray args() As Variant) As CommandBarButton
Dim Action$, CBtn As CommandBarButton
Dim vArg As Variant, Sep$
Set CBtn = ParentCmdBar.Controls.Add
CBtn.FaceId = lFaceID
CBtn.TooltipText = sToolTip
Action = "'" & Wbk.Name & "'!'" & ProcName
If IsArray(args) Then
For Each vArg In args
Action = Action & Sep & """" & CStr(vArg) & """"
Sep = ","
Next
End If
Action = Action & "'"
CBtn.OnAction = Action
Set CBtn = Nothing
End Function
Sub MontreOnglet(Optional Param$ = "")
MsgBox "Paramètre : " & Param, 64
'ThisWorkbook.Sheets(Param).Select
End Sub
Sub DelBarre()
On Error Resume Next
Application.CommandBars("Ma barre de test").Delete
End Sub
Note qu'avec ce principe, tu pourrais transmettre plusieurs arguments.
MP
Bonjour twinley;
Tu n'as besoin que d'une seule procédure; un exemple:
Sub OnActionWithArguments()
Call DelBarre
Dim CmdBar As CommandBar, i%, shName$
Set CmdBar = CommandBars.Add
For i = 1 To 12
shName = Choose(i, "Janvier", "Février" _
, "Mars", "Avril", "Mai", "Juin" _
, "Juillet", "Août", "Septembre", "Octobre" _
, "Novembre", "Décembre")
CmdBarAdd CmdBar, ThisWorkbook, "MontreOnglet" _
, "Affiche l'onglet " & shName, 2520, shName
Next i
CmdBar.Name = "Ma barre de test"
CmdBar.Visible = True
Set CmdBar = Nothing
End Sub
Private Function CmdBarAdd(ParentCmdBar As CommandBar _
, Wbk As Workbook, ProcName$, sToolTip$, lFaceID& _
, ParamArray args() As Variant) As CommandBarButton
Dim Action$, CBtn As CommandBarButton
Dim vArg As Variant, Sep$
Set CBtn = ParentCmdBar.Controls.Add
CBtn.FaceId = lFaceID
CBtn.TooltipText = sToolTip
Action = "'" & Wbk.Name & "'!'" & ProcName
If IsArray(args) Then
For Each vArg In args
Action = Action & Sep & """" & CStr(vArg) & """"
Sep = ","
Next
End If
Action = Action & "'"
CBtn.OnAction = Action
Set CBtn = Nothing
End Function
Sub MontreOnglet(Optional Param$ = "")
MsgBox "Paramètre : " & Param, 64
'ThisWorkbook.Sheets(Param).Select
End Sub
Sub DelBarre()
On Error Resume Next
Application.CommandBars("Ma barre de test").Delete
End Sub
Note qu'avec ce principe, tu pourrais transmettre plusieurs arguments.
MP
Bonjour
Cette méthode consiste a passer un argument à la macro déclanchée par le OnAction des boutons.
Comme évoqué précédemment, certaine config ne l'accepte pas et c'est justement le cas chez moi avec Win98 et XL2000, alors que ça
fonctionne bien avec XL97 et XL2002.
Alain CROS
"Michel Pierron" a écrit dans le message de news:Bonjour twinley;
Tu n'as besoin que d'une seule procédure; un exemple:
Sub OnActionWithArguments()
Call DelBarre
Dim CmdBar As CommandBar, i%, shName$
Set CmdBar = CommandBars.Add
For i = 1 To 12
shName = Choose(i, "Janvier", "Février" _
, "Mars", "Avril", "Mai", "Juin" _
, "Juillet", "Août", "Septembre", "Octobre" _
, "Novembre", "Décembre")
CmdBarAdd CmdBar, ThisWorkbook, "MontreOnglet" _
, "Affiche l'onglet " & shName, 2520, shName
Next i
CmdBar.Name = "Ma barre de test"
CmdBar.Visible = True
Set CmdBar = Nothing
End Sub
Private Function CmdBarAdd(ParentCmdBar As CommandBar _
, Wbk As Workbook, ProcName$, sToolTip$, lFaceID& _
, ParamArray args() As Variant) As CommandBarButton
Dim Action$, CBtn As CommandBarButton
Dim vArg As Variant, Sep$
Set CBtn = ParentCmdBar.Controls.Add
CBtn.FaceId = lFaceID
CBtn.TooltipText = sToolTip
Action = "'" & Wbk.Name & "'!'" & ProcName
If IsArray(args) Then
For Each vArg In args
Action = Action & Sep & """" & CStr(vArg) & """"
Sep = ","
Next
End If
Action = Action & "'"
CBtn.OnAction = Action
Set CBtn = Nothing
End Function
Sub MontreOnglet(Optional Param$ = "")
MsgBox "Paramètre : " & Param, 64
'ThisWorkbook.Sheets(Param).Select
End Sub
Sub DelBarre()
On Error Resume Next
Application.CommandBars("Ma barre de test").Delete
End Sub
Note qu'avec ce principe, tu pourrais transmettre plusieurs arguments.
MP
Bonjour
Cette méthode consiste a passer un argument à la macro déclanchée par le OnAction des boutons.
Comme évoqué précédemment, certaine config ne l'accepte pas et c'est justement le cas chez moi avec Win98 et XL2000, alors que ça
fonctionne bien avec XL97 et XL2002.
Alain CROS
"Michel Pierron" <michel.pierron@free.fr> a écrit dans le message de news: uOxiWr4BFHA.3416@TK2MSFTNGP09.phx.gbl...
Bonjour twinley;
Tu n'as besoin que d'une seule procédure; un exemple:
Sub OnActionWithArguments()
Call DelBarre
Dim CmdBar As CommandBar, i%, shName$
Set CmdBar = CommandBars.Add
For i = 1 To 12
shName = Choose(i, "Janvier", "Février" _
, "Mars", "Avril", "Mai", "Juin" _
, "Juillet", "Août", "Septembre", "Octobre" _
, "Novembre", "Décembre")
CmdBarAdd CmdBar, ThisWorkbook, "MontreOnglet" _
, "Affiche l'onglet " & shName, 2520, shName
Next i
CmdBar.Name = "Ma barre de test"
CmdBar.Visible = True
Set CmdBar = Nothing
End Sub
Private Function CmdBarAdd(ParentCmdBar As CommandBar _
, Wbk As Workbook, ProcName$, sToolTip$, lFaceID& _
, ParamArray args() As Variant) As CommandBarButton
Dim Action$, CBtn As CommandBarButton
Dim vArg As Variant, Sep$
Set CBtn = ParentCmdBar.Controls.Add
CBtn.FaceId = lFaceID
CBtn.TooltipText = sToolTip
Action = "'" & Wbk.Name & "'!'" & ProcName
If IsArray(args) Then
For Each vArg In args
Action = Action & Sep & """" & CStr(vArg) & """"
Sep = ","
Next
End If
Action = Action & "'"
CBtn.OnAction = Action
Set CBtn = Nothing
End Function
Sub MontreOnglet(Optional Param$ = "")
MsgBox "Paramètre : " & Param, 64
'ThisWorkbook.Sheets(Param).Select
End Sub
Sub DelBarre()
On Error Resume Next
Application.CommandBars("Ma barre de test").Delete
End Sub
Note qu'avec ce principe, tu pourrais transmettre plusieurs arguments.
MP
Bonjour
Cette méthode consiste a passer un argument à la macro déclanchée par le OnAction des boutons.
Comme évoqué précédemment, certaine config ne l'accepte pas et c'est justement le cas chez moi avec Win98 et XL2000, alors que ça
fonctionne bien avec XL97 et XL2002.
Alain CROS
"Michel Pierron" a écrit dans le message de news:Bonjour twinley;
Tu n'as besoin que d'une seule procédure; un exemple:
Sub OnActionWithArguments()
Call DelBarre
Dim CmdBar As CommandBar, i%, shName$
Set CmdBar = CommandBars.Add
For i = 1 To 12
shName = Choose(i, "Janvier", "Février" _
, "Mars", "Avril", "Mai", "Juin" _
, "Juillet", "Août", "Septembre", "Octobre" _
, "Novembre", "Décembre")
CmdBarAdd CmdBar, ThisWorkbook, "MontreOnglet" _
, "Affiche l'onglet " & shName, 2520, shName
Next i
CmdBar.Name = "Ma barre de test"
CmdBar.Visible = True
Set CmdBar = Nothing
End Sub
Private Function CmdBarAdd(ParentCmdBar As CommandBar _
, Wbk As Workbook, ProcName$, sToolTip$, lFaceID& _
, ParamArray args() As Variant) As CommandBarButton
Dim Action$, CBtn As CommandBarButton
Dim vArg As Variant, Sep$
Set CBtn = ParentCmdBar.Controls.Add
CBtn.FaceId = lFaceID
CBtn.TooltipText = sToolTip
Action = "'" & Wbk.Name & "'!'" & ProcName
If IsArray(args) Then
For Each vArg In args
Action = Action & Sep & """" & CStr(vArg) & """"
Sep = ","
Next
End If
Action = Action & "'"
CBtn.OnAction = Action
Set CBtn = Nothing
End Function
Sub MontreOnglet(Optional Param$ = "")
MsgBox "Paramètre : " & Param, 64
'ThisWorkbook.Sheets(Param).Select
End Sub
Sub DelBarre()
On Error Resume Next
Application.CommandBars("Ma barre de test").Delete
End Sub
Note qu'avec ce principe, tu pourrais transmettre plusieurs arguments.
MP