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
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
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
2. Procédure d'activation
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
EXCEL, WORD, POWERPOINT
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
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
2.Procédure d'activation
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
Utilisation de la fonction et de la procédure
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
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
Ok?
Code : Sélectionner tout - Visualiser dans une fenêtre à part If Not ReferenceActive("scripting") Then ActiverReference "scrrun.dll"
"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...
---------------
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
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:
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 If Not ReferenceActive("Scripting") Then ActiverReference "scrrun.dll"
=> .name = "scripting" <> .name = "Scripting"
si cela peut aider certains... bonne journée
Salut,
autre solution, mettre à jour le code de la fonction pour s'affranchir de la casse de caractères :
devenant
Code : Sélectionner tout - Visualiser dans une fenêtre à part If ThisWorkbook.VBProject.References(i).Name = Nom Then
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
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 ClassesLe problème vient du fait que VB n’accepte pas l'écriture ci dessus.
notes32.tlb
&
Lotus Domino Objects
domobj.tlb
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
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager