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 :

Insérer du code dans un classeur et l'exécuter


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 101
    Par défaut Insérer du code dans un classeur et l'exécuter
    Bonsoir,
    Voilà mon problème.
    J'utilise un programme A (écrit depuis MS Visual Studio) qui traite un fichier Excel pour le mettre en page. A un moment donné, l'utilisateur doit modifier le fichier Excel manuellement. Quand ça se produit le programme A écrit du code VBA dans le fichier Excel et s'arrête: c'est le programme B. Je voudrais qu'en plus le programme A lance l'exécution du programme B qui doit piéger l'évènement "Enregistrement du classeur" et relancer le programme A.
    J'ai compris comment on écrivait du code dans un classeur (merci à ceux qui ont écrit la FAQ et aux gens du forum aussi) en revanche comment dois-je m'y prendre pour l'exécuter? Dois-je écrire le code de telle manière qu'il s'exécute à l'ouverture du fichier Excel et fermer le fichier Excel pour le réouvrir et donc déclencher l'exécution du code? Merci et à+.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    est ce que tu dois obligatoirement créer une procedure evenementielle?


    l'exemple joint concerne Word, mais ça doit fonctionner sur le meme principe dans Excel:

    http://www.developpez.net/forums/sho...5&postcount=12


    un autre exemple pour declencher une procedure evenementielle ThisWorkbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Run "ClasseurTest.xls!ThisWorkbook.Workbook_Open"

    bonne journée
    michel

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 101
    Par défaut
    Bonjour.
    Bon alors j'arrive à écrire la macro (faut dire qu'avec le source c'était pas trop dur, merci SilkyRoad), par contre je n'arrive pas à la lancer, mais c'est peut être car c'est un procédure évènementielle non? Je continue de chercher. Ca c'est le code écrit par mon programme dans le module créé dans le classeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
      SaveAsUi = False
      Cancel = False
    End Sub
    Ca c'est le code de mon programme principal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Dim VBComp As Object
    Dim xl As Integer
    Set VBComp = wbExcel.VBProject.VBComponents.Add(1)
    With wbExcel.VBProject.VBComponents(VBComp.Name).CodeModule
        xl = .CountOfLines
        .InsertLines xl + 1, "Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)"
        .InsertLines xl + 2, "  SaveAsUi = False"
        .InsertLines xl + 3, "  Cancel = False"
        .InsertLines xl + 4, "End Sub"
        DoEvents
        appExcel.Run "Workbook_BeforeSave()"
        .DeleteLines 1, .CountOfLines
    End With
    wbExcel.VBProject.VBComponents.Remove VBComp
    A+

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 101
    Par défaut
    Bon ben c'est bon en fait y'a pas besoin de l'exécuter la macro, faut enlever la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    appExcel.Run "Workbook_BeforeSave()"
    Là ça fonctionne, quand on clique sur enregistrer, il se passe bien quelque chose, j'ai essayé avec une msgbox et elle apparaît.
    Merci encore et A+.

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    essai d'enlever le Private... .?

    sinon est tu sur de vouloir garder la derniére ligne de ton code principal qui est la pour effacer la macro..

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 101
    Par défaut
    je me suis emballé un peu vite tout à l'heure quand je disais que ça marchait. Ca marche à condition d'écrire dans ThisWorkbook:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Dim VBComp As Object
    Dim xl As Integer
    'Set VBComp = wbExcel.VBProject.VBComponents.Add(1)
    With wbExcel.VBProject.VBComponents("ThisWorkbook").CodeModule
         xl = .CountOfLines
         .InsertLines xl + 1, "Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)"
         .InsertLines xl + 2, "  SaveAsUi = False"
         .InsertLines xl + 3, "  Cancel = False"
         .InsertLines xl + 4, "   msgbox" & Chr(34) & "hello" & Chr(34)
         .InsertLines xl + 5, "End Sub"
         DoEvents
         'appExcel.Run "Workbook_BeforeSave()"
         '.DeleteLines 1, .CountOfLines
    End With
    'wbExcel.VBProject.VBComponents.Remove VBComp
    Pour la dernière ligne qui efface la macro je pense que je ne vais pas la garder car comme le précise ce document, comme mon programme et Excel ne sont pas des applications synchrones, en laissant cette ligne je risque de détruire la macro que je viens d'écrire dans le classeur avant même qu'elle n'est servi.
    Merci pour cette remarque bbil.

  7. #7
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    tu n'as pas répondu à ma premiere question

    est ce que tu dois obligatoirement créer une procedure evenementielle
    il y a peut etre une autre façon de faire mais il faudrait que tu réexpliques en détail le traitement appliqué dans ton classeur


    michel

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

Discussions similaires

  1. [PHP 5.3] Insérer du code dans une balise SPAN via un include
    Par beegees dans le forum Langage
    Réponses: 0
    Dernier message: 05/10/2010, 10h25
  2. [XL-2007] Créer du code dans le classeur A à partir d'un autre classeur B
    Par geo909 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/05/2009, 17h36
  3. [XL-2007] Insérer des lignes dans un classeur
    Par toinou62 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/05/2009, 19h22
  4. [VBA-E] Insérer du code dans un module
    Par cafeine dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/05/2007, 10h34
  5. [phpBB] Insérer un code dans phpBB
    Par gobs dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 09/11/2006, 20h12

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