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

0/5 (7 avis)

Snippet vu 11 953 fois - Téléchargée 32 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 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
15 juin 2007 à 10:03
de rien
cs_IAORANA Messages postés 9 Date d'inscription vendredi 9 décembre 2005 Statut Membre Dernière intervention 15 juin 2007
15 juin 2007 à 09:50
Parfait ! Je comprend mieux. Encore merci pour ta réponse rapide.
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
15 juin 2007 à 09:44
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
15 juin 2007 à 08:49
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 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
15 mars 2007 à 08:06
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.