Probleme d'utilisation du parametre OnAction - C'est un peu Urgent -

Résolu
Little_Dev Messages postés 36 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 4 mars 2008 - 8 mars 2006 à 12:09
Little_Dev Messages postés 36 Date d'inscription mercredi 8 septembre 2004 Statut Membre Derniè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

STR_TST = STR_STRING
End Sub</sup>

Dans l'attente d'une reponse, je vous remercie

5 réponses

zoglub14 Messages postés 62 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 16 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

@+

Zorglub
3
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
8 mars 2006 à 13:23
Bonjour,
Public Sub PRC_TST(ByVal STR_STRING As String), n'est pas reconnu comme une macro.

jpleroisse
0
Little_Dev Messages postés 36 Date d'inscription mercredi 8 septembre 2004 Statut Membre Derniè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.

A trés bientot sur le forum de VBFRANCE.

Encore milles merci pour votre gentillesse

@+ Little_Dev ;-)
0
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Little_Dev Messages postés 36 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 4 mars 2008
8 mars 2006 à 14:36
Ok c'est trés sympathique te ta part jpleroisse.

Merci

Bonne continuation et peut-etre a trés bientot.
0
Rejoignez-nous