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 :

Executer macro par batch [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur STC, systèmes de supervision
    Inscrit en
    Juin 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur STC, systèmes de supervision
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 58
    Par défaut Executer macro par batch
    Salut à tous!

    Je cherche à éxecuter une macro par un .bat ... J'ai lu pas mal de trucs dont je me suis inspiré (inspiré = copier-coller)
    Seulement, j'ai un message très méchant qui s'affiche me disant :

    Run -time error '1004':

    Cannot run the macro "MessageDLE". The macro may not be available in the workbook or all macros may be disabled
    Pour arriver à ce message, voici mes différents morceaux de codes...

    Le fichier batch :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" /cmd/MessageDLE "C:\Users\Symone\Desktop\EPI\Suivi_EPI_v1.1.xls"
    Le module ThisWorkbook (sous Microsoft Excel Objects) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_Open()
     
        Call ExecuterViaBatch
        'MsgBox macmdline
     
    End Sub
    Le module OpenViaBat (sous Modules) :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (lpString As Any) As Long
     
    Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long
     
    Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long
     
    'fonction proposée par Tony Proctor sur le forum public de Microsoft : microsoft.public.vb.winapi
    Private Function GetCmd() As String
     
       Dim lpCmd As Long
       lpCmd = GetCommandLine()
       GetCmd = Space$(lstrlen(ByVal lpCmd))
       lstrcpy ByVal GetCmd, ByVal lpCmd
     
    End Function
     
     
    Sub ExecuterViaBatch()
     
        'Call MessageDLE
     
    Dim macmdline As Variant
    Dim monparam As Variant 'déclare une variable
     
        'macmdline = "/cmd/MessageDLE"
        macmdline = GetCmd 'affecte la valeur de la ligne de commande
        If Not IsNull(macmdline) Then 'si la variable est nulle
            If Len(macmdline) > 0 Then 'on s'assure qu'il y a eu une ligne de commande passée
                If InStr(macmdline, "/cmd") > 0 Then
                    macmdline = Replace(macmdline, ThisWorkbook.FullName, "", , , vbTextCompare)
                    monparam = Split(macmdline, "/cmd")
                    Application.Run Mid(monparam(1), 2, Len(monparam(1)) - 1)
                    'Call MessageDLE
                End If
            End If
        End If
     
        MsgBox macmdline
     
    End Sub
    Si çà peut vous aider, la macro à éxecuter : MessageDLE() se situe sous Modules, dans un autre module appelé ReccueilInfo...

    J'avais, au départ, remplacé le code de Workbook_Open() par celui de ExecuterViaBatch() pour éxectuer directement la macro mais rien ne se passait :
    ¤Il semble qu'une Private Function ne peut être appelée que par une Sub / Function du même module (je me trompe peut être)
    ¤En plus, j'ai lu qu'il ne fallait pas placer la fonction dans un module dépendant du classeur ou d'une feuille...

    NB : j'ai mis en place un mot de passe pour accéder au code, mais je ne pense pas qu'il pose problème pour l'éxecution des macros...

    Des idées?!

    Merci Beaucoup

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Par défaut
    Regardez ici :http://www.developpez.net/forums/d53...igne-commande/

    Cordialement,
    Henri

  3. #3
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    J'ai fait un essai chez moi et cela marche, à condition toutefois de valider l'activation des macros à l'ouverture d'Excel.
    Une toute petite modification a été nécessaire pour cela. Remplacez la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run Mid(monparam(1), 2, Len(monparam(1)) - 1)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run Mid(monparam(1), 2, Len(monparam(1)) - 3)
    En espérant que cela permette de résoudre votre problème.

    Cdt

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur STC, systèmes de supervision
    Inscrit en
    Juin 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur STC, systèmes de supervision
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 58
    Par défaut
    Ca y est!! çà marche!

    c'était bien la ligne de commande à modifier...

    Merci à tous les deux du temps consacré

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

Discussions similaires

  1. [Débutant] possibilité execution macro excel par vb.net a partir de VB.net
    Par Pexou dans le forum VB.NET
    Réponses: 0
    Dernier message: 17/11/2013, 18h05
  2. [AC-2007] Executer code par macro
    Par daumas dans le forum Macros Access
    Réponses: 8
    Dernier message: 22/04/2013, 07h27
  3. [ASE]proc stock qui traite un tableau de données et les execute par batch
    Par 461219 dans le forum Adaptive Server Enterprise
    Réponses: 5
    Dernier message: 13/02/2008, 20h35
  4. Démarrage d'une macro par SQL Server
    Par PiercingDegree dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/09/2005, 09h13
  5. Réponses: 4
    Dernier message: 19/05/2005, 11h51

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