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

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

5 réponses

Meilleure réponse
Messages postés
62
Date d'inscription
mardi 25 mars 2003
Dernière intervention
16 octobre 2007
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Dernière intervention
11 mars 2006
0
Merci
Bonjour,
Public Sub PRC_TST(ByVal STR_STRING As String), n'est pas reconnu comme une macro.

jpleroisse
Messages postés
38
Date d'inscription
mercredi 8 septembre 2004
Dernière intervention
4 mars 2008
0
Merci
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 ;-)
Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Dernière intervention
11 mars 2006
0
Merci
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
Messages postés
38
Date d'inscription
mercredi 8 septembre 2004
Dernière intervention
4 mars 2008
0
Merci
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.