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 :

Argument ou appel de procédure incorrect lors du lancement d'un .bat


Sujet :

Macros et VBA Excel

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Par défaut [Résolu] Argument ou appel de procédure incorrect lors du lancement d'un .bat
    Bonjour à tous,

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub tesat()
    ret = Shell("C:\Documents and Settings\All Users\Bureau\toto.bat", 1)
    End Sub
    Mon problème est que Excel me renvoie automatiquement une erreur de type "argument ou appel de procédure incorrect ".

    Le fichier existe bien, etc.

    Le truc étonnant c'est qu'il me fait pas cette erreur lorsque je mets le .bat à la racine par exemple.

    Merci pour votre aide.

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    et si tu lances le bat en double cliquant dessus, ca fonctionne? (dans le répertoire qui te pose problème evidemment

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub tesat()
    ret = Shell("cmd /c C:\Documents and Settings\All Users\Bureau\toto.bat", 1)
    End Sub
    tu peux tester ça pour moi ?

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Par défaut Marchopo
    jfontaine > Tout marche correctement lorsque je lance le .bat depuis le dossier directement.

    ouskel'n'or > Ca ne marche pas. Une fenêtre de commande s'ouvre et je n'ai pas le temps de voir ce qu'il y a écrit dessus.

    J'ai essayé de faire une photo d'écran et ça a donné ça.




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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Par défaut Code Source complet
    Je voulais isoler seulement la partie du code où s'arrêtait le débogueur, mais j'ai testé le code dans la forme où je vous l'ai proposé et ça a marché, donc vous ne pouviez pas trouver l'erreur désolé je croyais bien faire.

    Voici le code complet qui pose problème :

    Je précise que tout se passe parfaitement sauf lorsqu'il s'agit de lancer le .bat.

    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
    Sub CreerArchive()
     
    'Copie du fichier dans le dossier temporaire
    SourceFichier = Cells(3, 1).Hyperlinks(1).Address ' Définit le nom et le chemin du fichier source.
    If Not (RepertoireExiste("C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\")) Then MkDir "C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\" Else
    DestinationFichier = "C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\" & Dir(SourceFichier) ' Définit le nom du fichier et le nouveau chemin (ici E:\new) cible.
    FileCopy SourceFichier, DestinationFichier ' Copie le fichier source dans le fichier cible.
     
    'Creation du fichier de liste contenant la liste des archives à archiver
    Set FSys = CreateObject("Scripting.FileSystemObject")
    Set fichier_contenant_la_liste = FSys.CreateTextFile("C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\backup.lst")
    Set compression = FSys.CreateTextFile("C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\compression.bat")
     
    'Rentrer la liste des fichiers
    With fichier_contenant_la_liste 'Pour écrire dans le fichier texte
    .writeLine Dir(SourceFichier) 'Mettre write pour ne pas sauter à la ligne
    End With
     
    'Créer l'exécutable
    With compression 'Pour écrire dans le fichier texte
    .writeLine "rar a backup @backup.lst" 'Mettre write pour ne pas sauter à la ligne
    End With
     
    'Lancer le coco
    ret = Shell("C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\compression.bat", 1)
     
    End Sub

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ce n'est pas le code que je t'ai donné qui ne fonctionne pas, c'est ton . bat !
    Ajoute simplement
    en dernière ligne de ton bat et rappelle-nous

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Par défaut


    En haut la fenêtre qui correspond au .bat lancé via la macro...
    En bas, la fenêtre qui correspond au .bat lancé en double cliquant dessus...

    Le bat fonctionne parfaitement quand je le lance de manière classique, mais la question c'est pourquoi il se sent obligé de lancer cette invite de commande dans "mes documents" ?

    Je fais appel à rar.exe qui est dans le dossier spécifié dans la macro.. C'est sur qu'il est pas dans mes documents

    Merci en tout cas

  8. #8
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    J'ai peut être une piste.

    Lorsque tu lances le bat directement, tu es dans l'environnement du répertoire du bat.
    Quand tu le lance avec ton programme, le systeme est dans l'environnement du répertoire du programme et non du bat

    Je crois que la commande pour se mettre dans le répertoire c'est chdir.
    Ne pas oublier de le replacer dans le repertoire du programme après execution du bat

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Comme tu n'en parles pas, je suppose que tu as utilisé ma ligne de commande... si le .bat est lancé. Merci de le confirmer, je pourrai t'aider à continuer.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Par défaut
    ous'keln'or > quand je lance ton code, j'ai une fenêtre d'invite ms-dos qui apparaît subrepticement et qui disparaît. J'ai essayé de la (re)prendre en impr. écr. et ça m'a donné ça :



    jfontaine > oui je sentais bien un truc comme ça et c'est effectivement ce qui s'est passé : j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChDir "C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\"
    juste avant ma ligne de lancement de bat et ça a marché.

    Par contre, je n'ai pas compris lorsque tu as écrit

    Ne pas oublier de le replacer dans le repertoire du programme après execution du bat
    J'attends juste cette réponse avant de pouvoir mettre "résolu"

    Merci à vous en tout cas.

    PS : ous'keln'or si tu as une autre solution elle est la bienvenue également.



    Edit : wouups, il semblerait que ça marche lorsque je mets seulement ces 2 lignes de code dans un Sub à part (càd lorsque je fais une macro exprès pour ça), mais dès que je les mets à la suite de la grosse macro qui copie et qui zippe, ça plante et ça redonne la même erreur que d'habitude : Argument ou appel de procédure incorrect.







    Edit 2 : J'ai essayé de décomposer la macro, en ajoutant petit à petit les étapes pour voir à quelle ligne de code ça planterait. Il semble que le message d'erreur apparaît dès que je mets ces 3 lignes de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'Creation du fichier de liste contenant la liste des archives à archiver
    Set FSys = CreateObject("Scripting.FileSystemObject")
    Set fichier_contenant_la_liste = FSys.CreateTextFile("C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\backup.lst")
    Set compression = FSys.CreateTextFile("C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\compression.bat")

  11. #11
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    en gros il faut replacer l'environnement dans le répertoire du classeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chdir ActiveWorkbook.Path

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Par défaut
    Bon, j'ai viré ces 3 lignes de codes qui avaient l'air daubées.

    Voici mon code final qui fonctionne très bien. Merci beaucoup pour votre aide.


    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
    Sub tesat()
    'Copie du fichier dans le dossier temporaire
    SourceFichier = Cells(3, 1).Hyperlinks(1).Address ' Définit le nom et le chemin du fichier source.
    If Not (RepertoireExiste("C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\")) Then MkDir "C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\" Else
    DestinationFichier = "C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\" & Dir(SourceFichier) ' Définit le nom du fichier et le nouveau chemin (ici E:\new) cible.
    FileCopy SourceFichier, DestinationFichier ' Copie le fichier source dans le fichier cible.
     
     
    'Rentrer la liste des fichiers
     
    'Crée et ouvre le fichier backup.lst
    Open "C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\backup.lst" For Output As #1
    'Ecrit Mon Texte dans le fichier
    Print #1, Dir(SourceFichier)
    'Ferme le fichier
    Close #1
     
    'Crée et ouvre le fichier compression.bat
    Open "C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\compression.bat" For Output As #2
    'Ecrit Mon Texte dans le fichier
    Print #2, "rar a backup @backup.lst"
    'Ferme le fichier
    Close #2
     
     
    'Lancer le coco
    ChDir "C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\" 'se placer dans le répertoire déjà, très important !!
    ret = Shell("C:\Documents and Settings\All Users\Bureau\Dossier Temporaire\compression.bat") 'lancer le bat !
    ChDir ActiveWorkbook.Path 'replacer l'environnement dans le répertoire du classeur
     
     
    End Sub

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Par défaut
    Merci pour ce sujet intéréssant qui m'aura permis de résoudre le problème de l'éxécution des fichiers .BAT.

    Solution évoquée : il faut effectivement se placer dans le dossier où se trouve le fichier .BAT à éxécuter avant de le lancer.

    Un petit "RESOLU" s'il vous plait ?

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

Discussions similaires

  1. Argument ou appel de procédure incorrect lors du lancement d'un .bat
    Par darwin345 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/11/2013, 14h38
  2. [XL-2003] Shell et Erreur d'exécution 5: Argument ou appel de procédure incorrect
    Par akr54 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/06/2010, 14h15
  3. Erreur d'exécution 5 ; Argument ou appel de procédure Incorrect
    Par amirad dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/12/2009, 19h34
  4. Réponses: 4
    Dernier message: 02/09/2008, 21h43
  5. Workbooks.Open : Erreur "Argument ou appel de procédure incorrect"
    Par Kropernic dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 31/07/2008, 09h49

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