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"
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
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
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"
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