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

VBA Access Discussion :

Execution d'un fichier batch a partir de VBA Access [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut Execution d'un fichier batch a partir de VBA Access
    Bonjour.

    Je souhaite, sous VBA, lancer l'execution d'un fichier batch. Ce fichier batch lance un programme de rajout de donnees dans une table MySQL a partir d'un fichier *.txt contenant les donnees

    J'ai essaye en utilisant la methode sequentielle (open "c:\...." for input as 1#)puis les TextStream. Rien a faire.

    Comment peut on lancer l'execution d'un fichier batch a partir d'Access ?

    Merci.
    Cdlt

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    si tu es sous XP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shell "cmd /c c:\toto\titi\TonBat.bat"
    le /c ferme la fenêtre DOS après exécution. Si tu veux qu'elle reste ouverte tu peux mettre /k à la place de /c ou ajouter une instruction Pause à la fin de ton batch.

    Si tu n'est pas sous XP c'est toujour shell qu'il faut utiliser mais la syntaxe de la ligne DOS pourrait changer.

    Attention tu ne peux pas facilement savoir si tion .bat a fini de s'éxécuter. Access lance le .bat et passe à l'instruction suivante sans attendre le résultat du .bat.

    Je ne connais pas mySQL mais ne peux-tu pas utiliser une liaison ODBC et appeler une procédure stockée dans mySQL ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Merci pour cette reponse.

    Effectivement, j'arrive a executer le batch.

    Merci.
    Cdlt

  4. #4
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Bonjour.

    En me connectant par ADO, j'arrive a executer des procedures de suppression de donnees en tables MySQL. Procedures programmees sur la base MySQL.

    Pour ce qui est des rajouts, il semble que ce soit different. J'execute un fichier batch installe dans un repertoire sous Windows. Ce fichier batch execute un programme sur la base MySQL permettant d'importer les donnees d'un fichier externe.

    Cdlt.
    Jean.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur Génie Civil
    Inscrit en
    Juillet 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Génie Civil
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2018
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Nécromancie de sujet, mais il correspond parfaitement à une question que je me pose ...

    Est-il possible d'attendre la fin du .bat pour continuer la macro ?

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Comme je l'ai dit :

    Attention tu ne peux pas facilement savoir si ton .bat a fini de s'exécuter. Access lance le .bat et passe à l'instruction suivante sans attendre le résultat du .bat.
    Si tu as besoin de cela, il faut surveiller les processus de Windows et vérifier que le .bat a fini de s'exécuter.
    (Désolé je sais que le sujet a pas mal été traité mais je ne trouve pas d'exemples).

    Sinon, il semblerai qu'il y ai cette solution :

    https://danwagner.co/how-to-run-a-ba...shes-with-vba/

    Qui aurai l'avantage de "bloquer" VBA le temps de l'exécution.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur Génie Civil
    Inscrit en
    Juillet 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Génie Civil
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2018
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    J'ai utilisé cette solution qui semble marcher :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'Attente fin bat : https://www.jbnet.fr/developpement/access/access-comment-attendre-la-fin-dexecution-dun-fichier-externe-cmd-bat-etc.html
    'https://officetricks.com/convert-vba-declare-compatible-64-bit-office/
    Public Declare PtrSafe Function WaitForSingleObject Lib "Kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Public Declare PtrSafe Function OpenProcess Lib "Kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Public Const INFINITE = &HFFFF
    Function WaitForEnd(strFileToExec) As Long
        Set wsh = CreateObject("WScript.Shell")
        WaitForEnd = wsh.Run(strFileToExec, 1, True)
    End Function

    Lancée par :
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    codeRetour = WaitForEnd(Ch_acces & "\dos.bat")

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 04/07/2013, 18h12
  2. Réponses: 6
    Dernier message: 25/08/2008, 13h36
  3. Réponses: 1
    Dernier message: 25/08/2008, 11h57
  4. Réponses: 7
    Dernier message: 26/03/2007, 13h02
  5. Réponses: 1
    Dernier message: 26/03/2007, 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