IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment désactiver un complément COM avec une macro ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Laboratoire
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Laboratoire
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Par défaut Comment désactiver un complément COM avec une macro ?
    Bonjour,

    Je cherche à désactiver un complément COM via une macro.
    Qqun a-t-il une solution ?

    Par avance merci.
    Sulfuro

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    C'est aussi simple que ça.

    @+

  3. #3
    Candidat au Club
    Homme Profil pro
    Laboratoire
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Laboratoire
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Par défaut
    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

  4. #4
    Invité
    Invité(e)
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Dernière modification par Invité ; 19/11/2014 à 16h52.

Discussions similaires

  1. [XL-2003] Récupérer une valeur via COM (avec une macro sur la cellule)
    Par a028762 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/06/2010, 17h23
  2. Comment effectuer un tri alphabetique avec une macro
    Par alexistak dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 14/02/2008, 18h32
  3. Comment remplir une liste déroulante avec une macro sans doublons
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/06/2007, 18h34
  4. [VBA-E] Comment remplir une comboBox avec une macro
    Par Tchupacabra dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/04/2007, 11h16
  5. Réponses: 3
    Dernier message: 23/09/2006, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo