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

VBA Access Discussion :

Exécuter une macro Excel depuis du code VBA [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Par défaut Exécuter une macro Excel depuis du code VBA
    Bonjour,

    Dans une procédure VBA, je voudrais déclencher l'exécution d'une macro Excel.

    Le début de ma macro Excel est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Masquer_Ligne_nulle()
    ' Sur la feuille "Projet" sélectionnée,
    ' on doit masquer les lignes dont les totaux sont à 0
     
    ' permet de ne pas mettre à jour l'écran au fur et à mesure ce qui gagne du temps
     
      Application.ScreenUpdating = False
     
      Sheets("Projet").Select
     
     ' affichage de toutes les lignes au départ de la feuille "Export devis"
     '----------------------------------------------------------------------
      Rows("11:106").Select
      Selection.EntireRow.Hidden = False
    Je lance cette macro depuis ma procédure VBA comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        objsheet.Run "Masquer_Ligne_nulle"
    Mais au résultat, cela ne fonctionne pas. J'ai une page Excel "noire" et impossible d'activer les boutons Excel.

    Avez vous une idée d'où est mon erreur ?

  2. #2
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 919
    Par défaut
    Plus que ton code Excel, c'est savoir où se trouve ta macro dans Excel et le code Access que tu utilises pour récupérer l' "objsheet".
    Dans Excel si ta macro dans un worksheet module ou un workbook module, il n'est pas accessible par Access car ces modules ont un accès privé.
    Si c'est le cas déplace ta macro dans un module normal non marqué avec "Option private module" et marque ta fonction en "Public".

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Par défaut
    J'ai suivi tes conseils et l'ai déclaré Public 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
    13
    14
    Public Function Masquer_Ligne_nulle()
    ' Sur la feuille "Projet" sélectionnée,
    ' on doit masquer les lignes dont les totaux sont à 0
     
    ' permet de ne pas mettre à jour l'écran au fur et à mesure ce qui gagne du temps
     
      Application.ScreenUpdating = False
     
      Sheets("Projet").Select
     
     ' affichage de toutes les lignes au départ de la feuille "Export devis"
     '----------------------------------------------------------------------
      Rows("11:106").Select
      Selection.EntireRow.Hidden = False
    puis modifié mon code VB comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objApp.Run "Masquer_Ligne_nulle"
    Mais le résultat est le même

  4. #4
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 919
    Par défaut
    Si tu commençais par une macro toute simple sans screeupdating=false, genre MsgBox "Test" ?
    Et puis ce qui est important c'est aussi de nous montrer ton code Access (plus que juste le run)

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Par défaut
    Faire plus simple, je veux bien mais
    1. j'ai un code Access qui fonctionne bien et qui génére une feuille Excel conforme aux attentes
    2. j'ai une macro dans ma feuille Excel, activée par un bouton et qui fournit le résultat attendu

    Je cherche donc à simplifier le rôle de l'utilisation en lui évitant la 1ère activation d'un bouton.

    Mon code VB continue a bien fonctionner après appel de la macro Excel, mais c'est le résultat Excel qui n'est plus bon.

    Que veux tu voir dans le code VB, pas que je ne veux pas le montrer mais il fait quelques dizaines de lignes ?

  6. #6
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 919
    Par défaut
    Quand je dis faire plus simple, c'est uniquement dans un 1er temps pour ne pas multiplier les raisons d'erreurs. Si tu écris une autre macro VB qui fait juste un MsgBox, tu peux débogger la connexion Access-Excel. Quand ça fonctionne tu te reconnectes sur la bonne macro.
    Ce qui serait intéressant dans ton code Access c'est de voir comment tu construis ton objet objsheet, par exemple et tout ce que tu fais avec et qui sera susceptible d'impacter le Run(), qui en soit fonctionne nickel.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/09/2019, 10h50
  2. [Automation] Exécution d'une macro Excel depuis MATLAB
    Par snake-dam dans le forum MATLAB
    Réponses: 1
    Dernier message: 24/12/2014, 09h33
  3. [AC-2003] Exécuter une macro Excel depuis Access
    Par tarnx dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/12/2009, 13h16
  4. Lancer une macro Excel depuis Access
    Par pascal913 dans le forum Access
    Réponses: 12
    Dernier message: 31/07/2006, 15h31
  5. Lancer une macro Excel depuis Access
    Par marcobosio dans le forum Access
    Réponses: 6
    Dernier message: 05/06/2006, 20h51

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