Bonjour,
je cherche à écrire un addin pour word2000. Je me suis
inspiré des différents articles publiés sur MSDN pour
écrire un code efficace. Cependant, en dépit des
déclarations (librairie Office version 9.0, Word version
9.0, AddIn...) je rencontre un "petit" problème que je
soumets à votre sagacité.
Voici tout d'abord le listing du code incriminé :
Option Explicit
Dim oXL As Object
Dim MyAddin As Object
Dim WithEvents MyButton As Office.CommandBarButton
Dim WithEvents MyControl As Office.CommandBarComboBox
Private Sub AddinInstance_OnConnection(ByVal
Application As Object, _
ByVal ConnectMode As
AddInDesignerObjects.ext_ConnectMode, _
ByVal AddInInst As Object, custom() As Variant)
On Error Resume Next
' Initialise l'objet MyAddin
' Objectif : récupération de l'ID de l'instance pour
la procédure
' AddinInstance_OnStartupComplete
Set MyAddin = AddInInst
End Sub
Private Sub AddinInstance_OnDisconnection(ByVal
RemoveMode As _
AddInDesignerObjects.ext_DisconnectMode, custom() As
Variant)
On Error Resume Next
' Déconnexion de l'Add-In
MyControl.Delete
MyButton.Delete
Set MyButton = Nothing
Set MyControl = Nothing
Set mybar = Nothing
Set oXL = Nothing
Set MyAddin = Nothing
End Sub
Private Sub AddinInstance_OnStartupComplete(custom() As
Variant)
On Error Resume Next
' Création des objets propres à l'Addin
' Après le chargement complet de l'application hôte
' Déclaration des variables & objets
' Booléen indicateur de présence de la barre de commande
Dim BarreTrouve As Boolean
' Objets barre
Dim cbar As Object
Dim mybar As Object
' Adresse dynamique de l'instance de l'addin
Dim aAddin As String
'Contrôle de type bouton
Dim MyButton As Object
'Contrôle de type ComboBox
Dim MyControl As Object
aAddin = MyAddin.ProgId
aAddin = "!<" & aAddin & ">"
' Utilise la méthode last binding
Set oXL = GetObject(, "Word.Application")
'Place l 'indicateur de test de présence à faux
BarreTrouve = False
' Cherche s'il existe déjà une barre d'outil nommée
MaBarre
For Each cbar In oXL.CommandBars
If cbar.Name = "MaBarre" Then
' Il existe une barre de commande nommée
MaBarre
BarreTrouve = True
End If
Next
If BarreTrouve Then
GoTo Apres_SetBarre
End If
Set mybar = oXL.CommandBars _
.Add(Name:="MaBarre", Position:=msoBarTop, _
Temporary:=True)
mybar.Visible = True
Set MyButton = oXL.CommandBars
("MaBarre").Controls.Add(Type:=msoControlButton,
Temporary:=True)
With MyButton
.Caption = "ActionMyButton"
.Style = msoButtonIconAndCaption
' Initialise Info bulle Déboggage
.ToolTipText = "ActionMyButton " & aAddin
.Visible = True
.OnAction = aAddin
End With
Set MyControl = oXL.CommandBars
("MaBarre").Controls.Add(Type:=msoControlComboBox,
Temporary:=True)
With MyControl
.AddItem Text:="Texte 1", Index:=1
.AddItem Text:="Texte 2", Index:=2
.AddItem Text:="Texte 3", Index:=3
.AddItem Text:="Texte 4", Index:=4
.AddItem Text:="Texte 5", Index:=5
.AddItem Text:="Texte 6", Index:=6
.AddItem Text:="Texte 7", Index:=7
.AddItem Text:="Texte 8", Index:=8
' Initialise Infobulle Déboggage
.ToolTipText = "MonComboBox " & aAddin
.DropDownLines = 5
.DropDownWidth = -1
.ListHeaderCount = 0
.Width = 300
.Visible = True
.OnAction = aAddin
End With
Apres_SetBarre:
' Destruction de l'objet cbar devenu inutile
Set cbar = Nothing
End Sub
Private Sub MyButton_Click(ByVal Ctrl As
Office.CommandBarButton, CancelDefault As Boolean)
MsgBox ("Click sur MyButton")
End Sub
Private Sub MyControl_Change(ByVal Ctrl As
Office.CommandBarComboBox)
Dim ValRenvoye As Variant
Dim StrRenvoye As String
MsgBox ("Selection dans MaComboBox modifiée")
ValRenvoye = oXL.mybar.MyControl.Index
StrRenvoye = oXL.mybar.MyControl.Value
MsgBox ("-> " & Str(ValRenvoye) & " : " & StrRenvoye)
End Sub
Le problème rencontré est le suivant:
Un click sur le MyButton ne déclenche aucune action.
Une sélection dans MyControl retourne invariablement le
message d'erreur suivant : Macro non trouvée ou paramètres
de sécurité trop élevés.
Cependant :
- l'Addin est à priori correctement enregistré dans la
base de registre;
- les infobulles de déboggage renvoie un ID de type
MonAddIn.Connect;
- l'Addin est visible au travers de l'item supplément COM
du menu Outils;
- les paramètres de sécurité sont configurés de façon
minimale : exécution de tous les codes macros.