IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

décocher une référence VBA manquante [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    PMO
    Inscrit en
    Août 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : PMO
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 66
    Par défaut décocher une référence VBA manquante
    Bonjour,
    J'utilise (avec des collègues) un tableau Excel avec des macros faisant intervenir des références VBA pour word et outlook
    Le problème est que désormais certains sont passés sous office 2016 et les autres sont restés en office 2010 et de ce fait quand quelqu'un qui est sous office 2016 enregistre le tableau cela entraine des erreurs de compilation pour ceux qui sont restés en office 2010
    Pour résoudre le problème, il suffit de décocher (dans l'environnement VBA) les cases commençant par MANQUANT dans la fenêtre des référence disponibles puis rajouter les bonnes référence.
    Je voudrais écrire une macro réalisant cette opération.
    Rajouter des références manquantes : je sais faire mais là où je bloque c'est l'équivalent de décocher les case "MANQUANT..."
    Si j'essaye de supprimer les référence, ça plante car justement elles sont en erreur
    Si quelqu'un avait une idée…
    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Bonjour,

    pour éviter d'en arriver la il est préférable de faire de la liaison retardée (Late Binding en anglais) au lieu de liaison anticipée.
    Dans ce cas la liaison avec la référence ce produira non pas lors de la compilation(pendant l'ouverture du fichier) mais lors de l’exécution de la macro.

    Donc dans un premier temps on évite l'erreur à l'ouverture. Ce qui permettra, si comme tu le souhaites, de lancer une macro qui vérifiera l’état des références et ce dès l’événement Workbook_open().

    Pour étayer mon propos je reprend les exemples de l'article ici : Early binding and late binding in Automation

    Edit: voir même comme dit dans l'article de ne pas référencer du tout !


    Code Liaison Anticipée, à éviter : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    ' Declare the object as an early-bound object
      Dim oExcel As Excel.Application
     
      Set oExcel = CreateObject("Excel.Application")
     
    ' The Visible property is called via the v-table
      oExcel.Visible = True


    Code Liaison Retardée, à préférer. : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ' No reference to a type library is needed to use late binding.
    ' As long as the object supports IDispatch, the method can 
    ' be dynamically located and invoked at run-time.
     
    ' Declare the object as a late-bound object
      Dim oExcel As Object
     
      Set oExcel = CreateObject("Excel.Application")
     
    ' The Visible property is called via IDispatch
      oExcel.Visible = True

    voir aussi l'aide VBA à propos de : Fonction CreateObject

    A+

  3. #3
    Membre confirmé
    Homme Profil pro
    PMO
    Inscrit en
    Août 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : PMO
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 66
    Par défaut
    Merci pour ta réponse rapide,
    Il va me falloir un peu de temps pour bien assimiler.

    Si j'ai bien compris l'article et tes codes il faut que je fasse en sorte que VBA (Excel) gère les liaisons avec Word et Outlook via des références par liaisons retardées au lieu des liaisons anticipées qui sont faites par défaut

    Pour ce faire, je crée un objet EXCEL.Application que j'aurais déclaré en tant que simple objet et non pas un objet de l'application Excel (ce qui fait la différence entre liaison retardée et liaison anticipée)
    Cette déclaration je la fais dans la partie THISWORKBOOK OPEN

    Mais après ?
    ça fait en sorte que si je rajoute les liens word et outlook, VBA se débrouille quelque soit la version Excel ??

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Citation Envoyé par Airthé Voir le message
    Cette déclaration je la fais dans la partie THISWORKBOOK OPEN
    non non pas dans THISWORKBOOK OPEN. mais comme tu le fais déjà... probablement dans un module.

    L'idée avec THISWORKBOOK OPEN était à propos d’une macro pour décocher les références manquantes et uniquement pour cela.

    A+

  5. #5
    Membre confirmé
    Homme Profil pro
    PMO
    Inscrit en
    Août 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : PMO
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 66
    Par défaut
    Finalement, j'ai trouvé une solution de contournement
    • Dans la procedure "Before Close" du classeur, je supprime les références Word et Outlook
    • Dans la procédure OPEN du classeur je les crée

    Et si tout va bien, à chaque ouverture la création (via le n° de Guid des références) des référence est forcément la bonne et comme elle est supprimée à l'enregistrement du classeur, il n'y a plus de MANQUANT à l'ouverture suivante

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Par défaut
    Bonjour Airthé,

    Pourriez-vous donner un exemple de code de suppression - et d'ajout - de référence ?
    Merci déjà.

  7. #7
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Bonjour,
    Il faut désactiver toutes référence à Word, Excel, Outlook,etc. Et utiliser la méthode CreateObject dans ton code !

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La lecture d'un billet que j'ai écrit sur le sujet et titré VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding vous aidera peut-être
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Par défaut
    Merci pour vos réponses.

    J'ai lu quelque part que le Early Binding s'exécutait plus rapidement. Et le code me semble plus explicite...
    Mais c'est vrai que dans un environnement multi-versions, c'est le brin...
    J'ai résolu ça en enlevant la référence en sortie de fichier et en l'ajoutant à l'ouverture, avec l'identifiant GUID de la référence.
    De la sorte, selon la version, la référence chargée est toujours la bonne. Ou devrait.

  10. #10
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Bonjour,
    Perso l'accès à vbproject interdit!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] Ajouter dynamiquement une référence
    Par jpharand dans le forum VBA Access
    Réponses: 23
    Dernier message: 16/04/2010, 23h28
  2. Ajouter une références dans VBA
    Par DPhBxl dans le forum VBA Access
    Réponses: 12
    Dernier message: 03/10/2008, 15h54
  3. Impossible de décocher une bibliothèque de référence
    Par Alain36 dans le forum VBA Access
    Réponses: 15
    Dernier message: 13/12/2007, 09h47
  4. [VBA]Changer automatiquement la version d'une référence
    Par mooh91 dans le forum VBA Access
    Réponses: 15
    Dernier message: 18/04/2007, 20h38
  5. Référence VBA manquante Access 2000
    Par p'tite Sandrine dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/11/2006, 13h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo