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 :

debugger un classeur que j’appelle en ligne de commande avec des arguments


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 debugger un classeur que j’appelle en ligne de commande avec des arguments
    Bonjour,

    Excel 2010

    Comment puis-je debugger un classeur que j’appelle en ligne de commande avec des arguments comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\Program Files\Microsoft Office\Office14\excel.exe"  /e/toto.txt/titi.txt/tata.txt D:\Editique\extraction\Classeur7.xls
    Le but est de lire les fichiers qui sont passé en arguments (optionnel en plus)
    J’aimerai pouvoir mettre des points d’arrêts et lancer ma commande
    Pour l’instant je me sers de Msg(mes_arg1, mes_arg2 . . .

    Merci de vos conseils,

    Henri

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    J'ai peur de comprendre... Peux-tu donner un exemple ?

  3. #3
    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
    Quand sur mon poste (windows XP), je mets la ligne ci-dessous dans Démarrer/ exécuter je lance Excel ou une nouvelle instance d’Excel avec comme arguments le nom de mon fichier + trois autre argument (/e/toto.txt/titi.txt/tata.txt)
    "C:\Program Files\Microsoft Office\Office14\excel.exe" /e/toto.txt/titi.txt/tata.txt D:\Editique\extraction\Classeur7.xls

    Je désir suivre ceci à la trace avec le debugger de VBA en gros c’est tous

    Voici ce que j’ai dans mon Private Sub Workbook_Open() de ThisWorkbook, donc la première action exécuté à chaque lancement d’un dossier si il y a des macros bien sur

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    Option Explicit
    ' On va tester notre Objet
    ' Private WithEvents mobjPerson As Person 'Provoque une erreur si placé ailleurs que dans un module de classe
    'API nécessaires à l'extraction des paramètres de la ligne de commande:
    Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long
    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
    Dim param_1 As String
    Dim param_2 As String
    Dim param_3 As String
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.Quit
    Application.DisplayAlerts = True
    End Sub
     
    Private Sub Workbook_Open()
    'Dim obj_cat1 As New Categorie
    '============================================================================================
    ' EXTRACTION DES PARAMETRES DE LA LIGNE DE COMMANDE:                                        |
    ' http://www.developpez.net/forums/d530333/logiciels/microsoft-office/excel/macros-vba-excel/recuperer-parametres-ligne-commande/
    '============================================================================================
    Dim CmdLine As String       'Ligne de Commande
    Dim CmdArgs() As String     'Tableau des paramétres de Commande.
    Dim ArgNb As Integer        'Nombre de paramétres
    Dim Pos1 As Integer         'Variable pour stocker la position de certaines chaines.
     
     Application.DisplayAlerts = False
     
    'Lire la ligne de Commande: "C:\Program Files\MsOffice\Office11\Excel.exe" /e/Paramètre1/Paramètre2/Paramètre3 C:\MonDocument.xls'
    CmdLine = GetCmd
     
    'On détermine la position de la fin de la chaine d'arguments:
    Pos1 = InStr(1, CmdLine, ThisWorkbook.FullName, vbTextCompare)
     
    'Cette ligne extrait ce qui lance Excel et la suite d'arguments:
    If Pos1 <> 0 Then CmdLine = Mid(CmdLine, 1, Pos1 - 1) Else Exit Sub
     
    If Right(CmdLine, 1) = """" Then Pos1 = 2 Else Pos1 = 1
     
    'Supprime l'espace en bout de chaine:
    CmdLine = Mid(CmdLine, 1, Len(CmdLine) - Pos1)
     
    'Supprimer la partie de la chaine contenant l'appel de Excel.exe puis le '/e/' pour n'avoir que les paramètres personnalisés:
    CmdLine = Mid(CmdLine, InStr(1, CmdLine, " /e", vbTextCompare) + 4, Len(CmdLine)) & "/"
     
    'Extraction des paramètres personnalisés et stockage dans un tableau redimensionnable:
    Do Until Len(CmdLine) < 2
        Pos1 = InStr(1, CmdLine, "/")
        ArgNb = ArgNb + 1
        ReDim Preserve CmdArgs(1 To ArgNb)
        CmdArgs(ArgNb) = Mid(CmdLine, 1, Pos1 - 1)
        CmdLine = Mid(CmdLine, Pos1 + 1, Len(CmdLine))
    Loop
     
    '============================================================================================
    ' FIN DE L'EXTRACTION DES PARAMETRES DE LA LIGNE DE COMMANDE.                               |
    '============================================================================================
     
     
    MsgBox "Le premier argument au lancement est: " & CmdArgs(1) & vbCr & CmdArgs(2) & vbCr & CmdArgs(3), vbInformation
     
    param_1 = CmdArgs(1)
    param_2 = CmdArgs(2)
    param_3 = CmdArgs(3)
     
    Ouvrir param_1, param_2, param_3
     
    Application.Wait (Now + TimeValue("0:00:05"))
     
    ThisWorkbook.Close (False) ' c'a me ferme bien le classeur mais pas instance d'excel qui  à été ouverte ! ! !
    ' Dans Private Sub Workbook_BeforeClose(Cancel As Boolean) pour que c'a se ferme bine ! ! !
    ' Application.Quit
     
    End Sub
     
    Private Function GetCmd() As String 'Tony Proctor microsoft.public.vb.winapi
       Dim lpCmd As Long
       lpCmd = GetCommandLine()
       GetCmd = Space$(lstrlen(ByVal lpCmd))
       lstrcpy ByVal GetCmd, ByVal lpCmd
    End Function
    J’arrive à passer ces arguments à un module, ensuite avec ces arguments je vais faire différents traitement que je n’ai pas encore définis, en gros ouvrir des fichiers, les trier, envoyer des mails et fermer l’instance d’Excel

    J’essaye donc de garder les ponts d’arrêts du debugger que j’ai positionné avant de lancer ma ligne de commande qui démarrera Excel et fera sa semoule,
    La seule façon que j’ai trouvé pour le moment est de mettre ces infos dans un Msg



    Henri

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Personnellement, je ne sais pas positionner des points d'arrêt par VBA.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,

    un tuto sur les passages de paramètres depuis Batch est disponible à cette adresse :
    http://jpcheck.developpez.com/tutori...ge-parametres/
    (j'y utilise /cmd au lieu de /e)

    Pour ton problème tu peux très bien simuler le lancement de ta ligne de commande en remplaçant
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CmdLine = "talignedecommandebatch"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,

    Tu met l'analyse de la ligne de commande dans une sub que tu appelle Debugeur par exemple.

    Dans VBE Menu Outils Proprietes de VBAProjet
    Arguments de compilation conditionnelle
    tu met TEST = 0

    Ton WorbookOpen devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_Open()
        #If TEST = 1 Then
            Debugeur
        #End If
    End Sub
    Tu lance ton fichier comme dab

    Tu vas mettre un point d'arret dans ta sub puis tu la lance
    tu peux debuguer

    Ne pas oublier de remettre TEST = 1 dans les arguments de compilation lorsque tu es satisfait du fonctionnement

    ctac

  7. #7
    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
    OK, mais comment je fais pour lancer Workbook_Open() par la fenêtre Excel ou la fenêtre VBA après y avoir positionné des points d’arrêts ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CmdLine = "C:\Program Files\Microsoft Office\Office14\excel.exe  /e/toto.txt/titi.txt/tata.txt D:\Editique\extraction\Classeur7.xls"
    EST OK

    Votre suggestion fonctionne et ceci devrai suffire,

    En fait vous avez bien compris mon problème
    Quant au tutorial, je m’en suis inspirer largement et je vais y retourner,

    Merci CTAC & JPCHECK de vos réponses,

    Henri

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

Discussions similaires

  1. [Batch] Ligne de commande avec un chemin avec espaces
    Par Oluha dans le forum Scripts/Batch
    Réponses: 17
    Dernier message: 11/10/2018, 10h36
  2. Compilation ligne de commandes avec des jars
    Par ToTo13 dans le forum Général Java
    Réponses: 15
    Dernier message: 24/06/2010, 12h37
  3. Exécuter script en ligne de commande avec des paramètres
    Par illegalsene dans le forum Langage
    Réponses: 4
    Dernier message: 29/12/2009, 14h21
  4. [RCP] generation du rcp en ligne de commande avec ant
    Par albeau dans le forum Eclipse Platform
    Réponses: 5
    Dernier message: 01/09/2006, 17h34
  5. [DEBUTANT] Ligne de commande avec ShellExecute()
    Par alainpeniche dans le forum Windows
    Réponses: 3
    Dernier message: 22/08/2005, 11h08

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