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 :

PDF - Excel 2011 - Fusionner


Sujet :

AppleScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut PDF - Excel 2011 - Fusionner
    Bonjour,
    Je suis un habitué de Windows et pour un projet, on m'a demandé de faire de l'excel sous Mac.
    L'objectif du projet est d'extraire en PDF des onglets de ce fichier Excel.
    J'arrive à extraire ces onglets en passant par un workbook temporaire mais je n'arrive pas à fusionner en un seul PDF ceux qui sont générés par le workbook en question.

    Pour une question de fiabilité, j'utilise la fonction macscript car l'exportasformat en pdf plante au bout de quelques exportations et le printout ne fonctionne absolument pas.

    Si vous avez une solution (ou même plusieurs) je suis preneur.

    Merci d'avance.

  2. #2
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    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 : 606
    Par défaut
    Bonjour,
    Bienvenu sur ce forum.
    On peut envisager plusieurs possibilités, mais je suggère de faire cela pas à pas.
    De façon globale, tout ce qui peut être imprimé sur Mac (quelque soit l'application) peut être converti en PDF car Mac OS X contient un moteur PDF.
    Quand tu demandes "Imprimer", le dialogue d'impression contient toujours, en bas, un menu permettant de diriger l'impression sur un fichier PDF. Celui-ci contiendra toutes les pages à imprimer. Tu devras alors renseigner le nom et l'emplacement du futur PDF.

    Dans ton cas, il semble que tu veuilles automatiser cela sur plusieurs fichiers Excel. il faut donc trouver une astuce pour simuler.
    D'abord, la solution peut dépendre de la version Excel que tu as pour Mac. En effet, il faut que tu puisses demander à Excel, pour chaque fichier, de demander à imprimer "toutes les feuilles" dans le dialogue d'impression.
    Visiblement, sur ma Version (Mac 2011) cette fonction n'est pas scriptable (Microsoft ne l'a pas voulu ainsi !). Donc 2 solutions:
    1) tu lances une macro Excel qui va changer cela sur tous les fichiers (par exemple tous les fichiers Excel d'un dossier). Il faut que la macro enregistre ensuite chaque fichier pour garder le paramètre. Ensuite on aura plus qu'à imprimer tous les fichiers en PDF. Voici entre autre ce que doit contenir la macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Print_Current_Workbook()'Prints the current active workbook in Excel
    ActiveWorkbook.PrintOut
    End Sub
    2) on met directement dans le script Applescript, le clic sur ce paramètre. Pour cela, en script, il faut simuler le clic sur ce bouton après avoir simuler l'ouverture du dialogue d'impression. En appleScript, l'interface se simule par exemple comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        tell application "Microsoft Excel" to activate
        tell application "System Events"-- lance le dialogue d'impression et simule la saisie des paramètres
    keystroke "p" using {command down}
            tell process "Microsoft Excel"
    -- click sur le pop up bouton 5 de la fenêtre d'impression
    clickpop up button 5 of window 1
    keystroke return --valide avec Enter (donc imprime !)
            end tell
        end tell
    Bien sûr il faut trouver quel est le bouton à cliquer (son numéro,...) dans le dialogue d'impression de ta version Excel.
    L'inconvénient de cette seconde méthode est que cela ne va fonctionner que sur la version actuelle de ton Excel sa garantie pour le futur (si Microsoft décide de changer le bouton "imprimer toutes les feuilles") !

    Enfin, il faut imprimer en PDF. Là aussi 2 méthodes :
    1) tu continues dans le dialogue d'impression en simulant des clics et touches clavier pour sélectionner impression vers PDF avec le nom du fichier
    2) tu définis, avant le script, une imprimante PDF par défaut et tu ne fais qu'imprimer. Je te conseille cette méthode.

    Comment avoir une imprimante PDF ?
    Pour cela, il faut que tu télé-charge du Net une imprimante PDF Mac CUPS (standard d'impression). Tu mets cette imprimante par défaut avant de lancer ton script.
    L'inconvénient est que les drivers CUPS enregistrent toujours le fichier résultant au même endroit et avec un nom pas toujours clair
    Par défaut, le fichier PDF arrive dans le dossier /Private/var/spool/cups-pdf.
    J'ai crée un alias de ce dossier dans le share folder (plus simple pour accéder via script)
    Pour chaque fichier PDF résultant, il faudra changer le nom (par copie de celui du fichier Excel d'origine Excel)

    Enfin, pour être complet, il faudra que tu fasses une boucle sur les fichiers Excel d'un dossier sélectionné. Cette partie est très facile en AppleScript.

    Donc, ce qu'il faut en résumé c'est :
    1) que tu indiques ta version Excel Mac (si Mac 2011, je peux trouver le bouton à cliquer pour "toutes les feuilles", sinon on va tâtonner ensemble )
    2) télécharger un CUPS-PDF pour Mac (j'ai la version 1.0), l'installer, puis définir, dans un de tes dossiers utilisateur, un dossier alias de /private/var/spool/cups-pdf
    3) mettre cette imprimante par défaut et tester en impression directe d'un fichier Excel que tu as bien un fichier PDF résultant dans le dossier sus-nommé
    Une fois là, on fera un script de boucle sur les fichiers avec impression.

    A titre d'exemple, j'ai utilisé cette technique pour convertir une liste de fichiers Excel en PDF que je viens d'adapter pour toi. Le script ci-dessous mémorise l'imprimante par défaut, met la CUP-PDF, imprime un doc Excel et change le nom du fichier PDF pour le mettre identique à celui du fichier Excel d'origine :
    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
    set ExcelApp to (path to applications folder as text) & "Microsoft Excel.app"-- changement de l'imprimante par défaut
    tell application "Printer Setup Utility"
    -- lit le printer actuel pour le remettre
        set Mon_Printer to current printer
        set the current printer to first printer whose name contains "CUPS"
    end tell
    
    
    set Mon_Dossier to choose folder with prompt "Dossier avec les fichier Excel"
    tell application "Finder" to set Mes_Docs to every item of Mon_Dossier
    
    
    -- boucle sur les fichers
    repeat with Mon_Excel in Mes_Docs
    -- ouverture du fichier
        tell application "Finder" to openfileMon_ExcelusingExcelApp
    -- impression du document de l'application
        tell application "Microsoft Excel"
    activate
            set Mon_Doc to get name of front document
    -- supprime l'extension du nom du document (on suppose .xls)
            set Mon_Doc to text 1 thru ((length of Mon_Doc) - 5) of Mon_Doc
    print front document without print dialog
        end tell
        
        tell application "Printer Setup Utility"
    -- remet le printer par défaut
            set the current printer to Mon_Printer
        end tell
        
    -- récupération de l'alias du fichier PDF : mon alias dossier CUPS est dans mon share folder
        tell application "System Events" to set Moi to (name of current user as text)
        set Chemin to (((path to shared documents folder) as string) & "CUPS-PDF:" & Moi & ":") as alias
        tell application "Finder"
            set Nb to 0
    -- boucle pour attendre la création du fichier PDF
            repeat until Nb > 0
                set F to (every item of folder Chemin whose name contains Mon_Doc)
                set Nb to count of F
                if Nb > 1 then set the name of F to Mon_Doc & ".PDF"
            end repeat
        end tell
    -- il est fortement conseillé de le changer de place pour éviter que des fichiers (contenant la même partie de nom) restent dans ce dossier
        
    end repeat -- fichier Excel suivant
    Cordialement

  3. #3
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Bonsoir,
    Tout d'abord, merci pour ta réponse complète et précise mais j'ai déjà plus ou moins la même chose.
    Actuellement, j'arrive à générer mes PDFs mais en fichiers séparés (un pdf par worksheet).
    Ce que je cherche à faire, c'est fusionner des PDFs entre eux.

    L'imprimante par défaut que tu m'as indiqué ne correspond en aucun cas car si l'imprimante par défaut est une imprimante "réelle" et non pdf (et je ne souhaite pas modifier cette fameuse imprimante par défaut).

    Encore merci d'avance.

  4. #4
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    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 : 606
    Par défaut
    Bonjour,
    Bon ! Je suis parti un peu loin, j'ai mal compris ta demande...

    Si tu as déjà les documents en format PDF et que tu souhaites simplement les combiner entre, la solution est beaucoup plus simple !!

    Ouvre le logiciel Automator (fourni par Apple, dossier Applications), et tu crées un processus qui combine 2 actions :
    Action 1 :sélectionner les éléments du finder (les fichiers PDF que tu as déjà)
    Action 2 : Combiner les pages de documents PDF

    C'est tout simple, c'est tout prêt, servir chaud

    Cordialement

    PS : si tu ne connais pas Automator, ouvre le, dans le premier dialogue, demande à faire un processus, puis suit l'aide. C'est de la programmation par bloc pour non informaticien

  5. #5
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Bonjour,
    Merci pour ta réponse une nouvelle fois
    J'ai vu des forums qui passaient par Automator en effet.
    Avec mon collègue, on a réussi à faire cette fusion via ce logiciel manuellement mais on n'a pas trouvé comment obtenir le script qui permet de le faire.
    Bon par contre, c'est un peu comme si c'était la première fois de notre vie qu'on touchait à un MAC

    On va s'orienter dans cette solution. Par contre, s'il y a un endroit où l'on pourrait récupérer le code d'Automator, ça serait le pied.
    Cordialement,

  6. #6
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    On a réussi à trouver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    macscript("do shell script ""\""/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py\"" -o " & folder_name & Replace(YourPDFName, " ", "_") & ".pdf " & temp_name & "*.pdf""")
    Merci quand même

  7. #7
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    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 : 606
    Par défaut
    Bonsoir,
    Juste pour votre curiosité, le fichier PDF joint décrit en 2 pages, avec copies d'écran, comment faire le script Automator de fusion des fichiers PDF pour en faire une application simple pour l'utilisateur.

    Cordialement
    Images attachées Images attachées

  8. #8
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Merci pour le PDF. On avait réussi à faire cela en espérant pouvoir en ressortir un script que l'on pouvait insérer directement dans notre code VBA en fait.
    Mais je vais le garder dans mes dossiers. Il est bien expliqué
    Dans le cas où tu veux le réutiliser, il y a une coquille à la fin où tu notes "est" au lieu de "et".

    Encore merci pour les indications que tu m'as donné.

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

Discussions similaires

  1. JSF Richfaces PDF Excel
    Par majidiabdo dans le forum JSF
    Réponses: 24
    Dernier message: 19/09/2014, 15h50
  2. [XL-MAC 2011] PDF - Excel 2011 - Fusionner
    Par Gado2600 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/03/2014, 17h38
  3. [VBA Mac 2011] Mac Excel 2011 & VBA
    Par heraults dans le forum Général VBA
    Réponses: 1
    Dernier message: 15/11/2010, 12h43
  4. Extended datatable : PDF / EXCEL
    Par haskouse dans le forum JSF
    Réponses: 7
    Dernier message: 24/08/2009, 17h54
  5. [VB.net] Lecture fichier excel, cellule fusionnée
    Par UNi[FR] dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/08/2006, 13h12

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