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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 643 fois - Téléchargée 30 fois

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

Ajouter un commentaire

Commentaires

cs_eldim
Messages postés
961
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
-
de rien
cs_IAORANA
Messages postés
9
Date d'inscription
vendredi 9 décembre 2005
Statut
Membre
Dernière intervention
15 juin 2007
-
Parfait ! Je comprend mieux. Encore merci pour ta réponse rapide.
cs_eldim
Messages postés
961
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
-
Salut ! c'est un exemple. il faut que tu l'adapte à ton code : modFicIni.fnRecupSD c'est le nom de ma fonction qui récupère le nom du lien à ajouter. elle n'est pas détaillée ici
cs_IAORANA
Messages postés
9
Date d'inscription
vendredi 9 décembre 2005
Statut
Membre
Dernière intervention
15 juin 2007
-
Salut Eldim,

Merci pour ton code qui m'interesse fortement. Je voudrai tester et, si présent, installer des références en fonction de l'ordinateur qui lance la base Access. Mais le sub sbAddRefSD bloque à l'instruction modFicIni.fnRecupSD (projet ou biblio introuvable : laquelle ?)

Peux-tu m'aider ?
cs_eldim
Messages postés
961
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
-
Salut !

non, malheureusement je n'ai rien trouvé pour réparer ça... si tu veux ajouter ça je conseil de tester ça sur un autre PC et l'enregistrer c'est ce qu'il y a de plus simple et de plus rapide... sinon il faut mettre "DAO" comme référence à ajouter.
Par contre dans ma solution c'est une référence fichier qu'il faut mettre donc il te faut aller chercher le fichier dans Programme Files/Fichiers Commun/Microsoft Shared/DAO/ puis tu choisi le nom de ta DLL et tu mets le chemin complet dans mon sbAddRefSD
Bonne chance

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.