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 :

lancer un fichier.bat depuis Excel d'un serveur à un autre.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Orakle
    Homme Profil pro
    Responsable Informatique
    Inscrit en
    Mars 2004
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2004
    Messages : 204
    Par défaut lancer un fichier.bat depuis Excel d'un serveur à un autre.
    Bonjour,

    je cherche une solution sans succès.
    Je cherche à lancer un fichier bat qui est situé sur un serveur depuis un fichier Excel situé sur un autre serveur de partage de fichiers.

    En gros mes fichiers.bat (qui lancent des fichier.sql) sont situés sur un serveur qui héberge un sqlplus.
    Je n'autorise pas mes utilisateurs à accéder directement à ce serveur.
    Ces SQL me récupèrent des données de ma base Oracle utiles pour le traitement de mon fichier Excel.
    Je ne peux pas scheduler mes bat, il faut du temps réel au moment du lancement d'Excel.

    Ce fichier Excel est stocké lui sur un autre serveur et je fais un shell en VBA pour lancer mon bat.
    Le VBA ne semble pas fâché par contre je n'ai aucun résultat.

    Autrement dit, en direct le bat fonctionne, depuis un autre serveur, ça ne marche pas.
    Peut-être une histoire de passation de login/psw administrateur de domaine pour que ça fonctionne? Mais comment faire?
    Que puis-je faire dans Excel pour m'en sortir?

    Merci bien de votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Septembre 2019
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Septembre 2019
    Messages : 151
    Par défaut
    Bonjour,

    je ne suis pas un spécialiste dans le domaine, mais j'arrive à exécuter un *.bat avec Excel,
    tu dois lancer tes fichiers *.bat a une date/heure determinée ?

    est-ce une commande de ce genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell "cmd /c" & "CheminFichier" & "\" & "NomFichier.bat"

  3. #3
    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

    je vois une incompatibilité probable entre
    Je n'autorise pas mes utilisateurs à accéder directement à ce serveur.
    et
    Je cherche à lancer un fichier bat qui est situé sur un serveur depuis un fichier Excel situé sur un autre serveur de partage de fichiers

    Par quelle astuce comptes-tu obtenir le chemin ?

    Via une tâche planifiée à l'origine du lancement, tu peux effectuer une selection du user qui 'lance' la tâche.

    AUtre approche, as-tu essayé de mapper un lecteur reseau pour t'assurer que ton chemin est le bon ?

    Tu nous indiques que
    Le VBA ne semble pas fâché par contre je n'ai aucun résultat.
    CA signifie quoi dans ton monde fâché qu'on comprenne si la colère de ton programme est bien celle que j'attribuerai aux miens (ou pas )

    Blague à part,
    Je ne peux pas scheduler mes bat, il faut du temps réel au moment du lancement d'Excel.
    ca reste du temps réel, il suffit de prévoir correctement son coup
    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

  4. #4
    Membre confirmé Avatar de Orakle
    Homme Profil pro
    Responsable Informatique
    Inscrit en
    Mars 2004
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2004
    Messages : 204
    Par défaut
    @TonyNiort79 : c'est un peu plus compliqué, je le lance d'un serveur (une VM) vers un autre serveur (une autre VM). Sinon oui ton Shell est ce que je cherche à faire.

    @Jean Philippe : je passe par une fonction trouvé sur le net:
    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
    Public Function OuvrirFichier(MonFichier As String)
     
    On Error GoTo OuvertureFichierErreur
     
       'vérifie si le fichier existe
       If Len(Dir(MonFichier)) = 0 Then
        OuvrirFichier = False
        Exit Function
       Else
       End If
     
       'ouvre le fichier dans son application associée
       Dim MonApplication As Object
       Set MonApplication = CreateObject("Shell.Application")
     
        MonApplication.Open (MonFichier)
        OuvrirFichier = True
       Set MonApplication = Nothing
     
    Exit Function
    OuvertureFichierErreur:
       Set MonApplication = Nothing
        OuvrirFichier = False
    End Function
    Et je lance la fonction le plus simplement du monde à la manière d'un Shell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OuvrirFichier ("\\IP_ServeurB\MonChemin\MonFichier.bat")
    Sur un fichier classique (type Word sans droits particuliers) le fichier est bien ouvert donc le chemin est reconnu.
    *J'ajoute qu'avec mon .bat j'ai une fenêtre d'avertissement de sécurité qui s'ouvre me demandant si je suis sûr du fichier à ouvrir. Preuve qu'il va jusqu'au bout!
    Mais le job du .bat n'est pas réalisé.

    Et oui je penche plus (j'espère ne pas tomber... ) à une histoire de droit d'où mon laïus sur le compte admin de domaine.
    Alors oui le scheduler pourrait me sauver la vie, mais du coup si j'empreinte cette voie, comment(en VBA) lancer une tâche scheduler depuis un serveur vers un autre serveur? Je vais essayer de chercher ça déjà.

    Donc si je récap depuis mon Serveur_A de partage de fichiers :

    1. au lancement d'Excel mon VBA lancerait une commande qui lancerait une tâche schedulée sur mon Serveur_B.
    2. cette tâche schedulée n'aurait d'autre fonction que de lancer MonFichier.bat, qui lui-même lance un Fichier.sql.
    3. le résultat de ce SQL ( Fichier.LST ou csv peu importe) sera dans un dossier de mon Serveur_B que je dois importer dans mon Excel (ça je sais faire normalement)

    Voilà en essayant d'être le plus exhaustif possible.

  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
    OK,

    donc la subtilité ca reste que tu utilises une ouverture d'un fichier sur un serveur B, mais l'execution en elle meme doit se dérouler sur le serveur B.

    Ce que tu nous indiques ca serait que l'execution ne se lance pas sur le bon serveur.

    Idée théorique :
    - créer une tache planifiee a lancement 'immédiat' sur le serveur via une commande DOS
    tu peux commencer par lire https://jpcheck.developpez.com/tutor...uis-access/#LV et ensuite voir que la syntaxe se basera sur une ligne de commande
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    schtasks /run /s <machine name> /tn <task name>

    - La tâche en question effectuera ce que tu souhaites sur le serveur B
    - Tu poursuis le traitement avec une boucle d'attente (la tache du serveur B doit laisser une information qui servira de drapeau, comme la creation d'un fichier a un endroit specifique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Attendre(Secondes As Integer)
    ' Cette procédure temporise pendant le nombre de secondes qu'on lui transmet en argument
    Dim Début As Long, Fin As Long, Chrono As Long
    Début = Timer
    Fin = Début + Secondes
    Do Until Timer >= Fin
        DoEvents
    Loop
    End Sub
    - Tu termines ton traitement
    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 confirmé Avatar de Orakle
    Homme Profil pro
    Responsable Informatique
    Inscrit en
    Mars 2004
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2004
    Messages : 204
    Par défaut
    Merci Jean Philippe,

    donc j'ai bien préparé ma tâche sur mon serveur B. Je la lance en manuel c'est nickel ça fonctionne.

    Et depuis mon Excel ton code tel que tu le mets ne fonctionne pas, je dois déclarer une string que j'ai appelé "lac" et je la passe comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lac = "SCHTASKS /Run /S MonNomdeServeur /TN MonNomdeTâche"
    Mais ça ne fonctionne pas!

    J'ai cherché sur le net différent mode de passage mais rien jusque là. Je n'ai pas d'erreur ni quoi que ce soit mais rien ne se déclenche...

  7. #7
    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
    OK,

    quand tu dis que ca ne fonctionne pas, la tache n'est pas lancée c'est bien cela ?

    Ne dois-tu pas fournir en complément un logon/password dans ta ligne de commande ?
    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

Discussions similaires

  1. Lancer 2 fichiers python depuis un .bat
    Par YannSa dans le forum Général Python
    Réponses: 0
    Dernier message: 22/04/2015, 09h16
  2. Lancer un fichier.bat depuis l'exécutable jar
    Par zpico dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 23/10/2012, 17h54
  3. [C#] lancer un fichier .bat
    Par damned3 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 24/09/2006, 13h10
  4. Lancer un fichier BAT
    Par bug_warrior dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/03/2006, 17h12

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