Little_Dev
Messages postés36Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention 4 mars 2008
-
8 mars 2006 à 12:09
Little_Dev
Messages postés36Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention 4 mars 2008
-
8 mars 2006 à 14:36
Bonjour,
J'ai un soucis pour utiliser le parametre OnAction en VBA.
Mon probleme est le suivant, j'ai créer un menu deroulant dans Excel, et je voudrait lors du clique sur le menu, il execute une fonction ou procedure avec parametre(s).
Mais je n'arrive pas à passer le parametre dans la fonction ou procedure (ci-dessous un exemple)
<sup>Sub Créer_Menu()
With Application
With .CommandBars(1).Controls.Add(msoControlPopup, before:=10)
.caption = "Mon Menu Perso"
With .Controls.Add(msoControlPopup)
.caption = "Menu 1"
With .Controls.Add(msoControlButton)
.caption = "Sous Menu 1.1"
.OnAction = "PRC_TST"
End With
End With
End With
End With
End Sub
Public Sub PRC_TST(ByVal STR_STRING As String)
Dim STR_TST
zoglub14
Messages postés62Date d'inscriptionmardi 25 mars 2003StatutMembreDernière intervention16 octobre 2007 8 mars 2006 à 13:37
Hello
Il faut que tu crées un chaine de caractère.
Ci dessous un exemple complet
Option Explicit
Function CommandBarAdd(oParentCommandBar As CommandBar, oMacroWrk As Excel.Workbook, sMacroName As String, sToolTip As String, lFaceID As Long, ParamArray args() As Variant) As CommandBarButton
Dim oBtn As CommandBarButton
Dim sOnAction As String
Dim vArg As Variant
Dim sSeperator As String
Set oBtn = oParentCommandBar.Controls.Add
oBtn.FaceId = lFaceID
oBtn.TooltipText = sToolTip
' Ci dessous la construction de la chaine pour passer les parametres
' dans le OnAction
sOnAction = "'" & oMacroWrk.Name & "'!'" & sMacroName
If IsArray(args) Then
For Each vArg In args
sOnAction = sOnAction & sSeperator & """" & CStr(vArg) & """"
sSeperator = ","
Next
End If
'Mettre un Bpx ci dessous pour voir le resultat finale et la constitution de la chaine
sOnAction = sOnAction & "'"
oBtn.OnAction = sOnAction
End Function
'Demo code
Sub Test()
Dim oCmdBar As CommandBar
Set oCmdBar = CommandBars.Add
'Passe les parametres pour créer la commande bar :
'quel Doc, le nom de la commandebar, l'intitulé de TooltipText, le N° de l'icone, la parametre 1 et le 2
CommandBarAdd oCmdBar, ThisWorkbook, "TestClick", "Show Msgbox", 2520, "fdede", "dada"
'Nom de la nouvelle bar
oCmdBar.Name = "Test2Bar"
oCmdBar.Visible = True
End Sub
'Routine appellée par le Onaction avec parametre
Sub TestClick(Optional sParam1 As String, Optional sParam2 As String)
MsgBox "Param1: " & sParam2 & ". Param2: " & sParam1
End Sub
Little_Dev
Messages postés36Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention 4 mars 2008 8 mars 2006 à 14:12
Bonjour a tous les deux.
Je vous remercie de vous etes intéressé a mon probleme.
Effectivement jpleroisse ce n'est pas une macro, mais une procedure qui fait partie d'une macro, je suis désolés si je me suis mal exprimé lorsque j'ai ennoncé mon probleme.
Un grand merci a Zorglub pour ta solution, qui me convient tout a fait.
Je n'avais pas vu la chose sous cette angle, trop obstiné dans mes idées.
jpleroisse
Messages postés1788Date d'inscriptionmardi 7 novembre 2000StatutMembreDernière intervention11 mars 200627 8 mars 2006 à 14:14
Re,
A tout hasard, je te remet ton code simplement modifé. (Quand même plus simple)
Sub Créer_Menu()
'Supprime le menu au cas où il existerait déjà.
Call DeleteMenu
With Application
With .CommandBars(1).Controls.Add(msoControlPopup, before:=10)
.Caption = "Mon Menu Perso"
With .Controls.Add(msoControlPopup)
.Caption = "Menu 1"
With .Controls.Add(msoControlButton)
.Caption = "Sous Menu 1.1"
.FaceId = 162
.OnAction = "MaMacro"
End With
End With
End With
End With
End Sub
Sub DeleteMenu()
CommandBars(1).Controls("Mon Menu Perso").Delete
End Sub
Sub MaMacro()
MsgBox "Ceci fonctionne très bien !"
End Sub
jpleroisse
Vous n’avez pas trouvé la réponse que vous recherchez ?