Activation références VBA
Bonjour le Forum,
Je souhaiterais savoir s'il y a moyen d'activer automatiquement les références VBA d'un fichier lorsqu'il est ouvert sur un autre ordinateur, pour éviter les erreurs d'exécution.
ça m'arrive souvent lors de la création de nouvelle procédure (Macro) et que j'essaye de l'ouvrir sur mon PC au boulot, il beugue tout le temps.
Merci d'avance
Bonjour
Intéresse toi au early ou facst binding
Quelques liens https://www.automateexcel.com/vba/early-late-binding/
https://stackoverflow.com/questions/47056390/how-to-do-late-binding-in-vba
Bonjour,
Tu peux vérifier si la référence existe et sinon utiliser le LateBinding :
Option Explicit
Sub Test()
' Vérifier que référence suivante est activée (EarlyBinding)
' - Microsoft Scripting Runtime - {420B2830-E718-11CF-893D-00A0C9054228}
' et sinon utilise le LateBinding
'
Dim Référence
Dim IsEarlyBinding As Boolean
For Each Référence In ThisWorkbook.VBProject.References
If Référence.GUID = "{420B2830-E718-11CF-893D-00A0C9054228}" Then
IsEarlyBinding = True
Exit For
End If
Next
#If IsEarlyBinding Then
Dim u As Scripting.Dictionary
Dim m As Scripting.Dictionary
Set u = New Scripting.Dictionary
Set m = New Scripting.Dictionary
#Else
Dim u As Object
Dim m As Object
Set u = CreateObject("Scripting.Dictionary")
Set m = CreateObject("Scripting.Dictionary")
#End If
' suite du code
End SubCela marche pour toutes les librairies ?
Si non il y a une table des Référence.GUID ?
Il faut que la librairie soit installée sur le PC, tu peux alors l'ajouter.
Pour trouver le GUID, tu peux lister les librairies cochées dans un classeur (sinon il faut analyser le registre Windows HKEY_CLASSES_ROOT\TypeLib\ ) :
Option Explicit
Option Private Module
Sub AjoutRéférence()
'Exemple pour ajouter une référence
Dim Référence
For Each Référence In ActiveWorkbook.VBProject.References
If Référence.GUID = "{0002E157-0000-0000-C000-000000000046}" Then Exit Sub
Next
On Error GoTo fin
ActiveWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", Major:=5, Minor:=0
Exit Sub
fin:
On Error GoTo 0
MsgBox "Impossible d'activer la référence" & vbLf & _
"Microsoft Visual Basic for Applications Extensibility"
End
End Sub
Sub ListerRéferences()
' Liste les références du Projet
' 11/07/10 Patrice33740
'
Const nomMsg$ = "Lister les références"
Const errWbk$ = "Ouvrir un classeur avant d'éxécuter cette commande."
Const errRef$ = "Ce classeur ne contient aucune reference."
'
Dim wbkCible As Excel.Workbook 'Classeur à examiner
Dim wbkRapport As Excel.Workbook 'Rapport
Dim cell As Excel.Range 'Cellule rapport
Dim références As VBIDE.References 'Collection des références
Dim Référence As VBIDE.Reference 'Référence
'Vérifier le classeur
If Application.ActiveWorkbook Is Nothing Then
MsgBox errWbk, vbCritical, nomMsg
Exit Sub
End If
Set wbkCible = Application.ActiveWorkbook
'Vérifier la collection de références
Set références = wbkCible.VBProject.References
If références Is Nothing Then
MsgBox errRef, vbCritical, nomMsg
Exit Sub
End If
'Ajouter le rapport
Set wbkRapport = Application.Workbooks.Add(xlWBATWorksheet)
Set cell = wbkRapport.Worksheets(1).Range("A1")
cell.Offset(, 1).Formula = "Fichier"
cell.Offset(1, 1).Formula = "Chemin"
cell.Offset(, 2).Formula = wbkCible.Name
cell.Offset(, 2).Font.Bold = True
cell.Offset(1, 2).Formula = wbkCible.Path
Set cell = cell.Offset(3)
'Titres de colonne
cell.Offset(, 0).Formula = "Name"
cell.Offset(, 1).Formula = "IsBroken"
cell.Offset(, 2).Formula = "FullPath"
cell.Offset(, 3).Formula = "GUID"
cell.Offset(, 4).Formula = "Minor"
cell.Offset(, 5).Formula = "Major"
cell.Offset(, 6).Formula = "BuiltIn"
cell.Offset(, 7).Formula = "Description"
cell.CurrentRegion.Font.Bold = True
Set cell = cell.Offset(1)
'Lister les propiétes des références
For Each Référence In références
On Error Resume Next
cell.Offset(, 0).Formula = Référence.Name
cell.Offset(, 1).Formula = Référence.IsBroken
cell.Offset(, 2).Formula = Référence.FullPath
cell.Offset(, 3).Formula = Référence.GUID
cell.Offset(, 4).Formula = Référence.Minor
cell.Offset(, 5).Formula = Référence.Major
cell.Offset(, 6).Formula = Référence.BuiltIn
cell.Offset(, 7).Formula = Référence.Description
On Error GoTo 0
Set cell = cell.Offset(1)
Next Référence
cell.CurrentRegion.EntireColumn.AutoFit
End SubRE
Merci
Le souci c'est pour les librairies qui change d'une version Office à une autre... C'est bien de pouvoir vérifier
Woaw, c'est magnifique !!!
Si je comprends bien il faut mettre ce code au début des procédures pour que la vérification des références soit faites.