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 :

Envoie de commande DOS sous module VBA Access


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 212
    Par défaut Envoie de commande DOS sous module VBA Access
    Bonjour,

    Je cherche à envoyer des commandes dans une fenetre DOS.
    J'ai lu le FAQ et le forum VBA mais je n'arrive pas à adapter la solution.
    Voici ce à quoi je suis parvenu :

    Fonction qui permet de créer un fichier .bat pour enregistrer les commandes à envoyer :

    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
    Function soustestFTP()
    Dim Repertoire As String
     
            Repertoire = CurrentProject.Path
            Repertoire = CStr(Repertoire)
     
            Open Repertoire + "\LoaderSession.bat" For Output As #1
     
            Print #1, "cd.."              'retour repertoire
            Print #1, "cd.."              'retour repertoire
     
            Close #1
     
            Sleep 1000
     
    Call TestFTP(Repertoire)
    End Function
    Ce code permet de lancer la fonction Shell

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Function TestFTP(stSCRFile As String)
    Dim stSysDir As String
        stSysDir = Environ$("COMSPEC")
        stSysDir = Left$(stSysDir, Len(stSysDir) - Len(Dir(stSysDir)))
        Call ShellAndWaitForTermination(stSysDir & "cmd.exe -s" & stSCRFile, vbMaximizedFocus, , 5000)
     
    End Function
    Voici la fonction shell

    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
     
    Public Function ShellAndWaitForTermination( _
            sShell As String, _
            Optional ByVal eWindowStyle As VBA.VbAppWinStyle = vbNormalFocus, _
            Optional ByRef sError As String, _
            Optional ByVal lTimeOut As Long = 3600 _
        ) As Boolean
    Dim hProcess As Long
    Dim lR As Long
    Dim bSuccess As Boolean
    Dim Second As Long
     
    On Error GoTo ShellAndWaitForTerminationError
     
        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(sShell, eWindowStyle))
        If (hProcess = 0) Then
            'Impossible de lancer la ligne de commande!
            sError = "Le programme n'a pu être lancé, vérifiez votre ligne de commande."
        Else
            bSuccess = True
            Second = 0
            Do
                'Récupération du statut du process,
                'on vérifie s'il est terminé (lR = 0).
                GetExitCodeProcess hProcess, lR
                'Pause en attendant la fin de notre commande sans
                'géner l'execution des autres process.
                If Second <= lTimeOut Then
                    DoEvents: Sleep 6000
                    Second = Second + 1
                Else
                    'Trop long!
                    Call TerminateProcess(hProcess, lR)
                    Call CloseHandle(hProcess)
                    sError = "Trop long: Le process a été stoppé...."
                    lR = 0
                    bSuccess = False
                End If
            Loop While lR = STILL_ACTIVE
        End If
     
        ShellAndWaitForTermination = bSuccess
     
        Exit Function
     
    ShellAndWaitForTerminationError:
        sError = Err.DESCRIPTION
        Exit Function
    End Function
    Problème :
    La fenetre MSDOS s'ouvre bien avec un repertoire par défault mais impossible d'envoyer les commandes en automatique (cd.. etc)

    Pouvez-vous m'aider !

    Merci de votre aide

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    La méthode la plus simple est de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    shell "maCommandeDos"
    si tu es sous Win XP,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    shell "cmd /c maCommandeDos"
    ex : shell "cmd /c cd.."

    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 éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 212
    Par défaut
    Ok merci.

    Pour garder la fenetre ouverte j'ai fais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Shell "cmd -s cd.."
    Comment puis-je faire pour continuer à lui envoyer des commandes
    dans la meme fenetre.


    Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Par défaut
    Bonjour,

    je sais que la discussion est un peu ancienne...
    Mais la réponse à la dernière question m'intéresse.
    Sous VBA (Excel, Access...), la commande

    Shell "cmd -s cd.."

    provoque bien l'ouverture d'une fenêtre DOS et la maintient ouverte, mais l'action "cd.." semble être ignorée et je ne sais pas passer d'autres commandes.

    Par ailleurs, je souhaite scripter plus gloabelement une application DOS en la lançant depuis Excel ou Access puis en récupérant les sorties qu'elle me fournit dans sa fenêtre.

    Quelqu'un peut-il m'aider svp?

    Merci d'avance.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Citation Envoyé par Sam 069 Voir le message
    Ok merci.

    Pour garder la fenetre ouverte j'ai fais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Shell "cmd -s cd.."
    Comment puis-je faire pour continuer à lui envoyer des commandes
    dans la meme fenetre.


    Merci
    Tu ne peux pas 'envoyer des instructions à une fenêtre dos'. Tu peux seulement executer une instruction DOS à parti de Access. Si yu veux exécuter plusieurs instructions DOS le plus simple est de passer par un fichier .bat qui va contenir tes instructions. À partir d'Access tu va simplement appeler le .bat.

    Tu peux aussi regadrer les instructions VBA qui permettent de faire la plus part des commandes DOS sans passer par le le DOS.

    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.

Discussions similaires

  1. Exécuter une commande DOS
    Par Bourak dans le forum Delphi
    Réponses: 9
    Dernier message: 02/08/2016, 11h15
  2. [PowerBuilder] Executer une commande DOS sous PB
    Par Deedoo2000 dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 09/08/2006, 15h54
  3. commande dos sous java
    Par yann999 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 12/05/2006, 14h18
  4. faire tourner une commande dos sous application java
    Par Terminator dans le forum API standards et tierces
    Réponses: 22
    Dernier message: 02/05/2006, 22h33
  5. commande dos sous oracle
    Par tcy dans le forum Oracle
    Réponses: 4
    Dernier message: 18/07/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