OVH Cloud OVH Cloud

Menu dans userform ( encore !!!)

3 réponses
Avatar
damienguilbert
bonjour
merci de votre aide mais alor la je patauge complètement , dans un
user je fais pas mal de chose maintenent mais ca ............. (j ai
debuté ya pas longtemg.....)

bref......
je repete ma question

je souhaite faire un menu deroulant dans un userform
exemple :
menu : fichier
entrainne un sous menu : sauver, apercu avant impression
et ca declenche evenement

:-(

c est la galère.....

on m a conseillé de telecharger un classeur d excelabo, mais je le
trouve encore complexe pour moi..........

par contre pour vous aider j ai ce script qui peut aider :

il bug sur le module :

>Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift
As
>Integer, ByVal X As Single, ByVal Y As Single)
> If Button = 2 Then ' le bouton droit a été appuyé
> AfficheMonMenu ' !!!!!!!!!!!! ca bug ici
> End If
>End Sub


>-----Message d'origine-----

>Bonjour LogX
>Oui c'est possible.
>Plusieurs façons de procéder, en voici une :
>Le menu apparaît lorsque l'on effectue un clic droit sur le
formulaire.

>1 - Dans le code du formulaire ajouter ces évènements :
>Private Sub UserForm_Initialize()
>CreationMenu
>End Sub

>Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift
As
>Integer, ByVal X As Single, ByVal Y As Single)
> If Button = 2 Then ' le bouton droit a été appuyé
> AfficheMonMenu
> End If
>End Sub

>2 - Dans un nouveau module du classeur

>a) Déclaration de variables

>Option Explicit
>Public cb As CommandBar
>Const NouvelleOption As String = "MenuSpe"

>b) Une macro qui va créér un menu :

>Sub CreationMenu()
> Set cb = Application.CommandBars.Add(NouvelleOption, msoBarPopup, False,
>True)
> With cb
> With .Controls.Add(Type:=msoControlButton)
> .OnAction = "Macro1"
> .FaceId = 71
> .Caption = "Menu 1"
> End With
> With .Controls.Add(Type:=msoControlButton)
> .OnAction = "Macro2"
> .FaceId = 72
> .Caption = "Menu 2"
> End With
> With .Controls.Add(Type:=msoControlButton)
> .OnAction = "Macro3"
> .FaceId = 73
> .Caption = "Menu 3"
> End With
> End With
> Set cb = Nothing
>End Sub

>c) Une macro qui va l'afficher
>Sub DisplayCustomPopUp()
> Application.CommandBars(NouvelleOption).ShowPopup
>End Sub

>d) les 3 macros correspondant aux options du nouveau menu

>Sub Macro1()
>
>End Sub

>Sub Macro2()
>
>End Sub

>Sub Macro3()
>
>End Sub
>

3 réponses

Avatar
Michel Pierron
Bonjour Damien;
Supposons que le label "Fichier" porte le nom Label1; dans ton module
UserForm:
Option Explicit
Private xOffset As Single, yOffset As Single

Private Sub Label1_Click()
Application.CommandBars("PopUpCb1").ShowPopup xPos, yPos
End Sub

Private Sub UserForm_Initialize()
Me.Label1.Caption = "Fichier"
Me.Label1.Height = 14
Me.Label1.Accelerator = "F"
Me.Label1.Top = 3: Me.Label1.Left = 3
xOffset = (Me.Width - Me.InsideWidth) / 2
yOffset = Me.Height - Me.InsideHeight - xOffset + 14 + 3
Call DeletePopUp
Dim cb As CommandBar
Set cb = CommandBars.Add("PopUpCb1", msoBarPopup, False, True)
Call AddItemInMenu(cb, "&Sauver", 212, "'MacroName""" & "101""'")
Call AddItemInMenu(cb, "&Aperçu", 3, "'MacroName""" & "102""'")
Call AddItemInMenu(cb, "&Quitter", 1, "'MacroName""" & "103""'", True)
Set cb = Nothing
End Sub

Private Sub AddItemInMenu(CbControl As Object, TitleCaption As String _
, NoFaceId As Integer, WhenAction As String _
, Optional NewGroup As Boolean = False)
With CbControl.Controls.Add(msoControlButton, 1, , , True)
.BeginGroup = NewGroup
.Caption = TitleCaption
.Style = msoButtonIconAndCaption
.FaceId = NoFaceId
.OnAction = ThisWorkbook.Name & "!" & WhenAction & ""
End With
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Call DeletePopUp
End Sub

Sub DeletePopUp()
On Error Resume Next
CommandBars("PopUpCb1").Delete
End Sub

Private Function xPos() As Single
xPos = (Me.Left + xOffset + Me.Label1.Left) * 4 / 3
End Function

Private Function yPos() As Single
yPos = (Me.Top + yOffset) * 4 / 3
End Function

Dans un module standard:
Option Explicit

Sub DisplayForm()
UserForm1.Show
End Sub

Sub Macroname(Dummy As String)
Select Case Dummy
Case 101: ThisWorkbook.Save
Case 102
UserForm1.Hide
ActiveWindow.SelectedSheets.PrintPreview
UserForm1.Show
Case 103
UserForm1.DeletePopUp
Unload UserForm1
End Select
End Sub

MP

"damien" a écrit dans le message de
news:
bonjour
merci de votre aide mais alor la je patauge complètement , dans un
user je fais pas mal de chose maintenent mais ca ............. (j ai
debuté ya pas longtemg.....)

