OVH Cloud OVH Cloud

VBA + Menu Word

3 réponses
Avatar
Jocaste
Bonjour =E0 tous,

Je souhaite savoir comment il serait possible lors de la=20
cr=E9ation d'un menu Word en VBA, de lire le fichier=20
contenant un .bmp comme logo de menu

Merci d'avance.

3 réponses

Avatar
Geo
Bonjour Jocaste


Bonjour à tous,

Je souhaite savoir comment il serait possible lors de la
création d'un menu Word en VBA, de lire le fichier
contenant un .bmp comme logo de menu


Je ne connais que le faceId, mais ta question
ou du moins la réponse, m'intéresse aussi.
Du coup je me demande si on ne peut pas utiliser le .PasteFace pour
coller une image sur un CommandBarButton.
Faudrait faire ça dans un auto exec.


--

A+

Avatar
Jocaste
La technique que j'utilise c'est la suivante

Private Sub Create_Menu(MenuName As String)
Dim HelpMenu As Object
Dim oShape As Shape
' Place le graphique sur le document
Set oShape = ActiveDocument.Shapes.AddPicture
(FileName:=PathSource + "visiomso.bmp")
oShape.Select
' Copie le graphique
Selection.CopyAsPicture
' Supprime le graphique du document
Selection.Delete
' Copie le graphique sur le premier bouton de la barre
de menu


' Spécifie l'endroit où le nouveau menu doit être
sauvegardé
CustomizationContext =
NormalTemplate '
ActiveDocument.AttachedTemplate

' Ajoute menu au Menu Bar
Set HelpMenu = CommandBars("Menu Bar").FindControl
(ID:0010)

With CommandBars("Menu Bar").Controls
.Add(Type:=msoControlPopup,
Before:=HelpMenu.Index, Temporary:=True).Caption = MenuName
End With
---------------------------------------------------------
' Ajoute les commandes au nouveau menu
Call Menu_Manager(MenuName, msoControlButton, False,
True, 1362, "Insert Image
Visio", "Insert_Image_Visio", "", True)

---------------------------------------------------------
Private Sub Menu_Manager(MenuName As String, TypeButton As
Variant, BeginGroup As Boolean, Paste As Boolean, FaceId
As Long, _
Caption As String, OnAction As
String, TooltipText As String, Enable As Boolean)
Dim MenuItem As Object
Dim oShape As Shape

With CommandBars("Menu Bar").Controls
(MenuName).Controls
Set MenuItem = .Add(TypeButton)
With MenuItem
.BeginGroup = BeginGroup
If Paste Then
.PasteFace
Set oShape = Nothing
Else
If TypeButton <> msoControlPopup Then
.FaceId = FaceId
End If
End If
.Caption = Caption
.OnAction = OnAction
.TooltipText = TooltipText
.Enabled = Enable
End With
End With
End Sub
----------------------------------------------------------
Seulement le problème que j'ai c'est que je dois copier le
logo sur le 1er document de la page.
Le problème réside dans le fait qu'à partir du windows
explorer si je veux ouvrir directement un document la
macro se plante. Il faut alors que j'ajoute un document
vierge.

Sub AutoExec()
If Documents.Count = 0 Then
Documents.Add
End If
End Sub

Je pensais pouvoir lire le logo directement dans le presse
papier et ensuite utiliser le reste de mon code pour le
placer dans le menu. Ce serait plus propre.

Si vous avez une idée.
Merci d'avance pour votre aide.
Avatar
Anacoluthe
Bonjour !

Pas besoin de passer par une insertion dans un document
pour lire une image d'un fichier.
Utilisez LoadPicture par exemple (vba 6.3)

Anacoluthe
« L'image ne peut être étudiée que par l'image. »
- Gaston BACHELARD


'Jocaste' nous a écrit ...
La technique que j'utilise c'est la suivante

Private Sub Create_Menu(MenuName As String)
Dim HelpMenu As Object
Dim oShape As Shape
' Place le graphique sur le document
Set oShape = ActiveDocument.Shapes.AddPicture
(FileName:=PathSource + "visiomso.bmp")
oShape.Select
' Copie le graphique
Selection.CopyAsPicture
' Supprime le graphique du document
Selection.Delete
' Copie le graphique sur le premier bouton de la barre
de menu


' Spécifie l'endroit où le nouveau menu doit être
sauvegardé
CustomizationContext =
NormalTemplate '
ActiveDocument.AttachedTemplate

' Ajoute menu au Menu Bar
Set HelpMenu = CommandBars("Menu Bar").FindControl
(ID:0010)

With CommandBars("Menu Bar").Controls
.Add(Type:=msoControlPopup,
Before:=HelpMenu.Index, Temporary:=True).Caption = MenuName
End With
---------------------------------------------------------
' Ajoute les commandes au nouveau menu
Call Menu_Manager(MenuName, msoControlButton, False,
True, 1362, "Insert Image
Visio", "Insert_Image_Visio", "", True)

---------------------------------------------------------
Private Sub Menu_Manager(MenuName As String, TypeButton As
Variant, BeginGroup As Boolean, Paste As Boolean, FaceId
As Long, _
Caption As String, OnAction As
String, TooltipText As String, Enable As Boolean)
Dim MenuItem As Object
Dim oShape As Shape

With CommandBars("Menu Bar").Controls
(MenuName).Controls
Set MenuItem = .Add(TypeButton)
With MenuItem
.BeginGroup = BeginGroup
If Paste Then
.PasteFace
Set oShape = Nothing
Else
If TypeButton <> msoControlPopup Then
.FaceId = FaceId
End If
End If
.Caption = Caption
.OnAction = OnAction
.TooltipText = TooltipText
.Enabled = Enable
End With
End With
End Sub
----------------------------------------------------------
Seulement le problème que j'ai c'est que je dois copier le
logo sur le 1er document de la page.
Le problème réside dans le fait qu'à partir du windows
explorer si je veux ouvrir directement un document la
macro se plante. Il faut alors que j'ajoute un document
vierge.

Sub AutoExec()
If Documents.Count = 0 Then
Documents.Add
End If
End Sub

Je pensais pouvoir lire le logo directement dans le presse
papier et ensuite utiliser le reste de mon code pour le
placer dans le menu. Ce serait plus propre.

Si vous avez une idée.
Merci d'avance pour votre aide.