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 :

Pb après transfert Module interne vers module complémentaire .xlam [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 14
    Par défaut Pb après transfert Module interne vers module complémentaire .xlam
    Bonjour,
    Après des recherches sur le Net je reste bloqué sur la situation suivante :
    Contexte :
    Le développement étant terminé je compte placer le module de la feuille courante dans un fichier externe .xlam afin de pouvoir :
    - le mettre à jour plus facilement puisque la feuille est dupliquée sur une trentaine de PC via TSE
    - tout en ne perturbant pas les données inscrites par les utilisateurs sur chacune de ces feuilles (durée de vie de la feuille : un an puisqu'il s'agit de noter les présences sur l'année).

    Le module externe est bien chargé en lançant Excel (visible dans la fenêtre de lancement ... 100%) et ne perturbe pas l'utilisation d'un autre classeur Excel.
    En ouvrant le classeur qui utilise les fonctions du module il y a un message : Erreur de compilation dans le module caché : ThisWorkBook ....
    En plaçant le module dans le classeur tout redevient immédiatement correct : plus d'erreur sans aucune modification de programmation ou de paramétrage d'Excel ...

    Mais, vous l'avez bien compris, ce n'est pas le but recherché pour la portabilité du projet.

    Questions :
    Que se passe-t-il ? Comment corriger cette "liaison" vers le module externe ?
    Faut-il indiquer quelque chose de spécifique pour que la portée des fonctions / routines soit correct vers le module externe ?

    Je vous remercie de votre aide.
    Frantz

    Notes techniques :
    Développement sous Excel 2013.
    Ai déjà utilisé des modules externes qui fonctionnent et qui sont placés au même endroit, à savoir : C:\Users\Frantz\AppData\Roaming\Microsoft\AddIns
    Le complément est bien actif
    Celui pour l'euro n'est pas coché

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Commence par regarder si tu n'as pas de lignes avec thisworkbook qui traînent.


    Thisworkbook c'est le classeur qui contient la macro. Quand tu déménages ta macro t'un classeur à un autre, et une macro complémentaire c'est un classeur, le Thisworkbook n'est plus le même.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 14
    Par défaut
    Il y a effectivement des lignes avec Thisworkbook.save ou Thisworkbook.saved = true et je les ai modifiées en Activeworkbook afin de pointer vers le classeur de données.
    Mais cela ne change rien : le message à l'ouverture est toujours le même.

    Il y a un Thisworkbook qui est dans le classeur des données. Il y en a un autre dans le classeur du module.

    Lorsque ce classeur s'ouvre il y a une routine Private Sub Workbook_Activate() située dans le ThisWorkbook de ce classeur qui appelle une routine contenue dans le module que j'ai déplacé.
    Le message indique donc bien une erreur de compilation puisqu'il n'y a plus de module avec cette routine dans le classeur de données car elle est transférée dans le classeur complémentaire .xlam

    D'autre part, mais c'est lié, il y a aussi une erreur de compilation lorsque l'on active par exemple un bouton du classeur qui ouvre un USF qui est aussi situé dans le classeur complémentaire. Le message indique "Impossible d'exécuter la macro 'Nom_du_classeur!Nom_de_la_macro'. Il est possible qu'elle ne soit pas disponible dans ce classeur ! Effectivement Nom_de_la_macro est dans le module externe (et ce module est visible bien sûr, mais VBA ne peut l'atteindre depuis le classeur appelant)

    La question est comment faire le lien avec le module "externalisé" qui lui n'a pas dans son "Thisworkbook", mais effectivement il y a deux "Thisworkbook" puisqu'il y a deux classeurs.
    Merci de m'éclairer sur la mise en place de ce "lien" vers ce module externe.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 14
    Par défaut
    En fait j'ai trouvé ce qui manque dans la littérature anglophone.
    Ceci est basé sur Call qui doit être remplacé par Application.Run en spécifiant le nom du classeur xlam
    Ceci est à faire dans tout le classeur des données. La partie module complémentaire n'est pas impactée.
    Ceci doit aussi être fait sur les appels de macros associés à des boutons bien sûr.
    En espérant que cela servira car il me semble que l'externalisation du VBA est une nécessité pour un projet multi-utilisateurs en plaçant le module à un seul endroit sur le serveur TSE, c'est vraiment pratique : Mise à jour dans un seul dossier ne nécessitant qu'une réouverture du fichier de l'utilisateur pour être à jour !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Tu pouvais placer dans un module standard de ton xlam une variable public
    Public This as worbook!

    Et sur la méthode open de ton fichier Set This = Thisworkbook!

    Mais en général les xlam ne contiennent que des méthodes génériques!

    Comme public Sub SauverFicher(Wb as worbook)

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

Discussions similaires

  1. [AC-2010] probleme de doublement editions apres transfert de 2003 vers 2010
    Par titisoft dans le forum Modélisation
    Réponses: 3
    Dernier message: 16/09/2011, 19h21
  2. Connection RS485 vers Modul Modbus
    Par mat-tech dans le forum Automation
    Réponses: 31
    Dernier message: 17/04/2009, 17h47
  3. Création de fenêtre interne et modulable
    Par akrogames dans le forum Ext JS / Sencha
    Réponses: 4
    Dernier message: 09/04/2008, 09h54
  4. Php de cgi vers module
    Par Jexx dans le forum Apache
    Réponses: 4
    Dernier message: 08/08/2006, 11h57
  5. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15

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