bref......
je repete ma question

je souhaite faire un menu deroulant dans un userform
exemple :
menu : fichier
entrainne un sous menu : sauver, apercu avant impression
et ca declenche evenement

:-(

c est la galère.....

on m a conseillé de telecharger un classeur d excelabo, mais je le
trouve encore complexe pour moi..........

par contre pour vous aider j ai ce script qui peut aider :

il bug sur le module :

Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift
As

Integer, ByVal X As Single, ByVal Y As Single)
If Button = 2 Then ' le bouton droit a été appuyé
AfficheMonMenu ' !!!!!!!!!!!! ca bug ici
End If
End Sub



-----Message d'origine-----

Bonjour LogX
Oui c'est possible.
Plusieurs façons de procéder, en voici une :
Le menu apparaît lorsque l'on effectue un clic droit sur le
formulaire.


1 - Dans le code du formulaire ajouter ces évènements :
Private Sub UserForm_Initialize()
CreationMenu
End Sub

Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift
As

Integer, ByVal X As Single, ByVal Y As Single)
If Button = 2 Then ' le bouton droit a été appuyé
AfficheMonMenu
End If
End Sub

2 - Dans un nouveau module du classeur

a) Déclaration de variables

Option Explicit
Public cb As CommandBar
Const NouvelleOption As String = "MenuSpe"

b) Une macro qui va créér un menu :

Sub CreationMenu()
Set cb = Application.CommandBars.Add(NouvelleOption, msoBarPopup,
False,


True)
With cb
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Macro1"
.FaceId = 71
.Caption = "Menu 1"
End With
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Macro2"
.FaceId = 72
.Caption = "Menu 2"
End With
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Macro3"
.FaceId = 73
.Caption = "Menu 3"
End With
End With
Set cb = Nothing
End Sub

c) Une macro qui va l'afficher
Sub DisplayCustomPopUp()
Application.CommandBars(NouvelleOption).ShowPopup
End Sub

d) les 3 macros correspondant aux options du nouveau menu

Sub Macro1()

End Sub

Sub Macro2()

End Sub

Sub Macro3()

End Sub





Avatar
Michel Pierron
Re Damien;
Afin que les icônes correspondent aux options, tu peux rectifier les lignes:
Call AddItemInMenu(cb, "&Sauver", 3, "'MacroName""" & "101""'")
Call AddItemInMenu(cb, "&Aperçu", 109, "'MacroName""" & "102""'")
MP

"damien" a écrit dans le message de
news:
bonjour
merci de votre aide mais alor la je patauge complètement , dans un
user je fais pas mal de chose maintenent mais ca ............. (j ai
debuté ya pas longtemg.....)

bref......
je repete ma question

je souhaite faire un menu deroulant dans un userform
exemple :
menu : fichier
entrainne un sous menu : sauver, apercu avant impression
et ca declenche evenement

:-(

c est la galère.....

on m a conseillé de telecharger un classeur d excelabo, mais je le
trouve encore complexe pour moi..........

par contre pour vous aider j ai ce script qui peut aider :

il bug sur le module :

Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift
As

Integer, ByVal X As Single, ByVal Y As Single)
If Button = 2 Then ' le bouton droit a été appuyé
AfficheMonMenu ' !!!!!!!!!!!! ca bug ici
End If
End Sub



-----Message d'origine-----

Bonjour LogX
Oui c'est possible.
Plusieurs façons de procéder, en voici une :
Le menu apparaît lorsque l'on effectue un clic droit sur le
formulaire.


1 - Dans le code du formulaire ajouter ces évènements :
Private Sub UserForm_Initialize()
CreationMenu
End Sub

Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift
As

Integer, ByVal X As Single, ByVal Y As Single)
If Button = 2 Then ' le bouton droit a été appuyé
AfficheMonMenu
End If
End Sub

2 - Dans un nouveau module du classeur

a) Déclaration de variables

Option Explicit
Public cb As CommandBar
Const NouvelleOption As String = "MenuSpe"

b) Une macro qui va créér un menu :

Sub CreationMenu()
Set cb = Application.CommandBars.Add(NouvelleOption, msoBarPopup,
False,


True)
With cb
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Macro1"
.FaceId = 71
.Caption = "Menu 1"
End With
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Macro2"
.FaceId = 72
.Caption = "Menu 2"
End With
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Macro3"
.FaceId = 73
.Caption = "Menu 3"
End With
End With
Set cb = Nothing
End Sub

c) Une macro qui va l'afficher
Sub DisplayCustomPopUp()
Application.CommandBars(NouvelleOption).ShowPopup
End Sub

d) les 3 macros correspondant aux options du nouveau menu

Sub Macro1()

End Sub

Sub Macro2()

End Sub

Sub Macro3()

End Sub





Avatar
damienguilbert
"Michel Pierron" wrote in message news:...
Re Damien;
Afin que les icônes correspondent aux options, tu peux rectifier les lignes:
Call AddItemInMenu(cb, "&Sauver", 3, "'MacroName""" & "101""'")
Call AddItemInMenu(cb, "&Aperçu", 109, "'MacroName""" & "102""'")
MP



merci beaucoup michel

j avance dans ma barre d outil
c est presque fini
si tu veux je te la transmettrais pour un exemple sur internet