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 :

Vérifier qu'un AddIn est chargé [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Vérifier qu'un AddIn est chargé
    Bonjour à tous,
    je souhaiterais vérifier qu'un AddIn est chargé à l'ouverture d'un classeur.
    J'utilise ce code mais j'ai une erreur (Erreur d’exécution '9': L'indice n'appartient pas à la sélection).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Check()
     
        If AddIns("Le nom de mon AddIn").Installed = True Then
            MsgBox "Installé"
       Else
          MsgBox "L'AddIn n'est pas installé. Seule la consultation est possible."
            ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
        End If
     
    End Sub
    Voyez vous ou est l'erreur ?
    Bonne journée.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 005
    Points : 29 063
    Points
    29 063
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce ne serait pas superflu que tu indiques à quelle ligne ce message d'erreur s'affiche.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Aucune ligne en particulier malheureusement, j'ai juste ce message qui s'affiche.
    Si je rajoute On Error Resume Next je n'ai plus l'erreur mais qu'importe ce que je mets comme nom d'AddIn, le message Installé s'affiche.

  4. #4
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Essaie comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.AddIns.Item("Le nom de mon AddIn").Installed = True Then

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Toujours pareil, ne faudrait il pas faire un foreach sur chaque AddIn et le comparer au miens ? Mais comment obtenir la liste ?
    Merci

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 005
    Points : 29 063
    Points
    29 063
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un exemple de code pour lister le non des addins et s'ils sont installés ou pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim ad As AddIn
     For Each ad In AddIns
      Debug.Print ad.Name, ad.Installed = True
     Next
    Il y a effectivement une erreur qui est déclenchée avec ce test que tu as montré.
    On pourrait le détourner avec un ON ERROR

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je ferai comme ceci
    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
    Sub Test()
     
    Check "XYChartLabeler.xlam"
    End Sub
     
    Private Sub Check(ByVal AdiName As String)
    Dim Adin As AddIn
     
    If Not ThisWorkbook.ReadOnly Then
        For Each Adin In AddIns
            If Adin.Name = AdiName Then
                If Adin.Installed = True Then
                    MsgBox "Installé"
                Else
                    MsgBox "L'AddIn " & AdiName & " n'est pas installé. Seule la consultation est possible."
                    ThisWorkbook.Saved = True
                    ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
                End If
                Exit For
            End If
        Next Adin
    End If
    End Sub

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Malheureusement rien ne se produit que je mette un nom correct ou non.

    Toujours rien avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Workbook_Open()
        Dim ad As AddIn
        For Each ad In AddIns
            If ad.Application.AddIns.Item("Le nom de mon AddIn").Installed = True Then
               MsgBox "Installé"
             Else
                 MsgBox "L'AddIn n'est pas installé. Seule la consultation est possible."
                  ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
             End If
        Next
    End Sub
    Je sèche complétement là. Si vous avez des idées je suis tout ouie.

  9. #9
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    J'ai testé la code proposé (mais mis sur l'évènement Open du classeur)

    Testé avec 2 addins de chez moi
    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
    Private Sub Workbook_Open()
     
    Check "SOLVER.XLAM"
    'Check "XYChartLabeler.xlam"
    End Sub
     
    Private Sub Check(ByVal AdiName As String)
    Dim Adin As AddIn
     
    If Not ThisWorkbook.ReadOnly Then
        For Each Adin In Application.AddIns
            If UCase(Adin.Name) = UCase(AdiName) Then
                If Adin.Installed = True Then
                    MsgBox "AddIn " & AdiName & " installé"
                Else
                    MsgBox "L'AddIn " & AdiName & " n'est pas installé. Seule la consultation est possible."
                    ThisWorkbook.Saved = True
                    ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
                End If
                Exit For
            End If
        Next Adin
    End If
    End Sub

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Ça fonctionne en effet avec Check "SOLVER.XLAM" mais pas avec Check "XYChartLabeler.xlam", ni avec Check "Gestion Planning.vsto" qui est mon AddIn. Étrange non ?

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tes Addins sont référencés dans l'onglet Développeur > Compléments??

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Mon AddIn est dans Développeur -> Compléments COM. Et il est bien activé. mais le fichier est un vsto ça peut poser problème tu crois ?
    Mais c'est bizarre que ça ne marche pas avec Check "XYChartLabeler.xlam" de toute façon non ?

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 005
    Points : 29 063
    Points
    29 063
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Quand tu fais tourner ce code, ton addin est il reprit dans la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim ad As AddIn
     For Each ad In AddIns
      Debug.Print ad.Name, ad.Installed
     Next

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Rien ne s'affiche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub test()
    Dim ad As AddIn
     For Each ad In AddIns
      Debug.Print ad.Name, ad.Installed
     Next
    End Sub
    Désolé je ne connais pas grand chose en développement de macro j'ai peut être mal copié ton code.

  15. #15
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 005
    Points : 29 063
    Points
    29 063
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    L'instruction Debug.Print est une commande qui permet d'afficher ce qui suit dans la fenêtre d'exécution. Cela remplace avantageusement le MsgBox qui interrompt l'exécution du programme puisqu'il faut chaque fois répondre OK
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print ad.Name, ad.Installed
    est préférable à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ad.Name, ad.Installed
    pour déboguer un programme.
    Pour afficher la fenêtre d'exécution dans l'éditeur VBE
    Affichage/Fenêtre Exécution ou Ctrl+G

  16. #16
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Il s'agit d'un Complément COM. Analogiquement (on utilise la description au lieu du nom)
    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
    Private Sub Workbook_Open()
     
    'Check "VBA Code Cleaner 5.0"
    Check "Smart PDF Converter Excel Addin"
    End Sub
     
    Private Sub Check(ByVal cmAdDesc As String)
    Dim CmAd As COMAddIn
     
    If Not ThisWorkbook.ReadOnly Then
        For Each CmAd In Application.COMAddIns
            If UCase(CmAd.Description) = UCase(cmAdDesc) Then
                If CmAd.Connect Then
                    MsgBox "COM Add-In " & cmAdDesc & " installé"
                Else
                    MsgBox "COM AddIn " & CmAd & " n'est pas installé. Seule la consultation est possible."
                    ThisWorkbook.Saved = True
                    ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
                End If
                Exit For
            End If
        Next CmAd
    End If
    End Sub

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    @ corona
    Je comprends mieux merci à toi.

    @ mercatog
    Ca marche j'arrive à voir mon AddIn bien joué.
    En revanche ça ne marche pas si je mets un nom bidon. Je vais chercher d'où ça peut venir. Je mettrais en résolu quand j'aurais trouvé.
    Merci à vous.

  18. #18
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Fais ce test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Test()
    Dim CmAd As COMAddIn
     
    For Each CmAd In Application.COMAddIns
        Debug.Print CmAd.Description, CmAd.progID, CmAd.Connect
    Next CmAd
    End Sub
    Regarde mon précédent post #16 qui utilise la Description du COM Add-In

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Je viens d'éditer mon post j'avais malheureusement loupé le tiens.
    Pourrais-je avoir une explication sur les différents type de fichiers (XLAM, VSTO et XLL je crois) ou tout du moins un lien ?

  20. #20
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pour vérifier les 3 cas de figures
    1. COM existant et connecté
    2. COM existant mais non connecté
    3. COM inexistant

    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
    Private Sub Check(ByVal cmAdDesc As String)
    Dim Trouve As Boolean, Connecte As Boolean
    Dim CmAd As COMAddIn
    Dim Msg As String
     
    If Not ThisWorkbook.ReadOnly Then
        For Each CmAd In Application.COMAddIns
            If UCase(CmAd.Description) = UCase(cmAdDesc) Then
                Trouve = True
                Connecte = CmAd.Connect
                Exit For
            End If
        Next CmAd
     
        If Trouve And Connecte Then
            Msg = "COM Add-In " & cmAdDesc & " connecté"
        Else
            Msg = "COM AddIn " & cmAdDesc & " n'est pas " & IIf(Not Trouve, "installé", "connecté") & "." & vbNewLine & "Seule la consultation est possible."
            With ThisWorkbook
                .Saved = True
                .ChangeFileAccess Mode:=xlReadOnly
            End With
        End If
        MsgBox Msg
    End If
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Vérifier si une forme est chargée
    Par Herve_be dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 19/12/2013, 19h34
  2. Vérifier qu'un script est chargé
    Par aku84 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/04/2013, 00h08
  3. MASAPI - Vérifier si un fichier est chargé
    Par Rifton007 dans le forum ActionScript 3
    Réponses: 20
    Dernier message: 19/04/2011, 21h41
  4. Comment vérifier qu'une DLL est chargée
    Par JeanNoel53 dans le forum NetBeans
    Réponses: 4
    Dernier message: 14/10/2010, 17h47
  5. [Script] Vérifier si un module est chargé ?
    Par brolon dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 19/06/2008, 18h06

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