J'ai créé un modèle Word compatible avec les macros (.dotm) qui fonctionne parfaitement sur mon ordinateur lorsque je l'enregistre dans mon dossier de démarrage Word. Cependant, lorsque j'envoie le .dotm
à mes collègues (certains dans le même environnement que moi, d'autres non), une erreur est générée lorsqu'on appuie sur le bouton du ruban de l'interface utilisateur personnalisée :
La macro est introuvable ou a été désactivée en raison de vos paramètres de sécurité.
Les paramètres des macros sont définis pour exécuter toutes les macros, le dossier contenant le modèle >est un emplacement de confiance.
.... d'autres options d'aide suivent
Mes collègues enregistrent également le fichier dans leur dossier de démarrage et chargent Word. Le ruban s'affiche parfaitement, mais la macro ne s'exécute pas. Mes collègues et moi-même avons effectué de nombreuses recherches en ligne et nous ne parvenons pas à trouver la cause du problème, car toutes mes configurations sont correctes, pour autant que je sache, et je les énumère ci-dessous :
- Réglages Macro : Activer toutes les macros
- L'accès de confiance au modèle d'objet du projet VBA est vérifié.
- Le dossier de démarrage est établi comme un emplacement de confiance.
UI personnalisée XML
<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab id="customTab" label="WebMerge">
<group id="CustomHelp" label="Map Tags">
<button id="mapper"
visible="true"
size="large"
label="Open Mapper"
screentip="Opens Mapping Engine"
onAction="LoadMappingGuide"
imageMso="FindDialog"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Connexion du ruban de l'interface utilisateur dans le module standard
Option Explicit
Sub LoadMappingGuide(ByVal Control As IRibbonControl) 'also tried without ByVal
'select business unit or automatically detect based on username against our database ...
Dim mappingForm As New mappingGuide
mappingForm.Show vbModal
End Sub
Code mappingForm (UserForm)
Option Explicit
Private Sub cancelButton_Click()
Unload Me
End Sub
Private Sub searchBox_Change()
generateList
Dim n As Long, index As Long
index = 0
For n = 0 To smartTagList.ListCount - 1
If InStr(1, smartTagList.List(index, 0), searchBox.Value, vbTextCompare) > 0 Then
index = index + 1
ElseIf InStr(1, smartTagList.List(index, 1), searchBox.Value, vbTextCompare) > 0 Then
index = index + 1
ElseIf InStr(1, smartTagList.List(index, 2), searchBox.Value, vbTextCompare) > 0 Then
index = index + 1
Else
smartTagList.RemoveItem (index)
End If
Next n
End Sub
Private Sub smartTagList_Click()
If smartTagList.ListIndex > -1 And smartTagList.Selected(smartTagList.ListIndex) Then
Dim smartyTag As String
smartyTag = smartTagList.List(smartTagList.ListIndex, 2)
Selection.Range.Text = smartyTag
End If
Unload Me
End Sub
Private Sub UserForm_Initialize()
generateList
End Sub
Private Sub generateList()
'replace with code to get values from database
Dim fields() As String
Dim descriptions() As String
Dim smartyTags() As String
fields = Split("Producer Name,Producer Address,Producer City,Producer State,Producer Zip,Insured Name,Insured Address,Insured City,Insured State,Insured ZIp,Risk Premium,TRIA Premium,Final Premium", ",")
descriptions = Split("Name of Producer,Address Line of Producer,City of Producer,State of Producer,Zip Code of Producer,Name of Insured,Address of Insured,City of Insured,State of Insured,ZIp of Insured,Total Premium for all risks excluding terrorism taxes and surcharges.,Premium resulting from acceptance of terrorism protection,Total Premium of quote / policy", ",")
smartyTags = Split("{$Producer Name},{$ProducerAddress},{$ProducerCity},{$ProducerState},{$ProducerZip},{$InsuredName},{$InsuredAddress},{$InsuredCity},{$InsuredState},{$InsuredZIp},{$RiskPremium},{$TRIAPremium},{$FinalPremium}", ",")
Dim i As Long
For i = LBound(fields) To UBound(fields)
With smartTagList
.AddItem
.List(i, 0) = fields(i)
.List(i, 1) = descriptions(i)
.List(i, 2) = smartyTags(i)
End With
Next
End Sub
Voici à quoi ressemble mon VBE avec .dotm
ouvert.