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 :

Exécution Macro VBA Excel via VBscript


Sujet :

VBScript

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 264
    Par défaut Exécution Macro VBA Excel via VBscript
    Bonjour,


    J'ai un script VBS qui permet de lancer une macro VBA Excel nommée "Macopie" du fichier FICTEST.xlsm ci-joint.
    Mon script VBS marhe très bien quand quand je saisi en dure le chemin de macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ObjExcel.Application.Run "'C:\Users\toto\FICTEST.xlsm'!Module1.Macopie"
    Je souhaiterai cependant l'optimiser en rendant le chemin paramétrable, mais j'obtiens un message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Microsoft Excel ne peut accéder au fichier << "'C:\Users\toto\FICTEST.xlsm' >>.
    Voici le contenu de mon script VBS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim ObjExcel
    Path = WScript.Arguments.Item(0)
    ObjExcel = CreateObject("Excel.Application")
    ObjExcel.Application.Run chr(34) & "'" & Cstr(Path) & "FICTEST.xlsm'!Module1.Macopie" & chr(34)
    Set ObjExcel = Nothing
    WScript.Quit
    Pour lancer mon VBS je saisi la ligne de commande ci-dessous sur mon terminal :

    cscript.exe Monvbs.vbs C:\Users\toto\


    Auriez-vous des idées à me proposer ?

    Par avance merci.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 482
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 482
    Par défaut
    euh, ça sert à quoi tes chr(14) dans le nom du fichier passé à run ????

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 264
    Par défaut
    Hello umfred,

    Merci d'avoir pris du temps pour mon problème.
    Les ch(34) permettent de mettre en griffes une chaine de caractères. Par exemple ch(34) "" & "Merci" & ch(34) renverra ""Merci

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 482
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 482
    Par défaut
    Si tu veux afficher les guillemets, double les dans ta chaine
    "voile un ""mot"" entre guillemet"
    pour moi c'est ce qui gène dans ton code (tu les as pas utilisé dans ton 1er code qui fonctionne)

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 500
    Billets dans le blog
    67
    Par défaut VBA Excel
    Bonjour,

    Je ne connais que VBA, alors voilà ce que j'ai pu faire avec une macro contenue dans le module d'un classeur situé dans le même dossier que FICTEST.xlsm :

    Code VBA : 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
    Public Sub macro1()
        Dim ObjExcel As Object
        Dim ObjWkb As Object, path As String
     
        path = ThisWorkbook.path & "\" 'WScript.Arguments.Item(0)
     
        Set ObjExcel = CreateObject("Excel.Application")
        Set ObjWkb = ObjExcel.Workbooks.Open(CStr(path) & "FICTEST.xlsm")
     
        ObjExcel.Application.Run "'FICTEST.xlsm'!Macopie"
     
        'Objwkb.Close
        Set ObjWkb = Nothing
     
        'ObjExcel.Quit
        Set ObjExcel = Nothing
     
        'WScript.Quit
    End Sub


    Si ça peut aider ..
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 482
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 482
    Par défaut
    Pour continuer dans le sens que j'ai indiqué et confirmé par User; j'ai retrouvé une macro qui fait appel à la macro d'un autre classeur dans mes fichiers, et je ne rajoute pas de guillemets supplémentaires autour (juste les guillemets simples)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    path = "c:\chemin\vers\fichier\excel.xlsm"
    application.run "'" & path & "'!" & NomMacro

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 500
    Billets dans le blog
    67
    Par défaut En complément
    Bonjour,

    En effet, on peut aussi passer le chemin complet

    En complément, j'ai vu que vous aviez mis une commande pour fermer l'application Excel à la fin de votre macro :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Macopie()
    '...
    ThisWorkbook.Save
    ThisWorkbook.Saved = True
    Application.Quit
     
    End Sub

    Je me demande si c'est le meilleur moyen pour fermer proprement le classeur. Perso je désactiverais cette commande et je fermerais le classeur à la fin de la procédure appelante.

    Un exemple en VBA :

    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
    Public Sub macro1()
        Dim ObjExcel
        Dim ObjWkb, path
     
        path = ThisWorkbook.path & "\" 'WScript.Arguments.Item(0)
     
        Set ObjExcel = CreateObject("Excel.Application")
        Set ObjWkb = ObjExcel.Workbooks.Open(path & "FICTEST.xlsm")
     
        ObjExcel.Application.Run "'FICTEST.xlsm'!Macopie"
     
        ObjWkb.Close
        Set ObjWkb = Nothing
     
        ObjExcel.Quit
        Set ObjExcel = Nothing
     
    End Sub
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 482
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 482
    Par défaut
    Je plussoie la remarque.
    L'appelant ouvrant une session d'Excel doit la fermer.

    La macro pourrait très bien être lancée depuis le fichier excel dans laquelle elle se trouve, fermer excel n'est pas forcément nécessaire. (tout dépend du besoin)

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 264
    Par défaut
    Bonjour umfred & User,

    Merci pour vos idées et désolé pour mon retour plus que tardif, j'essaie d'adapter vos idées et
    vous reviens au plus tôt.

    Bien à vous.

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 500
    Billets dans le blog
    67
    Par défaut
    Citation Envoyé par umfred Voir le message
    ...
    La macro pourrait très bien être lancée depuis le fichier excel dans laquelle elle se trouve, fermer excel n'est pas forcément nécessaire. (tout dépend du besoin)
    Je suis assez d'accord, si les données mises à jour dans le classeur ne sont pas accessibles autrement que par son ouverture, à la limite on pourrait mettre la macro sur ouverture, ou l'exécuter depuis le classeur. Mais tout dépend bien sûr du besoin comme vous dites..
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 264
    Par défaut
    Hello umfred & User,

    J'ai tenu compte de vos retours et ça marche très bien, voici mon nouveau script vbs (à noter
    qu'avec la ligne en commentaire ça fonctionne aussi):

    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
     
    Dim ObjExcel
    Dim ObjWkb
     
    Path = WScript.Arguments.Item(0)
    Set ObjExcel = CreateObject("Excel.Application")
    'ObjExcel.Application.Run "'" & Cstr(Path) & "FICTEST.xlsm'!Module1.Macopie"
     
    Set ObjWkb = ObjExcel.Workbooks.Open(path & "FICTEST.xlsm")
    ObjExcel.Application.Run "'FICTEST.xlsm'!Macopie"
     
    ObjWkb.Close
    Set ObjWkb = Nothing
     
    ObjExcel.Quit
    Set ObjExcel = Nothing
    WScript.Quit
    Et ma macro VBA :

    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
     
     
    Sub Macopie()
    Dim Fsource, Fdesti As Excel.Worksheet
    Dim PLAGEACOPIER As Range
     
     
    Set Fsource = ThisWorkbook.Worksheets("SOURCE")
    Set Fdesti = ThisWorkbook.Worksheets("DESTI")
     
    Set PLAGEACOPIER = Fsource.Range(Fsource.Cells(2, 2), Fsource.Cells(4, 2))
    PLAGEACOPIER.Copy
    Fdesti.Cells(2, 2).PasteSpecial Paste:=xlPasteValues
     
    ThisWorkbook.Saved = True
    End Sub
    Grand merci à vous deux.

    Salutations,

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

Discussions similaires

  1. [XL-2007] Gestion de document Word via macro VBA excel
    Par guiMM dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/10/2011, 16h30
  2. Réponses: 2
    Dernier message: 07/09/2010, 13h39
  3. [XL-2003] Fermeture de Processus Word via Macro VBA Excel
    Par ted the Ors dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/10/2009, 20h46
  4. Auto install macro vba excel
    Par zootman dans le forum Installation, Déploiement et Sécurité
    Réponses: 6
    Dernier message: 14/06/2006, 22h30
  5. [VBA-E] macro VBA excel suppression graphiques
    Par totoza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/05/2006, 09h45

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