Bonjour,
Je cherche à désactiver un complément COM via une macro.
Qqun a-t-il une solution ?
Par avance merci.
Sulfuro
Version imprimable
Bonjour,
Je cherche à désactiver un complément COM via une macro.
Qqun a-t-il une solution ?
Par avance merci.
Sulfuro
Salut,
C'est aussi simple que ça.Code:
1
2
3
4
5
6
7
8 Sub COMAddInDeactivate(ProgID As String) Excel.Application.COMAddIns.Item(ProgID).Connect = False End Sub Sub COMAddInDeactivateTest() Call COMAddInDeactivate("xxx") End Sub
@+
Merci pour ta réponse 'Nouveau2' :O)
J'ai remplacé "xxx" par le nom du complément COM, en l'occurrence "IDBS XLfit" (si c'est le bon nom).
A l'exécution de la macro, MS VB dit "Erreur d'exécution '9': L'indice n'appartient pas à la sélection."
En mode débogage, la ligne "Excel.Application.COMAddIns.Item(ProgID).Connect = False" est surlignée
- pas le bon nom du complément COM ? Comment le trouver ?
- pas de droit de désactivation du complément ? (je peux le faire en passant par les menus)
Je débute en VBA, pas facile.
Sulfuro
Salut,
Tu as raison, pour le ProgID, c'est pas facile.
L'item du COMAddIns demande un ProgID (identifiant de programmation qui est censé être unique) en paramètre, plutôt que sa description (qui n'est pas obligatoire => il peut y avoir un ou des AddIns sans Description).
Tu peux le récupérer à partir de la description du complément:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 ' Trouve la 1ère occurence seulement à partir d'une description. ' Il peut y en avoir plusieurs identique. Function TryCOMAddInFind(Description As String, Out_COMAddIn As Office.COMAddIn) As Boolean Dim COMAddIn As Office.COMAddIn For Each COMAddIn In COMAddInCollection If StrComp(Description, COMAddIn.Description, vbTextCompare) = 0 Then TryCOMAddInFind = True Set Out_COMAddIn = COMAddIn Exit Function End If Next End Function ' Idem qu'au dessus Function COMAddInFind(Description As String) As Office.COMAddIn Call TryCOMAddInFind(Description, COMAddInFind) End Function ' Imprime toutes les descriptions et ProgID Sub COMAddInCollectionPrint() Dim COMAddIn As Office.COMAddIn If COMAddInCollection.Count > 0 Then For Each COMAddIn In COMAddInCollection Debug.Print "-------------------------------------" Debug.Print "Description : " & COMAddIn.Description Debug.Print "Identifiant de programmation (ProgID) : " & COMAddIn.ProgID Next Debug.Print "-------------------------------------" Debug.Print "il y a " & COMAddInCollection.Count & " compléments COM." Debug.Print "-------------------------------------" End If End Sub ' Renvoie la collection des Complément COM de l'application entière Function COMAddInCollection() As COMAddIns Set COMAddInCollection = Excel.Application.COMAddIns End Function ' Active un Complément COM Sub COMAddInActivate(ProgID As String) Excel.Application.COMAddIns.Item(ProgID).Connect = True End Sub ' Désactive un Complément COM Sub COMAddInDesactivate(ProgID As String) Excel.Application.COMAddIns.Item(ProgID).Connect = False End Sub ' Sous-routine à appeler pour le test. Sub COMAddInDesactivateTest() Dim COMAddInFound As Office.COMAddIn ' Regarde dans la fenêtre d'exécution dans l'IDE (Ctrl + G) COMAddInCollectionPrint Stop ' Description du COMAddIn en 1er paramètre. If TryCOMAddInFind("", COMAddInFound) Then If COMAddInFound.Connect = True Then If MsgBox("Voulez-vous désactiver le complément '" & COMAddInFound.Description & "'", vbYesNoCancel) = vbYes Then Call COMAddInDesactivate(COMAddInFound.ProgID) End If End If If COMAddInFound.Connect = False Then If MsgBox("Voulez-vous activer le complément '" & COMAddInFound.Description & "'", vbYesNoCancel) = vbYes Then Call COMAddInActivate(COMAddInFound.ProgID) End If End If Else MsgBox "Aucun complément portant ce nom n'a été trouvé" End If Stop ' Remplace 'COMAddInCollection.Item(1)' ci-dessous par le ProgID ' qui correspond à ton complément COMAddIn trouvé dans la liste ' de la fenêtre d'éxécution. If COMAddInCollection.Count >= 1 Then If MsgBox("Le COMAddIn '" & COMAddInCollection.Item(1).Description & _ "' va être désactivé.", vbOKCancel) = vbYes Then Call COMAddInDesactivate(COMAddInCollection.Item(1)) End If End If End Sub