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 :

lancement d'un ".bat" en vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Par défaut lancement d'un ".bat" en vba
    Bonjour,

    Après quelques jours loin de mon code, je reviens vous embeter!
    Je vais essayer d'être clair, afin que vous puissiez m'aider!

    Je lance un shell afin d'executer l'ouverture d'une fenêtre DOS (cmd.exe) et en même temps je suis obligé de coupler cet appel avec une variable, dans le but que ma fenêtre dos ouverte reconnaisse les commandes d'un programme tiers.
    Voici la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell "cmd.exe /K " & nom_dossier, vbNormalFocus
    Tout ceci fonctionne, mais ensuite je suis obligé de taper le chemin des mes dossiers, afin d'atteindre un ".bat", donc dans la fenêtre DOS je tape :
    puis je tape C'est fastidieux, donc je souhaite améliorer la chose, c'est à dire qu'à l'ouverture de ma fenêtre DOS tout s'execute!
    J'ai donc testé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell "cmd.exe /K " & nom_dossier & ">" & "cd" & " " & chemin & ">" & Monbacth_info, vbNormalFocus
    où "Monbacth_info" à le nom de mon ".bat"

    Est-ce que quelqu'un à une solution, si vous voulez l'intégralité de mon code n'hésitez pas.

    Cordialement

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    si ton but est d'éxécuter un .BAT en lui passant les parametres depuis VB, tu n'as pas je pense besoin d'un systeme si compliqué.

    mais tu dois donner le nom complet du fichier .bat que tu veux exécuter.

    L'exemple suivante appelle le batch run_batch.bat du répertoire C:\DATA\Test en lui passant 2 parametres "P1" & "P2"

    Les quotes servent à délimiter pour que les espaces soient supportés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub test_run_batch()
    Dim cmd          As String
    Dim Quote        As String
    Dim proc         As String
    Dim ret          As Long
     
     
    Quote = ""
    proc = "C:\DATA\test\run_batch.bat"
     
    cmd = Quote & proc & Quote & " " & Quote & "P1" & Quote & " " & Quote & "P2" & Quote
    ret = Shell(cmd, vbNormalFocus)
    End Sub
    Voici le .BAT pour info :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo [Parm1]=%1 [Parm2]=%2 
    pause
    Cela répond à ta question ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Par défaut
    A priori, ça ne répond pas à ma question!
    Je vais mettre le code (du moins le début), ça sera peut-être plus clair??
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    Public Sub batch()
     
    Dim Coordxmin As Long
    Dim I As Long
    Dim J As Long
    Dim I2 As Long
    Dim J2 As Long
    Dim Pas As Long
    Dim Pas2 As Long
    Dim Pas3 As Long
    Dim CoordXvalid As Long
    Dim CoordYvalid As Long
    Dim Coordxmax As Long
    Dim Coordymin As Long
    Dim Coordymax As Long
    Dim Gdalcy2 As Long
    Dim Gdalcy1 As Long
    Dim Gdalcx1 As Long
    Dim Gdalcx2 As Long
    Dim X As Integer
    Dim Y As Integer
    Dim T As Variant
    Dim L As Variant
    Dim dossier As Object, Rep As Object
    Dim chemin As String
    Dim MonBatch As String
    Dim Monbacth_info As String
    Dim bat As String
    Dim monraster_src As Object
    Dim objFichier As Object
    Dim objAppli As Object
    Dim descrFichier As String
    Dim monraster As String
    Dim monraster_2 As String
    Dim chaine_gdalinfo As String
    Dim NomFic As String, Chaine As String, Chaine2 As String, Chaine3 As String, chaine4 As String
    Dim bat_sans_bat As String
    Dim nom_dossier As String
    'fonction GDAL
     
    Const Gdalinfo As String = "gdalinfo"
     
    Const Gdal_translate As String = "gdal_translate -of GTiff -srcwin "
    'taille du pixel en mètre fournit par GDALINFO
     
     
    T = Range("E2")
    'pas terrain que l'on souhaite avoir pour découpage en mètre
     
    L = Range("F2")
    'coordo en pixel des coins nord ouest et sud est
     
    Coordxmin = Range("A2")
     
    Coordxmax = Range("B2")
     
    Coordymin = Range("C2")
     
    Coordymax = Range("D2")
    'calcul du pas pour en pixel
    Pas = (L / T)
    I = 0
    J = 0
     
    'calcul du nombre d'itérations nécessaires pour les calculs en appliquant la focntion d'arrondi supérieur
    X = RoundUp((Coordxmax - Coordxmin) / Pas - 1)
    Y = RoundUp((Coordymax - Coordymin) / Pas - 1)
     
    'Initialisation de tous les paramètres, afin de compléter le fichier batch
     
    'Active l'appli shell pour lancer l'ouverture du répertoire
    Set dossier = CreateObject("Shell.Application")
     
    'Ouvre la boîte de dialogue "sélection d'un répertoire"
        Set Rep = dossier.BrowseForFolder(&H0&, "Sélectionner un répertoire", &H1&)
     
    'Si le chemin est vide, alors prend le chemin que l'on donne
        If Not Rep Is Nothing Then
     
            Set Rep = Rep.items.Item
            chemin = Rep.Path
     
        End If
     
    'saisir le nom du fichier batch que l'on va mettre dans le répertoire choisit précédemment
       MonBatch = InputBox("Saisir le nom du Fichier batch TRANSLATE")
     
     
    Monbacth_info = InputBox("saisir le nom du batch pour GDALINFO")
     
    'concatenation du chemin d'accès
      bat = chemin & "\" & MonBatch
    'retire au chemin d'accès l'extention du fichier .bat
     bat_sans_bat = Left(bat, Len(bat) - 4)
     
    'Active l'appli shell pour lancer l'ouverture du répertoire source des données raster
    Set monraster_src = CreateObject("Shell.Application")
     
    'Ouverture de la boîte de dialogue pour sélectionner le fichier voulu
    Set objFichier = monraster_src.BrowseForFolder(&H0&, "Veuillez indiquer le chemin d'accès au fichier " & descrFichier & " à importer", &H4000&)
     
    monraster = chemin & "\" & objFichier
    monraster_2 = chemin & "\" & Monbacth_info
     
    Open monraster_2 For Output As #1
     
        chaine_gdalinfo = Gdalinfo & " " & monraster & " " & ">" & " " & monraster & ".txt"
     
     
        Print #1, chaine_gdalinfo
        '"cd" & " " & chemin & "\",
        Close #1
    nom_dossier = "C:\soft\FWTools2.1.1\setfw.bat"
     
    Shell "cmd.exe /K " & nom_dossier & ">" & "cd" & " " & chemin & ">" & Monbacth_info, vbNormalFocus
    cordialement

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Re,

    je préfèrerais que tu expliques le but de ton code.

    Et surout ce que tu souhaites faire avec cette dernière ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Shell "cmd.exe /K " & nom_dossier & ">" & "cd" & " " & chemin & ">" & Monbacth_info, vbNormalFocus
    car là je ne vois pas trop ce que
    nom_dossier > cd chemin > monbatch_info
    peut donner dans un point bat.
    Ne serait-ce pas une tentative désespérée de lancer 3 instructions en 1. ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Par défaut
    Ne serait-ce pas une tentative désespérée de lancer 3 instructions en 1. ?
    IL y a de grandes chances ou de grands risques c'est selon!!

    Ma dernière ligne doit me permettre d'executer un batch, mais pour que ce batch fonctionne, il faut qu'il soit lancé dans fwtools et sa librairie GDAL (http://softlibre.gloobe.org/doku.php..._suisse/start)(qui s'active comme une fenêtre DOS, mais qui possède des fonctionnalités géographiques sur le traitement des images, et des vecteurs).

    C'est pourquoi le début de ma commande ("cmd.exe /k" & nom_dossier") active les fonctionnalités de fwtools, ça fonctionne car quand la fenêtre DOS s'ouvre, je peux aller dans mon répertoire de travail via "cd....." puis une fois dans mon répertoire, j'ai juste à lancer mon bat et il s'execute. Tout ceci fonctionne correctement!
    Mais moi, (un peu feignasse) je voudrais qu'à l'ouverture de ma fenêtre DOS (ayant les fonctionnalités fwtools) s'ouvre dans le bon répertoire de travail et execute mon batch!

    mais au vue de ta remarque, j'ai l'air de vouloir executer trop de commandes en même temps

    Est-ce plus clair??

    cordialement

  6. #6
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Un peu torché le système.

    Ma dernière ligne doit me permettre d'executer un batch, mais pour que ce batch fonctionne, il faut qu'il soit lancé dans fwtools et sa librairie GDAL (http://softlibre.gloobe.org/doku.php...sse/start)(qui s'active comme une fenêtre DOS, mais qui possède des fonctionnalités géographiques sur le traitement des images, et des vecteurs).
    je ne suis pas certain de comprendre les détails mais cela me semble un peut spécial.

    Qu'est ce qui t'empêche d'utiliser la technique que je t'ai proposé tout à l'heure pour passer en parametre le chemin ( et plus si affinité)

    Alors ton .BAt devrait faire quelquechose du genre :

    CD %1
    command /K nomdossier

    Autre idée. Sans avoir regardé ce que fait ni peut faire ce fameux GDAl,

    il devrait être possible de l'appeler directement via VBA, mais il faut la doc des DLL pour cela.
    Alors plus besoin de dos BOX.

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

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