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

VBA Discussion :

Vérifier l'activation d'une référence [Trucs & Astuces]


Sujet :

VBA

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 33
    Points : 17
    Points
    17
    Par défaut Vérifier l'activation d'une référence
    Bonjour,

    Je voudrais savoir si il existerait un moyen pour vérifier, à partir du code, si une référence est activée et, si possible, de l'activer si ce n'est pas le cas.

    Merci d'avance

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Le code va différer selon que tu travailles avec VBA pour Access, Excel, Word, PowerPoint.

    D'une façon générale, je conseille de
    1. tester si la référence est active
    2. Si elle ne l'est pas, l'activer.

    Cela peut se faire au moyen d'une fonction et d'une procédure.
    La fonction de test demande le nom de la référence. La procédure demande le nom du fichier, éventuellement avec son chemin complet (à ma connaissance,facultatif lorsque ce chemin se trouve dans l'arborescence de c:\windows)

    ACCESS
    1. Fonction de test de référence active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function ReferenceActive(Nom As String) As Boolean
        Dim i As Integer
        Dim NbreRef As Integer
     
        NbreRef = Application.VBE.ActiveVBProject.References.Count
     
        For i = 1 To NbreRef
            If Application.VBE.ActiveVBProject.References(i).Name = Nom Then
                ReferenceActive = True
                Exit Function
            End If
        Next i
    End Function
    2. Procédure d'activation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub ActiverReference(NomFichier As String)
        Application.VBE.ActiveVBProject.References.AddFromFile NomFichier
    End Sub
    EXCEL, WORD, POWERPOINT
    Pour Excel, Word ou PowerPoint, c'est la même démarche, mais les références font partie de l'objet actif, soit:
    Pour Excel, ThisWorkbook
    Pour Word, ThisDocument
    Pour PowerPoint, ActivePresentation
    Voici le code pour Excel. Pour les autres applications, il faudra remplacer ThisWorkbook par l'objet actif
    1. Fonction de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function ReferenceActive(Nom As String) As Boolean
        Dim i As Integer
        Dim NbreRef As Integer
     
        NbreRef = ThisWorkbook.VBProject.References.Count
     
        For i = 1 To NbreRef
            If ThisWorkbook.VBProject.References(i).Name = Nom Then
                ReferenceActive = True
                Exit Function
            End If
        Next i
    End Function
    2.Procédure d'activation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub ActiverReference(NomComplet As String)
        ThisWorkbook.VBProject.References.AddFromFile NomComplet
    End Sub
    Utilisation de la fonction et de la procédure
    Attention! La procédure d'activation renvoie une erreur si la référence est déjà active. Dès lors, je propose le code suivant, qui fonctionne dans tous les cas, y compris Access. Par exemple, pour tester et activer le scripting Runtime
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If Not ReferenceActive("scripting") Then ActiverReference "scrrun.dll"
    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup, tout marche

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 1
    Points : 2
    Points
    2
    Par défaut controle version
    J'ai amélioré les conditions avec la version utilisé car l'emplacement des référence change selon les version (voir table http://officesystemaccess.seneque.ne...constantes.htm)

    De plus ma version la condition if Not ne résout pas le problème j'ai 'solutionné' par une mise en variable .... je suis pas développeur ...


    Si cela peut aider quelqu'un sait on jamais

    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
     
    Sub Workbook_Open()
     
     'TESTE SI LA REFERENCE WORD EST PRESENTE.
        q = ReferenceActive("Word")
     
        'SI BONNE VERSION
        If Verssion = 10 Or 11 Or 12 Then
     
     
                'SI PAS PRESENTE
                If q = False Then
                    ThisWorkbook.VBProject.references.AddFromFile "MSWORD.OLB" 'ON LA MET
                    MsgBox "MIS"
                    Else
                    'Sinon on l'enleve et la remet
                    ThisWorkbook.VBProject.references.remove ThisWorkbook.VBProject.references("Word")
                    ThisWorkbook.VBProject.references.AddFromFile "MSWORD.OLB" 'ON LA MET
                    MsgBox "REMIS"
                End If
     
     
        Else
        'SINON on dit pas possible et quitte
         MsgBox "Attention Votre version d'Excel ne supportera pas l'export Word. Cette fonction marche à partir de la version 2002."
     
         End If
     
    End Sub

  5. #5
    Membre régulier
    Homme Profil pro
    Apprenti GEII
    Inscrit en
    Janvier 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprenti GEII
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 83
    Points : 109
    Points
    109
    Par défaut /_\ Care
    Bonjour je me permets de relancer ce post pour une petite précision, le code de Pierre fonctionne à merveille, cependant plusieurs personnes du net l'ont utilisé, en vain...

    juste dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Not ReferenceActive("scripting") Then ActiverReference "scrrun.dll"
    faire attention à la majuscule du "scripting"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not ReferenceActive("Scripting") Then ActiverReference "scrrun.dll"
    en effet sans la majuscule ReferenceActive est systématiquement à false, que la référence soit activée ou non
    => .name = "scripting" <> .name = "Scripting"

    si cela peut aider certains... bonne journée

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 266
    Points
    34 266
    Par défaut
    Salut,

    autre solution, mettre à jour le code de la fonction pour s'affranchir de la casse de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ThisWorkbook.VBProject.References(i).Name = Nom Then
    devenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Ucase(ThisWorkbook.VBProject.References(i).Name) = Ucase(Nom) Then
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Membre régulier
    Homme Profil pro
    Apprenti GEII
    Inscrit en
    Janvier 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprenti GEII
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 83
    Points : 109
    Points
    109
    Par défaut
    Oui parfait

  8. #8
    Membre actif Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Points : 209
    Points
    209
    Par défaut
    Bonjour à tous, bonjour Pierre,

    Ma question va paraître bête probablement mais dans le nom de la référence et le nom du chemin je ne vois pas quoi mettre.
    Je souhaite avoir les références suivantes :
    Lotus Notes Automation Classes
    notes32.tlb
    &
    Lotus Domino Objects
    domobj.tlb
    Le problème vient du fait que VB n’accepte pas l'écriture ci dessus.

    Quel "Nom" ou "NomComplet" doit-on mettre dans la fonction et le sub ?

    Merci beaucoup,
    Pastis.vi
    "Il est toujours plus facile de réaliser un travail que d'expliquer pourquoi on l'a fait." Martin Van Buren
    "Il y a ceux qui ont des résultats, et ceux qui ont des excuses." Moi

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 266
    Points
    34 266
    Par défaut
    Salut,

    le NomComplet correspond à son emplacement sur la machine, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\temp\meslibrairies\malibrairie.ocx"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérifier l'activation d'une référence
    Par polemos dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/11/2011, 16h06
  2. [XL-2007] Activer une référence
    Par EmmanuelleC dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/09/2011, 09h02
  3. Faut il activer une référence ?
    Par Souri84 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/01/2010, 19h12
  4. Activer automatiquement une référence si elle n'est pas activée?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/10/2007, 17h27
  5. Activer une référence par le code
    Par repié dans le forum Général VBA
    Réponses: 12
    Dernier message: 28/06/2006, 16h12

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