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

VBScript Discussion :

Executer macro excel via VBS


Sujet :

VBScript

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Par défaut Executer macro excel via VBS
    Bonsoir,
    Je programme un peu mais pas du tout en VB et dérivés. Je souhaite exécuter via un script VBS une macro qui se trouve dans un module d'un classeur Excel. Cette macro "main_fichier_DSI" prends 3 paramètres.
    J'ai réussi a trouver ce code mais j'ai une erreur WSH a l'exécution : "ligne 9, caract 9, erreur fin d'instruction attendue".
    J'aimerai avoir l'avis de connaisseur car je patine grave :-(
    Et merci a celles & ceux qui me fileront un tuyau.

    Voici mon code :

    main
    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
    17
    18
    19
    20
    21
    22
    23
     
    Function main()
     appel_macro_NP()
    End Function
     
     
    Function appel_macro_NP()
     Dim Xl As Excel.Application
     Dim Wb As Excel.Workbook
     Dim NomMacro As String
     Dim FeuilleMEF As String
     Dim Arg1 As Integer
     Dim Arg2 As Integer
     
     Set Xl = CreateObject("Excel.application")
     Xl.Visible = True
     Set Wb = Xl.Workbooks.Open("Modèle de travail.xls")
     
     FeuilleMEF = "MEF Requètes DSI"
     Arg1 = 5
     Arg2 = 5
     Xl.run WB.Name &"!Module3.main_fichier_DSI" , &"FeuilleMEF", &Arg1, &Arg2
    End Function

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    En VBS, le typage se fait au moment de l'assignation, pas à la déclaration.
    Autrement dit, il faut supprimer tous les As des Dim.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Par défaut Erreur ??
    merci pour les conseils mais ayant enlevé les As de chaque déclaration j'ai maintenant une erreur que je ne pige pas.
    Il n'arrive pas a faire la substitution de la variable FeuilleMEF dans l'exécution.

    J'ai le message "Erreur de syntaxe" sur la ligne 23 (le Xl.run) caractère 48 (&FeuilleMEF après le &). Je ne comprends pas pourquoi ?
    Je suis pourtant bien positionné dans le répertoire du .xls.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Par défaut
    Le code modifié :

    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
    17
    18
    19
    20
    21
    22
    main
    Function main()
     appel_macro_NP()
    End Function
     
    Function appel_macro_NP()
     Dim Xl
     Dim Wb
     Dim NomMacro
     Dim FeuilleMEF
     Dim Arg1
     Dim Arg2
     
     Set Xl = CreateObject("Excel.application")
     Xl.Visible = True
     Set Wb = Xl.Workbooks.Open("Modèle de travail.xls")
     
     FeuilleMEF = "MEF Requètes DSI"
     Arg1 = 5
     Arg2 = 5
     Xl.run WB.Name &"!Module3.main_fichier_DSI" , &FeuilleMEF, &Arg1, &Arg2
    End Function

  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
    ? c'est quoi tous ces & ...?

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Par défaut
    bonjour,

    oui je n'ai pas mis la syntaxe a jour, la ligne corrigée est :

    Xl.run WB.Name & "!Module3.main_fichier_DSI", Worksheet, Arg1, Arg2

    Ca me lance le classeur Excel mais en peut exécute la macro car il ne la trouve pas. J'ai le message :
    'Impossible de trouver la macro
    Modèle de travail.xls!Module3.main_fichier_DSI'

    Je comprends pas, la feuille MEF Requètes DSI contient une subroutine qui appelle la macro main_fichier_DSI enregistrée dans le module3.

    Quelqu'un y compernds quelque chose ?
    Images attachées Images attachées   

  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

    IL me semble que si le nom du classeur contient des espaces ou des caractères spéciaux, le nom doit être encadré par des quotes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "'Nom du Classeur.xls'!Module1.NomMacro"


    michel

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Par défaut
    Merci mais si je mets cette syntaxe le classeur ne s'ouvre meme pas, il ne cherche meme pas a exécuter la macro :
    Application.Run "'Modèle de travail.xls'!Module3.main_fichier_DSI", Worksheet, Arg1, Arg2

    J'ai une erreur dont voici la copie de l'erreur : erreurVBS.jpg
    Je sais que ma syntaxe est presque OK, elle ouvre le doc xls mais elle n'arrive pas a accéder a la macro pourtant dans le module3 :
    Xl.run WB.Name & "!Module3.main_fichier_DSI", Worksheet, Arg1, Arg2

    Il y a bien quelqu'un maitrisant VBS qui sait comment on lance une macro VBA je suppose ?

    Please help me, it's been a long time that i seek the good way to do that !
    Images attachées Images attachées   

  9. #9
    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
    rebonjour

    Merci mais si je mets cette syntaxe le classeur ne s'ouvre meme pas
    Je ne vois pas le rapport entre Application.Run et l'ouverture préalable du classeur, meme si la syntaxe est erronée ...


    peux tu preciser à quoi correspondent les arguments Worksheet, Arg1, Arg2



    michel

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Par défaut
    Re bonjour !
    les arguments sont les variables renseignées dans le code (post du 18/12 10h50).
    Worksheet = la feuille excel concernée par la macro
    Arg1 correspond a une dimension de tableau dynamiques que créé la macro et Arg2 a la colonne du boutons a cliquer sur la feuille. Ces valeurs sont des entiers.

    Exemple pour les subroutines de la feuille 'MEF Requètes DSI' qui comprends 3 boutons en colonnes C (3), D (4) et E (5) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Clôture_Click()
    main_fichier_DSI "MEF Requètes DSI", 5, 5
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Quotidien_Click()
    main_fichier_DSI "MEF Requètes DSI", 5, 4
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub STC_Click()
    main_fichier_DSI "MEF Requètes DSI", 5, 3
    End Sub
    J'espère vous avoir donné assez de détails, nous sommes pas loin du but.

  11. #11
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Je croyais que c'était FeuilleMEF le nom de la variable contenant le nom de la feuille... et pas Worksheet.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Par défaut
    Oui enfin, alpha ou béta...
    J'ai changé le nom de la variable par le nom anglais d'une feuille d'un xls.
    Cette variable se substitura a d'autres noms de feuilles car le XLS a 3 feuilles appelant la meme macro. Donc j'ai voulu éviter de me focaliser sur un nom de feuille en particulier.

    Worksheet sera soit : feuilleA, feuilleB, feuilleC,...

    La ligne construite pour appeller la macro comprend a coup sur une erreur de syntaxe co... mais alors j'avance pas (et le net est pauvre).

    Tout le monde pourra, une fois le problème résolu lancer ses macro via un simple script VBS. Merci encore de suivre mon problème.

  13. #13
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Eh bien, je te le déconseille fortement car Worksheet est un nom utilisé par VBA Excel pour désigner un objet Feuille de calcul...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Par défaut
    Bonjour,
    ok merci je remets donc un nom de variable moins sensible mais je suis toujours confronté au même problème. Je ne sais plus quoi faire...

  15. #15
    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
    supprime le "typage dans ta déclaration de procédure excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public Sub main_fichier_DSI(stFeuille, Arg1, Arg2)
    puis dans le VBS.. rajoute des ' ( grr... cette habitude de mettre des espaces et des accents dans les noms de fichiers...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Xl.run "'" & WB.Name & "'!Module3.main_fichier_DSI" ,FeuilleMEF ,arg1,arg2

  16. #16
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Par défaut
    Bonjour bbil,
    Merci pour tes conseils que j'ai suivi et la macro déja s'exécute mais bloque sur une erreur.
    J'ai mis la copie d'écran pour info. Je crosi que par défaut les arguments sont passés par référence et ça ne plait pas a la macro. J'ai fait précéder l'argument Nom_Feuille par ByVal mais toujours une erreur a la compilation VB.

    Au fait pourquoi faut-il enlever le typage des arguments dans la macro, car exécutée seule dans excel tout marche très bien. Mauvais ménage avec VBS ? ;-)
    Images attachées Images attachées  

  17. #17
    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
    ton probléme c'est dans la deuxiéme fonction ...non ..? essai en mettant nom_feuille entre parenthése... ou passe par une variable intermédiaire...

  18. #18
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Par défaut
    Merci de ton aide, j'ai fait un peu autrement mais le résultat est la !
    En fait tu m'as donné la bonne syntaxe VBS pour le run de la macro.

    Entre VBS et VBA le passage des arguments par valeur et référence ne faisait pas bon ménage. J'ai gardé le typage et indiqué dans les fonctions VBA appelées ByVal devant chaque argument et ça fonctionne nickel.
    J'ai pas encore tout pigé de la syntaxe de ta ligne mais je débute, bonne journée.

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

Discussions similaires

  1. [WD-2003] Executer macro excel via word
    Par Karatégirl77 dans le forum VBA Word
    Réponses: 6
    Dernier message: 27/08/2009, 12h11
  2. Chart Excel via VBS
    Par dsolheid dans le forum VBScript
    Réponses: 8
    Dernier message: 18/08/2009, 09h29
  3. [VB.NET][VBA-E]Execution d'une macro excel via application
    Par Yolak dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/12/2007, 07h46
  4. Executer macros Excel via Access
    Par Echizen1 dans le forum Access
    Réponses: 7
    Dernier message: 20/09/2006, 15h09
  5. supprimer popup macro (excel) via access
    Par Echizen1 dans le forum Access
    Réponses: 9
    Dernier message: 15/09/2006, 17h07

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