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 :

Ajouter une référence AddFromFile


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut Ajouter une référence AddFromFile
    Bonjour à tous

    J'ai l'impression d'être face à un bug de MS Excel 2016 (32 bits et 64 bits car j'ai testé les deux versions) : j'ai une application .xlsm qui utilise un fichier .xlam.
    Pour simplifier : Application.xlsm et Library.xlam.

    Ces fichiers se situent sur mon disque dur : C:\Dev\Application.xlsm et C:\Dev\Library.xlam

    Je dois copier mon fichier sur le dossier de "production" (E:\Prod\) mais bien sûr, il faut que le fichier .xlsm fasse référence au fichier .xlam du disque de production.

    En résumé :

    * J'ai C:\Dev\Application.xlsm qui référence C:\Dev\Library.xlam
    * Je copie les deux fichiers vers le disque E:\Prod\
    * J'ouvre le fichier E:\Prod\Application.xlsm pour modifier les références : ne plus utiliser C:\Dev\Library.xlam mais bien E:\Prod\Library.xlam
    - Je décoche C:\Dev\Library.xlam
    - J'ajoute E:\Prod\Library.xlam et c'est bien lui que je vois dans les références
    - Je clique sur OK pour fermer la fenêtre des références
    * Je sauve mon fichier E:\Prod\Application.xlsm

    Mais si j'y retourne, c'est toujours C:\Dev\Library.xlam qui est référencé.
    Je recommence, je retire l'ancien, je mets le nouveau, je vérifie, je ferme l'écran des références et j'y retourne de suite : c'est en effet bien C:\Dev\Library.xlam qui reste référencé.

    Je viens de passer quelques heures à écrire un code VBS pour faire toute ces opérations, par script, mais là encore, quand je fais le Remove suivi d'un AddFromFile("E:\Prod\Library.xlam"), bardaf, c'est toujours C:\Dev\Library.xlam qui est là.

    Le Remove a bel et bien fonctionné puisque si je ne fais pas de AddFromFile, je n'ai plus ma référence.

    J'ai le sentiment que Excel utilise un "cache" : il voit que le mot "Library" lui est connu et il utilise la dernière référence utilisée ou quelque chose du genre.
    Cela parce que si je renomme E:\Prod\Library.xlam en E:\Prod\DUMMY_Library.xlam (je change donc le nom de la librairie sur le disque), tout est bon. Plus de phénomène de "cache".

    Auriez-vous une piste s'il vous plaît ?

    Est-ce qu'il y a un moyen de forcer le "refresh" de la liste des références ?

    Merci.

  2. #2
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour

    Personne ? Une piste quelconque pour solutionner ce problème de cache ?

    Merci.

  3. #3
    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,

    /!\ j'ai pas testé !!! mais si tu veux automatiser le teste et la mise à jour essai d'ajouter un truc du genre :

    dans le code de thisworkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Open()
        With Worksheets("Feuil1").Range("A1")
            'si la cellule n'est pas vide c'est qu'on a un addin à activer
            If Not .Value = "" Then Application.AddIns(.Value).Installed = True
            .Value = "" 'on efface
        End With
    End Sub
    dans un module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub VerifAddin()
    Dim NouveauChemin As String
        With Application.AddIns("Euro Currency Tools")
            NouveauChemin = "d:\Program Files (x86)\Microsoft Office\Root\Office16\Library"
            If Not .Path = NouveauChemin Then 'path en lecture seul pour Addins()
                If .Installed Then .Installed = Not .Installed
                Application.AddIns.Add NouveauChemin & "\" & .Name
                Worksheets("Feuil1").Range("A1").Value = "Euro Currency Tools" 'pour l'exemple je propose la cellule A1 de la feuille 1 a toi de voir quel sera la meilleur cellule
                MsgBox "vous devez redémarrer excel pour appliquer les changements.", vbOKOnly + vbInformation
            End If
        End With
    End Sub
    une petite explication quand même : l'idée c'est de vérifier le chemin de ton addin avec la sub VerifAddin si le chemin attendu n'est pas le bon on écrase l'existant avec le nouveau
    Mais pour que ce changement soit pris en compte il faut redémarrer excel ce qui explique le code dans thisworkbook
    Je le redit ce n'est qu'une proposition je n'ai rien testé !!!

    Edit: attention quelques correction dans les macros... mais toujours pas testées

  4. #4
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour Phil et merci pour ta réponse, ton temps et le code.

    Je pense toutefois que cela ne réponds pas à ma question qui est un souci de "cache" (je ne saurais utiliser un autre mot); pour simplifier :

    * Mon fichier Excel fait une référence vers c:\DEV\addin.xlam (et tout fonctionne comme attendu)
    * Par programmation externe (un script VBS qui lance Excel en automation);
    - J'ouvre mon fichier Excel
    - Je supprime le lien vers c:\DEV\addin.xlam
    - (j'affiche la liste des références utilisées; addin.xlam a bien disparu; comme souhaité)
    - J'ajoute un lien vers z:\PROD\addin.xlam
    - (j'affiche la liste des références utilisées; addin.xlam est bien référencé comme devant provenir de z:\PROD)
    - Je sauve le fichier (tout est supposé OK) mais non, si je l'ouvre à nouveau, c'est toujours c:\DEV\addin.xlam qui est référencé

    C'est "comme si" il a retenu que addin.xlam est un addin localisé sur C:.

    Si je "triche" en utilisant plutôt z:\PROD\addin_PROD.xlam càd si je change le nom du fichier, mon code fonctionne, le fichier est bien adapté.

    Mais cela me force alors à modifier le nom de mon addin (j'en ai plusieurs) et donc d'avoir une version développement (addin.xlam), de user-acceptance (addin_uat.xlam) et de production (addin_prod.xlam). Ce n'est pas vraiment le but de multiplier ainsi mes fichiers.

  5. #5
    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
    Bah je ne saurais pas en dire plus. Juste que par macro j'ai noté que le référencement aux compléments se passait mieux.
    Surtout en cas de modif. enfin... jusqu'à preuve du contraire.
    Désolé de ne pouvoir t'aider plus.

  6. #6
    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
    oui bon effectivement cela montre qu’excel garde une trace. Du coup pas certain que même par macro cela fonctionne...

Discussions similaires

  1. ajouter une référence
    Par Invité dans le forum Access
    Réponses: 4
    Dernier message: 18/01/2007, 14h26
  2. Dois-je ajouter une référence en particulier
    Par Soph70 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/08/2006, 03h12
  3. Ajouter une référence
    Par Neuromancien2 dans le forum Access
    Réponses: 2
    Dernier message: 18/07/2006, 16h28
  4. Ajouter une référence dans un runtime
    Par rogger dans le forum Runtime
    Réponses: 13
    Dernier message: 07/12/2005, 17h20

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