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

AppleScript Discussion :

Code AS commun pour Imprimer => PDF - pour Excel 2011 et 2016


Sujet :

AppleScript

  1. #1
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut Code AS commun pour Imprimer => PDF - pour Excel 2011 et 2016
    Bonjour PBELL,
    Me revoilà

    En cherchant à droite, à gauche sur le net j'ai commencé à faire un code AS pour pouvoir créer un PDF directement par la fenêtre imprimer.
    Mon problème c'est que sur Excel 2016, la fenêtre imprimer à légèrement été modifier (cf Captures écran Excel 2011 et 2016) + les restrictions avec SandBox d'apple,
    qui font que la procédure de l'utilisation d'un AS dans Excel Mac 2016 a changé.

    Ci-dessous 2 liens concernant le vba qui permettent de comprendre le pourquoi du comment et le fonctionnement dans Excel 2016 pour un AS :
    https://dev.office.com/blogs/VBA-imp...in-Office-2016
    https://msdn.microsoft.com/fr-fr/lib.../mt654021.aspx

    • Mise à part "Enregistrer en PDF …", j'aimerais passer en paramètres les options encadrées en rouge :
    - Pages de : X à X
    - Imprimer : "Sélection" , "Feuilles sélectionnées", "Classeur entier"
    - Mettre à l'échelle

    • concernant "Masquer l'extension", j'aimerai que celle ci ne soit pas masquée

    • J'utilise "Aller au dossier…" du Finder, dans la fenêtre pour faire le PDF afin de déterminer automatiquement le chemin passer en paramètre pour que le tout puisse se faire d'une traite

    • le nom du fichier sera passé en paramètre aussi

    Le code commencé pas tout à fait au point (en test) :
    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
    set SaveFolderPath to POSIX path of (choose folder with prompt "Select Folder to Save PDF Files")
     
    tell application "Microsoft Excel"
    	activate
    	tell application "System Events" to tell process "Microsoft Excel"
    		keystroke "p" using command down
    		click (menu button "PDF" of window 1)
    		click (menu item 2 of menu of menu button "PDF" of window 1)
    		keystroke "g" using {command down, shift down}
    		tell sheet 1 of window 1
    			set value of text field 1 to SaveFolderPath
    			-- ou -- keystroke "/users/kellyf/documents/projects/pdf2fmp/ImportCSV"
    			keystroke return
    		end tell
    		tell sheet 1 of window 1
    			keystroke "TOTO"
    			keystroke return
    		end tell
    	end tell
    end tell
    Les captures sur Excel 2011 :

    Nom : Excel imprimer.png
Affichages : 727
Taille : 114,8 Ko

    Nom : Excel PDF.png
Affichages : 648
Taille : 97,6 Ko

    La capture sur Excel 2016 :

    Nom : Excel 2016 imprimer.png
