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

Développement de jobs Discussion :

Job qui lance une macro Excel avec variables


Sujet :

Développement de jobs

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 61
    Points
    61
    Par défaut Job qui lance une macro Excel avec variables
    Bonjour,

    Quelqu'un aurait-il testé et réussi à faire fonctionner le lancement d'une macro Excel depuis Talend. La page suivante est très bien , le souci c'est que l'emplacement de mon script n'est pas fixe (il peut changer en fonction du fichier Excel à modifier). Encore ca, je peux peut-être me débrouiller. Mon fichier Excel peut changer de nom (il prend la date du lancement d'une requête ou la semaine de lancement, ...). C'est plus ça qui me pose problème.

    J'ai le même souci que dans ce post https://www.developpez.net/forums/d1...-macro-talend/ mais pour lequel la solution exposée n'est pas claire pour moi.

    J'ai déjà défini des variables de contextes mais je n'arrive pas à les utiliser.
    Comment écrire le chemin en variable dans le tJava
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("cmd /c start D:\\Talend\\MonVBScript.vbs");
    ?
    Comment utiliser des variables dans le script ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WITH objXL
        .Workbooks.Open ("D:\Talend\requetes\out\RH80\res\Mi-temps sem 51_2018.xlsx")
    Merci d'avance si vous avez des pistes ou des idées.

  2. #2
    Membre averti

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2011
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2011
    Messages : 160
    Points : 443
    Points
    443
    Billets dans le blog
    2
    Par défaut
    Pour utiliser une variable dans du code, Talend ça gère ça très bien , il suffit de déclarer la variable que tu veux et puis l'appeler quand tu le souhaites.

    Ajoute simplement une variable de contexte dans l'onglet contexte.

    Ensuite dans un tJava tu peux faire quelques choses comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    context.MY_FILE_PATH =context.MY_FILE_PATH +"Mi-temps_"+TalendDate.getDate("yyyyMMdd")+".xlsx";
     
    System.out.println(context.MY_FILE_PATH);

    Puis tu pourras l'appeler tranquillement partout, au lieu de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WITH objXL
        .Workbooks.Open ("D:\Talend\requetes\out\RH80\res\Mi-temps sem 51_2018.xlsx")
    Tu pourras faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WITH objXL
        .Workbooks.Open (context.MY_FILE_PATH)

    AU lieu de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("cmd /c start D:\\Talend\\MonVBScript.vbs");
    Tu peux utiliser le composant tSystem (je préfère toujours utiliser des composants Talend quand c'est possible pour des raisons de tranquillité et de maintenance)

    Ainsi dans tSystem tu peux faire ça :

    Nom : tsystem.PNG
Affichages : 947
Taille : 17,0 Ko
    Utilisez le bouton pour mettre en valeur la ou les réponses qui vous ont été les plus utiles. Marquez comme si c'est le cas.

    ''Le savoir est la seule matière qui s’accroît lorsqu’on la partage.''
    (Socrate)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 61
    Points
    61
    Par défaut
    En fait, ce que je n'ai pas précisé c'est que ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WITH objXL
        .Workbooks.Open (context.MY_FILE_PATH)
    n'est pas dans le job Talend mais dans un fichier (vb script) .vbs extérieur au job.

    Lorsque j'ai écrit "La page suivante est très bien", j'ai loupé le lien vers la page auquel je faisais référence : https://haskouse.developpez.com/tuto...d-excel-macro/

    Je n'arrive pas à l'utiliser (il ne comprend pas context), malheureusement. Des idées ???

  4. #4
    Membre averti

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2011
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2011
    Messages : 160
    Points : 443
    Points
    443
    Billets dans le blog
    2
    Par défaut
    Ah OK,

    Par contre je ne comprends bien ton problème, l'exemple https://haskouse.developpez.com/tuto...d-excel-macro/ est bien détaillé, tu as une macro et tu as un ou plusieurs fichiers Excel auxquels tu veux appliquer ta macro ?

    Quand tu mets le nom de ton fichier dans une variable de contexte, il te suffit de donner dans le nom de fichier du composant tFileOutExcel : context.MY_FILE_NAME.

    Sinon, explicite ton problème, donne un exemple s'il faut, tu auras une solution.
    Utilisez le bouton pour mettre en valeur la ou les réponses qui vous ont été les plus utiles. Marquez comme si c'est le cas.

    ''Le savoir est la seule matière qui s’accroît lorsqu’on la partage.''
    (Socrate)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 61
    Points
    61
    Par défaut
    Je ne sais pas si je vais être plus clair.

    Mon problème n'est pas en soit le job Talend mais l'écriture du chemin d'accès vers le fichier Excel (sur lequel la macro va s'exécuter) dans la macro. En fait, dans mon job le fichier Excel s'enregistre sur un serveur à un emplacement que je ne maîtrise pas.

    Sinon j'ai pensé écrire le chemin d'accès vers le fichier Excel dans un fichier texte ou Excel et je pourrais ensuite aller le chercher avec la macro mais comment faire pour écrire une variable dans ce fichier texte ou Excel ?

  6. #6
    Membre averti

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2011
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2011
    Messages : 160
    Points : 443
    Points
    443
    Billets dans le blog
    2
    Par défaut
    Ok, je ne vois pas où est le problème, sur Talend les variables de contextes sont bien indiqués pour faire ça, il suffit de déclarer tes variables et de définir dans quel environnement tu veux les utiliser, puis tu les valorisent par conséquent.

    Tu as aussi la possibilité de modifier les contextes de tes variables une fois tes jobs exportés, dans le dossier contextes tu peux modifier le fichier Default.properties et mettre les valeurs que tu souhaites.

    Si tu ne connais pas le nom du fichier, tu utiliser le composant tFileList pour parcourir le dossier où se trouvera ton fichier et valoriser tes variables de contextes selon le fichier trouvé dans le dossier.


    Mais pour cela, il faut comprendre c'est quoi une variable de contexte et pourquoi l'utiliser.

    Les variables représentent des valeurs qui changent tout au long de l'exécution d'un programme.
    (Pour plus de détails voir : https://help.talend.com/reader/nQ33GeGrX_qe77GTPpfYEA/xbhyQKORQNX5V8yw8WAb8w)
    Utilisez le bouton pour mettre en valeur la ou les réponses qui vous ont été les plus utiles. Marquez comme si c'est le cas.

    ''Le savoir est la seule matière qui s’accroît lorsqu’on la partage.''
    (Socrate)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 61
    Points
    61
    Par défaut
    Nom : RH80.jpg
Affichages : 872
Taille : 248,5 Ko

    Ci-joint une copie de mes variables. C'est le workbook.open ([variable]) du vb script qui me pose problème.

  8. #8
    Membre averti

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2011
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2011
    Messages : 160
    Points : 443
    Points
    443
    Billets dans le blog
    2
    Par défaut
    Ahh c'est mieux, je comprends ton problème .

    Tu as plutôt un problème VBA qu'un problème Talend, Au faite ta macro ne connais pas du tout context.CheminFichierTemp .
    Il faut que tu cherches à savoir comment on crée une macro avec paramètres, et comment appeler une macro avec paramètres à travers la ligne de commande, enfin si tu as ta commende permettant d'appeler une macro avec paramètre, tu donnes ça au programme Talend qui te l'exécutes.

    Questions :

    Qu'est ce que fais ta macro ? est ce que c'est n'est pas plus facile et simple de faire ça avec Talend ?
    Utilisez le bouton pour mettre en valeur la ou les réponses qui vous ont été les plus utiles. Marquez comme si c'est le cas.

    ''Le savoir est la seule matière qui s’accroît lorsqu’on la partage.''
    (Socrate)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 61
    Points
    61
    Par défaut
    Oui, c'est effectivement plus un pb VBA. D'où mon idée d'enregistrer le chemin dans un fichier Excel ou texte depuis Talend pour ensuite aller le récupérer depuis et dans le script VB, ça je saurai faire. Par contre, je ne vois pas comment enregistrer une variable dans un fichier Excel ou texte ?

    Pour répondre à ta question, il ne reconnait pas context.Chemin.

    J'aurais préféré tout faire avec Talend mais à priori cela ne semble pas possible de faire ce que je veux.

    La macro me permet de faire de la mise en forme (cellules en gras, bordures, ...) + ajouter un titre au dessus des données.

  10. #10
    Membre averti

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2011
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2011
    Messages : 160
    Points : 443
    Points
    443
    Billets dans le blog
    2
    Par défaut
    Effectivement le composant tFileOutputExcel ne permet de faire de la mise en forme facilement. (par contre, il existe l'astuce que j'ai expliqué dans un message précédent pour ajouter un titre).

    Donc, une solution peut être d'utiliser une macro si tu sais crée la bonne macro avec paramètre et l'appelée.

    Une autre solution serait d'utiliser plutôt les tFileExcel-Components qui est plugin que tu peux installé, et l'utiliser à la manière de Talend.

    En utilisant par exemple le composant tFileExcelSheetOutput tu peux choisir des noms de colonnes plus parlant:

    Nom : forme.PNG
Affichages : 865
Taille : 149,0 Ko

    Tu peux aussi définir une fichier template telle que tu le souhaites, ensuite tu lui dis d'appliquer le template et mise en forme spécifié et ton fichier Excel de sortie. Il offre plusieurs possibilité. => mais ça c'est si tu as le temps de mettre les mains dans le cambouis

    Ressources sur ce plugin :

    Tuto :

    Scénario tFileExcelSheetOutput : tFileExcelSheetOutput.pdf
    Télécharger le plugin : https://exchange.talend.com/#marketp...items%252F2772


    Voilà.
    Images attachées Images attachées  
    Utilisez le bouton pour mettre en valeur la ou les réponses qui vous ont été les plus utiles. Marquez comme si c'est le cas.

    ''Le savoir est la seule matière qui s’accroît lorsqu’on la partage.''
    (Socrate)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 61
    Points
    61
    Par défaut
    En fait, je connais ce plugin qui effectivement répondrait à mon besoin mais je n'arrive pas à l'utiliser en environnement de production. Sur poste, en environnement de test pas de souci mais dès que j'essai de l'utiliser depuis le serveur cela ne fonctionne pas. Du coup, je me suis posé pleins de questions notamment celle de savoir s'il est nécessaire d'avoir Excel sur le serveur pour que cela fonctionne.

    J'ai également testé une solution avec tFileOutputExcel en insérant mes données dans un fichier Excel qui contiendrait une mise en forme conditionnelle mais pareil cela fonctionne en environnement de test mais pas en production. Une idée de ce qui pourrait dysfonctionner ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/01/2012, 10h01
  2. Macro Outlook qui lance une Macro Excel qui veut envoyer un mail = Bug
    Par Lameth dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/07/2008, 11h21

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