Ajout/suppression d'une référence en cours d'exécution dans excel

Contenu du snippet

Ajouter une référence à un projet VB EXCEL en cours d'exécution. C'est util lorsque l'on doit ajouter une référence à un projet d'un autre classeur et/ou comme moi lorsque le menu "ajouter une référence" ne fonctionne plus... ("Erreur d'accès à la base de registration")

Source / Exemple :


Private Const csRefSD$ = "vbSD" 'Référence à ajouter (SD->Sous-Détail -> rapport avec mon projet)

Public Sub sbAddRefSD()
    On Error Resume Next
    Dim F$
    F$ = modFicIni.fnRecupSD
    If Trim$(F$) <> "" Then
        If Dir$(F$) <> "" Then
            If Application.VBE.ActiveVBProject.Protection = vbext_pp_locked Then
                SendKeys "{ESC}"
            End If
            Application.VBE.ActiveVBProject.References.AddFromFile F$
        End If
    End If
End Sub

Public Sub sbGestRefSD()
    On Error Resume Next
    Dim i%, N%, B As Boolean
    B = False
    N% = Application.VBE.ActiveVBProject.References.Count
    For i% = 1 To N%
        If Application.VBE.ActiveVBProject.References.Item(i%).Name = csRefSD$ Then
            If Application.VBE.ActiveVBProject.References.Item(i%).IsBroken Then
                Application.VBE.ActiveVBProject.References.Remove Application.VBE.ActiveVBProject.References.Item(i%)
                sbAddRefSD
                B = True
            End If
        End If
    Next
    If Not B Then
        sbAddRefSD
    End If
End Sub

Public Sub sbRemoveRefSD()
    On Error Resume Next
    Dim i%, N%
    N% = Application.VBE.ActiveVBProject.References.Count
    For i% = 1 To N%
        If Application.VBE.ActiveVBProject.References.Item(i%).Name = csRefSD$ Then
            Application.VBE.ActiveVBProject.References.Remove Application.VBE.ActiveVBProject.References.Item(i%)
        End If
    Next
End Sub

Public Sub sbForceRefSD()
    On Error Resume Next
    sbRemoveRefSD
    sbAddRefSD
End Sub

Public Function fnVerifSiRefSDExiste() As Boolean
    On Error Resume Next
    Dim R As Boolean
    R = False
    Dim i%, N%
    N% = Application.VBE.ActiveVBProject.References.Count
    For i% = 1 To N%
        If Application.VBE.ActiveVBProject.References.Item(i%).Name = csRefSD$ Then
            R = True
            Exit For
        End If
    Next
    fnVerifSiRefSDExiste = R
End Function

Conclusion :


suffit de lancer "sbGestRefSD"

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.