Affichages : 691
Taille : 80,7 Ko

    Voilà

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Le GUI stripping est effectivement la dernière solution. Microsoft indique que c'est à cause de la sandbox et du côté Apple, ils disent qu'il suffirait que Microsoft ajoute les commandes script nécessaire. Dialogue de sourd...depuis 1984 !

    Donc pas le choix !
    Le problème que tu vas rencontrer est que ce dialogue d'impression peut changer suite à des mises à jour Apple ou être différent selon les types d'imprimante.
    Pour le choix du dossier (commande g) et le nom du fichier, cela ne posera sans doute pas de problème à l'avenir, mais pour les pages de x à y, l'échelle et l'option classeur entier ou pas, on ne peut être certain à long terme.

    Pour cette partie là, j'essaierai de créer, en VBA, un workbook avec une seule feuille, seulement le format voulu et le nombre de pages voulu. Il restera donc à l'enregistré tel qu'il est avec le commande g et le nom.

    En dehors de cette remarque, ton script est correct.

  3. #3
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    Merci de ta réponse.
    Comme t'as pu le voir j'ai mis un max d'informations pour cerner au mieux le problème.
    Juste pour expliquer mon raisonnement, j'ai fait le script de tel maniere que les actions faites soit les mêmes que celles qui sont faites manuellement.
    Car quand ont fait ces manipulations manuellement le sandbox ne joue pas et on passe au travers (normalement).
    Mon problème se trouve surtout au niveau des 2 fenêtres "imprimer" entre Excel 2011 et Excel 2016 qui sont légèrement différente (cf captures post précédent) afin de pouvoir sélectionner les options énumérées précédemment.
    De plus sur Excel 2016 (sur mes tests chez moi) l'enregistrement du pdf ne se met pas au nom choisi, mais met le chemin du dossier choisi à la place du nom. Est ce que j'ai loupé qq chose ?

    Comment dois-je m'y prendre afin de pouvoir faire une sélection sur les options choisies comme par exemple :
    Imprimer : "Sélection" , "Feuilles sélectionnées", "Classeur entier" ???
    Cette option est différente entre Excel 2011 (coche de bouton radio) et 2016 (choix par liste déroulante).

    PS : J'ai vérifié à mon taf avec une imprimante différente et OS X différent , j'ai la même fenêtre "imprimer" sur Excel 2011

    Ryu

    Edit : pour le moment le seul moyen que j'ai trouvé sur Excel 2011 dans la fenêtre imprimer pour sélectionner soit la feuille soit la plage ou le classeur (par défaut la feuille est sélectioné) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tell application "Microsoft Excel"
    	activate
    	tell application "System Events" to tell process "Microsoft Excel"
    		keystroke "p" using command down
    		repeat 10 times
    			keystroke tab
    		end repeat
    		--key code 125 -- Classeur entier
    		key code 126 -- Sélection
    	end tell
    end tell
    As tu quelque chose de mieux à me proposer ?
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  4. #4
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonsoir PBELL,

    Concernant la proposition que tu m'as faite :
    Pour cette partie là, j'essaierai de créer, en VBA, un workbook avec une seule feuille, seulement le format voulu et le nombre de pages voulu. Il restera donc à l'enregistré tel qu'il est avec le commande g et le nom.
    Elle ne me convient pas car, j'aimerai plutôt un code général qu'une personne lambda puisse utiliser directement


    Le GUI stripping est effectivement la dernière solution. Microsoft indique que c'est à cause de la sandbox et du côté Apple, ils disent qu'il suffirait que Microsoft ajoute les commandes script nécessaire. Dialogue de sourd...depuis 1984 !
    Peux tu me donner plus de détails sur les parties en Gras


    Sinon sur le même principe que Excel 2011 pour Excel 2016 pour l'option : "Imprimer :" "Sélection" , "Feuilles sélectionnées", "Classeur entier"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    tell application "Microsoft Excel"
    	activate
    	tell application "System Events" to tell process "Microsoft Excel"
    		keystroke "p" using command down
    		repeat 10 times
    			keystroke tab
    		end repeat
    		--key code 125 -- Classeur entier
    		key code 126 -- Sélection
    		key code 126 -- Sélection
    		key code 76
    	end tell
    end tell
    Qu'en penses tu ? Apparement on peut accéder à ces options de cette manière. je ne pense pas que cela soit la meilleure façon mais ça marche …

    Je suis tombé sur un lien parlant de print settings, mais si j'ai bien compris cela ne permet pas d'avoir toutes les options,
    mais seulement celles par défaut à tout logiciel, et non celles qui sont spécifiques à Excel.

    Voilà, je suis preneur de toutes nouvelles idées/approches afin que je puisse arriver au résultat souhaité … si possible …

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  5. #5
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonsoir,

    j'ai pas abandonné le post, je suis toujours dans mes recherches afin de résoudre ce qui peut être bloquant …

    Ma question, et elle est importante, j'aimerai savoir si il est possible d'avoir un fichier AppleScript ".scpt" dans un emplacement précis et de lui envoyer des instructions à faire au lieu que celles-ci soient directement dedans ??
    Si oui, comment faut il procéder ??

    merci

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  6. #6
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    J'ai 2 interprétations de ta demande:
    1) est-il possible, dans un script de lancer une autre application (écrite en Applescript ou pas) ?
    2) est-il possible, dans un script, d'appeler des fonctions écrite en Applescript, mais situées dans une autre fichier Applescript.

    Les réponses sont oui et oui !

    Dans le 1, il est toujours possible de lancer une autre application: via la fonction open, ou encore avec un do shell script si tu dois passer des arguments.

    Dans le 2, il faut utiliser les librairies. Tu as un script qui contient plein de handlers fonctions ou routines: c'est une bibliothèque de tes propres fonctions.
    Et tu as ton script principal qui charge (instruction "load") cette bibliothèque, et utilise les fonctions / routines, comme si elles faisaient partie de ce script principal.
    L'avantage est important car en cas de bug tu dois juste corriger ta bibliothèque est tous les script qui l'utilisent seront fonctionnels (ou auront un nouveau bug )

    Cordialement

  7. #7
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,
    Merci de ta réponse cela m'ouvre de nouveau horizon, et c'est bon de le savoir
    Je n'hésiterai pas à les utiliser.

    Sinon je me suis peut être mal exprimé.
    Si je fais mon script dans Excel via MacScript, est il possible d'envoyer les actions de MacScript dans un fichier situé à emplacement défini ?

    Même si pour cela il faut, à tout hasard, envoyer le script dans le presse papier, qui est récupérer par ledit fichier (activer par MacScript) qui celui-ci transforme les données du presse papier en action ? Je sais c'est peut-être tiré un peu par les cheveux. Mais si on se pose pas la question vu mon faible niveau, je peux passer à côté.
    Ryu

    Edit : pour être plus précis :
    Avec Excel 2016 on est quasi obligé par passer par "AppleScriptTask" (d'ailleurs ce qui est embettant si j'ai bien compris, on ne peut qu'envoyer qu'un seul paramètre1),
    où les fichiers ".scpt" sont mis dans le dossier "com.microsoft.Excel".
    j'aimerai créer un fichier "type" en ".scpt" dans ledit dossier et pouvoir envoyer les actions faites dans Excel en MacScript sur ce fichier qui lui ce chargera effectuer les actions que MacScript lui transmettra

    1 A titre d'information voilà les paramètres que l'on peut mettre, c'est le 3è qui peut être bloquant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myScriptResult = AppleScriptTask ("Fichier.scpt", "NomDuScriptDansleFichier", "un seul parmètre en string")
    c'est l'une des raisons pour laquelle je veux envoyer mes action de MacScript sur le fichier qui lui les executera
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  8. #8
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir,

    Citation Envoyé par RyuAutodidacte Voir le message
    Avec Excel 2016 on est quasi obligé par passer par "AppleScriptTask" (d'ailleurs ce qui est embettant si j'ai bien compris, on ne peut qu'envoyer qu'un seul paramètre1),
    où les fichiers ".scpt" sont mis dans le dossier "com.microsoft.Excel".
    j'aimerai créer un fichier "type" en ".scpt" dans ledit dossier et pouvoir envoyer les actions faites dans Excel en MacScript sur ce fichier qui lui ce chargera effectuer les actions que MacScript lui transmettra

    1 A titre d'information voilà les paramètres que l'on peut mettre, c'est le 3è qui peut être bloquant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myScriptResult = AppleScriptTask ("Fichier.scpt", "NomDuScriptDansleFichier", "un seul parmètre en string")
    c'est l'une des raisons pour laquelle je veux envoyer mes action de MacScript sur le fichier qui lui les executera
    Effectivement, Apple a renforcé la sécurité ce qui restreint les accès. D'où l'obligation de passer par le dossier com.microsoft.Excel.
    Si tu essayes de contourner, outre l'aspect sécurité, tu sera un jour ou l'autre confronté à une porte que Apple et/ou Microsoft te fermeront.

    Il reste toutefois des alternatives indirectes pour passer plusieurs arguments.

    Par exemple ton unique argument peut être un fichier de données qui contient plein d'arguments. Le VBA Excel peut écrire de fichier avec un format texte ou mieux html. Le ApplescriptTask n'envoie que le chemin/nom de ce fichier, qui sera lu par l'Applescript.
    Ainsi, l'Applescript pourra lire toutes les données du fichier comme arguments.
    Cela nécessite de bien réfléchir à ce fichier, son contenu,...etc car on peut avoir un nombre variable d'arguments !
    Il faut aussi penser à son emplacement (sans doute accessible dans le domaine du user). il est possible aussi de le supprimer par script, une fois la lecture des arguments faite.

    Cordialement

  9. #9
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,
    Le but n'est pas de contourner les protections mais de créer une passerelle avec les fichiers scpt se trouvant dans le dossier de Microsoft pour essayer de gagner en souplesse, et pas être à chaque fois obligé de créer un fichier type propre à une action (global) précise.

    Après il reste quelques actions pouvant se faire avec MacScript, par exemple j'ai pu adapter pour Excel 2016 le MacScript que ja vais fait sur Excel 2011 pour getopenfilename.

    J'ai fait un test dans le sens que tu proposes où j'ai passé tous les arguments dans un string qui eux sont transformés en liste pour que chaque éléments de la liste correspondent à un argument.

    Je viens d'avoir une nouvelle idée, un peu comme tu le proposes dans l'idée mais de manière différente, créer un fichier où l'on passera pas les arguments mais directement le script que l'on a écrit dans Excel et enregistrer ce fichier en scpt dans le dossier de Microsoft que l'on pourra activer avec AppleScriptask.

    Je n'ai jamais fait encore cela et je n'ai aucune idée de comment m'y prendre pour le moment …
    Qu'en penses tu??
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  10. #10
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Attention, le fichier sept n'est pas simplement le script sous forme de texte, mais c'est aussi une partie cachée qui contient la version compilée de ce script.

    Don enregistrer depuis Excel un fichier texte avec des instructions AS, n'en fera pas un script exécutable.

    Cordialement

  11. #11
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,
    j'ai trouvé le code pour Excel pour créer un fichier, par contre celui-ci serait enregistré en ".scpt" et non en ".txt".
    J'aurais une variable du type string dans Excel que je mettrai dans le fichier avec :
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Close
    Open chemin & "monfichier.scpt" For Output As #1
      Print #1, mavariabletexte
      Close
    J'ai testé avec Excel 2011 et quand je clique sur le fichier créer, il est bien reconnu en tant que fichier AppleScript puisque l'éditeur de script l'ouvre directement.
    Après je me peux tromper comme je n'ai pas fini de tester.

    Je me suis aperçu que Ron de Bruin à eu aussi l'idée de pouvoir créer un script depuis Excel.
    J'avoue ne pas avoir encore tout compris, mais j'y travaille.
    C'est tout en bas du lien :https://www.rondebruin.nl/mac/applescripttask.htm

    Edit : Bon je crois avoir compris, le fonctionnement dans le principe c'est presque pareil (créer un fichier avec son code) je voulais le faire directement par vba et lui le fais via le terminal aidé par un fichier déjà en place.

    Edit 2 :
    Citation Envoyé par RyuAutodidacte Voir le message
    J'ai fait un test dans le sens que tu proposes où j'ai passé tous les arguments dans un string qui eux sont transformés en liste pour que chaque éléments de la liste correspondent à un argument.
    voilà ce que j'avais fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    on Test(Listes)
    	set {myTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {","}}
    	set myList to text items of Listes
    	set AppleScript's text item delimiters to myTID
    	do shell script "mkdir " & quoted form of (item 1 of myList & item 2 of myList)
    end Test
    Est ce correct, où y a t-il une meilleur façon de l'écrire ?
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  12. #12
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour PBELL,

    toujours pas de réponse
    bon, je sais j'ai fait une aparté mais nécessaire si je veux exécuter un script à partir de Excel 2016 et
    pourvoir continuer mon post sur la création d'un pdf à partir soit de Excel 2011 ou 2016

    Donc j'ai fait ma propre procédure à partir du script AS dans mon post précédent (origine macscripter.net - je mettrai le lien) et
    la fonction osacompile (utilisation en terminal ou AS avec do shell script - donc la même que Ron de Bruin utilise) qui me permet d'avoir le même résultat
    que mon code vba de mon post précédent (sauf que celui-ci est bloqué avec l'utilisation d'excel 2016)
    je mettrai cette procédure ce soir … !

    - j'aimerai savoir, si le code AS montré dans mon post précédent (celui de macscripter.net) est correct où y a t-il une façon de l'écrire de manière plus optimisé ??

    Pour :
    - Dans le 1, il est toujours possible de lancer une autre application: via la fonction open, ou encore avec un do shell script si tu dois passer des arguments.
    As tu un exemple ??

    - j'aimerai savoir comment on fait pour cibler, comme dans les captures d'écran de la fenêtre "Imprimer" les boutons radios, les cases à cocher,
    les textbox et les menus déroulant en AS ?? y a t il une méthode, un lien expliquant cela … ? sinon comment fait on ?

    Ryu

    Edit : ma procédure (PS : le lien de macscripter.net => http://macscripter.net/viewtopic.php?id=12962) :



    Excel 2016 - utiliser un script Applescript directement depuis Excel


    ——————————————————————————————————————————————————————


    Code VBA - Exemple pour création d’un fichier Applescript afin de l’utiliser dans Excel 2016


    Sub CreaFicScptAndRun()
    Dim MonScript As String, MonFichierScpt As String, CreerMonScript

    InsertScript = "on RunMyScritp()" & Chr(13) 'Début du Script => NE PAS MODIFIER

    'C’EST ICI QUE l’ON CREER SON SCRIPT - METTRE SON SCRIPT APRES : "InsertScript & "
    CreaMyscript = InsertScript & "Display Alert ""OK ca marche"""

    InsertScript = CreaMyscript & Chr(13) & "End RunMyScritp" 'Fin du Script => NE PAS MODIFIER

    MonFichierScpt = "CoucouOK.scpt"
    CreaFicScript = AppleScriptTask("GetMyScript.scpt", "CreaMyScript", InsertScript & "|" & MonFichierScpt) 'Création du fichier scpt avec le script défini
    RunScript = AppleScriptTask("CoucouOK.scpt", "RunMyScritp", "") 'lancement du script que l'on a créer

    EndSub


    ——————————————————————————————————————————————————————


    Avec l’éditeur de Script Applescript


    Code du fichier AppleScript permettant de créer un script dans un fichier


    1 - Démarrer un l’éditeur de script AppleScript


    2 - Créer un nouveau fichier, puis copier dans l’éditeur le code ci-dessous : « Installation du dossier « com.microsoft.Excel » et du fichier « GetMyScript.scpt » … » afin de l’exécuter


    3 - Le dossier « com.microsoft.Excel »et le fichier « GetMyScript.scpt » ont été créé dans : Users/UserName/Library/Application Scripts/com.microsoft.Excel/ - (UserName = Nom de la session OS X)


    « GetMyScript.scpt » sert à créer un fichier AppleScript que l’on aura compilé avec du code AS via VBA afin de pouvoir exécuter directement un script AppleScript par la suite depuis une macro Excel


    ——————————————————————————————————————————————————————


    Code du fichier « GetMyScript.scpt »


    on CreaMyScript(myparam)
    set {myTID, AppleScript'stext item delimiters} to {AppleScript'stext item delimiters, {"|"}}
    set myList to text items of myparam
    set AppleScript'stext item delimiters to myTID
    set MonScript to item 1 of myList
    set fichier to item 2 of myList
    set userName to short user name of (system info)
    set chm to "/Users/" & userName & "/Library/Application Scripts/com.microsoft.Excel/"
    --set monfichier to "MonScpt.scpt"
    do shell script "osacompile -e" & quoted form of MonScript & " -o " & quoted form of (chm & fichier)
    end CreaMyScritp


    ——————————————————————————————————————————————————————


    Installation du dossier « com.microsoft.Excel » et du fichier « GetMyScript.scpt » - création de ceux-ci si il n’existe pas


    set userName to short user name of (system info)
    set chm to "/Users/" & userName & "/Library/Application Scripts/com.microsoft.Excel/"


    set VeriFicExiste to do shell script " test -f " & quoted form of (chm & "GetMyScript.scpt") & "; echo $?"


    set VerifDosExiste to do shell script "test -d " & quoted form of chm & "; echo $?"


    set CreaFicScript to quoted form of "on CreaMyScript(myparam)
    set {myTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {\"|\"}}
    set myList to text items of myparam
    set AppleScript's text item delimiters to myTID
    set MonScript to item 1 of myList
    set fichier to item 2 of myList
    set userName to short user name of (system info)
    set chm to \"/Users/\" & userName & \"/Library/Application Scripts/com.microsoft.Excel/\"
    do shell script \"osacompile -e\" & quoted form of MonScript & \" -o \" & quoted form of (chm & fichier)
    end CreaMyScritp"


    if VerifDosExiste = "0" then
    display alert "Le dossier \"com.microsoft.Excel\" existe déjà"
    if VeriFicExiste = "0" then
    display alert "Le fichier \"GetMyScript.scpt\" existe déjà"
    else
    do shell script "osacompile -e " & CreaFicScript & " -o " & quoted form of (chm & "GetMyScript.scpt")
    display alert "Le fichier \"GetMyScript.scpt\" a été créé"
    end if
    else
    do shell script "mkdir " & quoted form of chm
    display alert "Le dossier \"com.microsoft.Excel\" a été créé"
    do shell script "osacompile -e " & CreaFicScript & " -o " & quoted form of (chm & "GetMyScript.scpt")
    display alert "Le fichier \"GetMyScript.scpt\" a été créé"
    end if



    • N'hésite pas pour les commentaires …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  13. #13
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Je n'ai pas répondu car j'étais en déplacement. Le code à l'air correct, mais je me demande si il ne faut pas un espace, dans le mkdir, entre les 2 paramètres (item 1 et item 2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    do shell script"mkdir "&quoted formof(item1of myList & " " & item2of myList)
    Je suppose que tes items sont des chemins Unix.

    Pour accéder aux boutons et menu d'un dialogue, si ce n'est pas directement scriptable, il faut passer par la GUI (Graphique User Interface), c'est à dire simuler les actions de l'utilisateur (tab pour passer d'un champ à l'autre, caractère de clavier, click sur des menus,...).
    Cette méthode doit être utilisée en dernier recours, si l'application que tu cherches à contrôler n'est pas scriptable.

    En effet, l'inconvénient de cette méthode est qu'elle est dépendante des contrôles des dialogues de l'application tierce. Dans ton cas, si tu manipules le dialogue d'impression (nb de copie, page de x à y,...), la moindre modification de ce dialogue par Apple (pour la partie standard du dialogue d'impression) ou par l'éditeur du driver d'imprimante pourra impacter le fonctionnement de ton script.
    Par exemple, tu peux accéder au champ N° 4 du dialogue qui contient le nombre de copie, mais si la version suivante du driver ajoute un nouveau champ, il est possible que le nombre de copies soit désormais le champ N°5 et ton script ne fonctionnera plus.
    (note: il est aussi possible d'adresser les champs par leur nom et pas par leur N°, mais le risque est identique avec en plus des problèmes de traduction!).

    Enfin, l'autre inconvénient est que tu dois autoriser ton script à le faire: Apple a renforcé la sécurité et impose des restrictions sur ce qu'un programme peut faire sur d'autres programmes...et ton script va agir via GUI sur d'autres programmes comme le dialogue d'impression.
    Donc il faudra que tu autorises ton script à accéder aux applications qu'il doit contrôler (Préférences Système / Sécurité).

    Voici, à titre d'exemple, l'utilisation de la GUI sur le dialogue d'impression de Photoshop:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        tell application "System Events"
    keystroke "p" using {command down} -- lance le dialogue d'impression et simule la saisie des paramètres
    delay 0.5 -- parfois système un peu lent !
            tell process "Photoshop"
    keystroke return-- click enter sur le premier dialogue d'impression de Photoshop
    -- dans le second dialogue d'impression, sélectionne "Premimum 10x15" dans le pop up menu de format papier
    click pop up button 2 of window 1 -- le Numéro varie selon le driver (5 sous Snowleopard, 4 sous Yosemite, 2 sous El Capitain)
                click menu item "Premium 10x15" of menu 1 of pop up button 2 of window 1 -- idem : changer le No du button
    keystroke return-- click enter sur le second dialogue
            end tell
        end tell
    J'ai choisi cet exemple sur un script que j'utilise depuis des années car il indique les changements de N° du menu de choix du type de papier selon les versions de système.

    Ta prochaine question sera sans doute, "comment connaître le N° du bouton, du menu,...?"

    Si tu télécharges xCode, il y a un utilitaire (de mémoire Accessibility inspector) qui permet de répondre à cette question en affichant les caractéristiques de l'objet survolé avec la souris.
    Sinon, tu fais par tâtonnement avec des scripts qui font des "get propreties of UI Element": dans le log du script, tu verra tout les objects d'interface graphique de la fenêtre, de l'onglet, du dialog...).

    Bon courage

  14. #14
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour PBELL,
    Merci pour cette réponse complète
    Concernant les 2 paramètres (item 1 et item 2), il n'y a pas d'espace, le test fonctionne avec les 2 paramètres suivant qui sont :
    - le dossier de destination
    - le nom du dossier à créer à l'interieur de celui-ci
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

Discussions similaires

  1. solution native pour imprimer un pdf sur une imprimante en Java
    Par thierry_b dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 04/05/2014, 03h00
  2. [WD-MAC 2004] VBA pour imprimer en PDF
    Par thais781 dans le forum VBA Word
    Réponses: 1
    Dernier message: 30/10/2013, 13h39
  3. Applet Java pour imprimer un PDF
    Par minikpitn dans le forum Applets
    Réponses: 2
    Dernier message: 05/03/2013, 23h11
  4. lien pour imprimer en pdf
    Par trago dans le forum IHM
    Réponses: 1
    Dernier message: 28/11/2009, 17h02
  5. Utilisation de Shell32.dll pour imprimer un pdf ?
    Par benoit16 dans le forum VBA Access
    Réponses: 1
    Dernier message: 10/01/2008, 16h11

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