Activation/Désactivation de modules complémentaires personnels via VBA
Bonjour,
Je cherche en vain le moyen de programmer en VBA Excel 2010, à l'ouverture d'un classeur, la désactivation des modules complémentaires personnels (xlsam).
Mon problème est que je travaille sur un classeur Excel, avec beaucoup de formules, dont certaines sont définies par mon module personnel activé. Or pour rendre partageable ce classeur en réseau avec mes collègues, j'ai préféré intégrer les fonctions personnelles VBA définies dans le module xslam personnel. Pour éviter, dans mes formules de feuilles Excel, de voir apparaître le chemin de l'emplacement du module complémentaire personnel xlsam devant mes fonctions personnelles (existantes dans le xlsam et dans mon code VBA des modules intégrés à mon classeur xlsm) plutôt que le nom seul de la fonction utilisée sans aucun chemin, je dois penser à vérifier, avant le chargement de mon classeur xlsm, que le module complémentaire personnel xlsam est bien désactivé (dans les options Fichier/Options/Compléments/Atteindre les compléments Excel).
Si je ne pense pas à faire cela et que le module complémentaire personnel est malencontreusement activé, toutes mes formules faisant appel aux fonctions VBA définies dans le module complémentaire se retrouvent affichées avec le chemin du module complémentaire ! Si je ne fait pas gaffe et que j'enregistre, je suis bon pour un sacré nettoyage de toutes les formules du classeur...
Donc ma question est de savoir s'il est possible de coder en VBA la désactivation de mon module complémentaire personnel xlsam à l'ouverture du classeur xlsm.
J'ai essayé la solution ci-dessous, mais quelque-chose ne marche pas ou bien ce n'est pas la bonne méthode...
Voici mon code, implémenté dans l'objet du classeur thisWorkbook:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
Option Explicit
Option Base 0
Public Sub DesactiverMesMacrosComplementaires()
Dim xlam$, titre$, chemin$
On Error GoTo sortie
chemin = "C:\Users\pjebeily\AppData\Roaming\Microsoft\AddIns"
xlam = chemin & "\MacroComplementaires_Paul.xlsam"
titre = "MacroComplementaires_Paul"
If Application.AddIns(titre).Installed Then
Workbooks(xlam).Close
Application.AddIns(titre).Installed = False
End If
Exit Sub
sortie:
MsgBox "Macro complémentaire " & titre & " déjà désactivée..."
End Sub
Public Sub ActiverMesMacrosComplementaires()
Dim xlam$, titre$, chemin$
On Error GoTo sortie
chemin = "C:\Users\pjebeily\AppData\Roaming\Microsoft\AddIns"
xlam = chemin & "\MacroComplementaires_Paul.xlsam"
titre = "MacroComplementaires_Paul"
If Not (Application.AddIns(titre).Installed) Then
Workbooks.Open xlam
Application.AddIns(titre).Installed = True
End If
Exit Sub
sortie:
MsgBox "Macro complémentaire " & titre & " déjà activée..."
End Sub
Private Sub Workbook_Open()
DesactiverMesMacrosComplementaires
End Sub |
Son exécution plante sur la ligne
Code:
Workbooks(xlam).Close
. Si quelqu'un a une idée...
@+
Paul
[XL-2010] Activation/Désactivation de modules complémentaires personnels via VBA
Hello,
Je pense que je devais être un peu fatigué ce jour là.
La solution est en fait très simple. Il suffit de jouer sur la propriété "Installed" de l'addin dont on connait le titre. Cela donne (en chargeant ce code sous l'élément "thisWorkbook"):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
Option Explicit
Option Base 0
Public Sub Gere_MacrosComplementaires(titreMacroComplementaire As String, chargement As Boolean)
On Error GoTo sortie
With Application.AddIns2(titreMacroComplementaire)
If .Installed = Not (chargement) Then
.Installed = chargement
Else
MsgBox "Macro complémentaire " & titreMacroComplementaire & " déjà " & IIf(chargement, "chargée", "déchargée")
End If
End With
Exit Sub
sortie:
MsgBox "Macro complémentaire " & titreMacroComplementaire & " non trouvée..."
End Sub
Private Sub Workbook_Open()
Call Gere_MacrosComplementaires("MacroComplementaires_Paul", False)
End Sub |