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 124
    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 124
    Points : 55 919
    Points
    55 919
    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?

  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
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 644
    Points : 34 352
    Points
    34 352
    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

  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

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 644
    Points : 34 352
    Points
    34 352
    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"

+ 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