Probleme d'utilisation du parametre OnAction - C'est un peu Urgent - [Résolu]

Little_Dev 38 Messages postés mercredi 8 septembre 2004Date d'inscription 4 mars 2008 Dernière intervention - 8 mars 2006 à 12:09 - Dernière réponse : Little_Dev 38 Messages postés mercredi 8 septembre 2004Date d'inscription 4 mars 2008 Dernière intervention
- 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
Afficher la suite 

5 réponses

zoglub14 62 Messages postés mardi 25 mars 2003Date d'inscription 16 octobre 2007 Dernière intervention - 8 mars 2006 à 13:37
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
jpleroisse 1788 Messages postés mardi 7 novembre 2000Date d'inscription 11 mars 2006 Dernière intervention - 8 mars 2006 à 13:23
0
Utile
Bonjour,
Public Sub PRC_TST(ByVal STR_STRING As String), n'est pas reconnu comme une macro.

jpleroisse
Little_Dev 38 Messages postés mercredi 8 septembre 2004Date d'inscription 4 mars 2008 Dernière intervention - 8 mars 2006 à 14:12
0
Utile
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 ;-)
jpleroisse 1788 Messages postés mardi 7 novembre 2000Date d'inscription 11 mars 2006 Dernière intervention - 8 mars 2006 à 14:14
0
Utile
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
Little_Dev 38 Messages postés mercredi 8 septembre 2004Date d'inscription 4 mars 2008 Dernière intervention - 8 mars 2006 à 14:36
0
Utile
Ok c'est trés sympathique te ta part jpleroisse.

Merci

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.