XL pour MAC Macro simple Enregistrer sous PDF dans Bureau avec même nom

Marowak

XLDnaute Nouveau
Bonjour à tous,

J'utilise Excel 2016 pour Mac, version 16.16.24.

Je vous sollicite car j'aurais grand besoin d'une macro pour me simplifier la vie au quotidien.

Je dois enregistrer des documents Excel (ou Word) au format .pdf sur mon bureau de manière extrêmement récurrente.

Etant un noob, mais connaissant tout de même l'existence des macros, j'aurais voulu savoir si vous aviez une idée pour créer une macro utilisable sur tous types de documents (pas un classeur spécifique) et qui fasse les choses suivantes:

- Clic sur Enregistrer sous
- Dossier de destination : Bureau
- Format du fichier : PDF
- Nom du fichier : le même que le fichier Excel (ou Word) source

Merci par avance de votre aide !

Bien à vous,
Marowak
 

Marowak

XLDnaute Nouveau
@job75
Dernière tentative en utilisant le chemin indiqué dans votre post #11.

Remplacez :
VB:
chemin = ThisWorkbook.Path & Application.PathSeparator
par :
VB:
chemin = "/Users/info/Desktop/"

Je viens de faire le test de la manière suivante:

- ouvrir "Pilote PDF(2).xlsm" et cliquer sur "Activer les macros"
- aller dans l'onglet Affichage et cliquer sur "Afficher les macros"
- dans la fenêtre qui s'ouvre, cliquer sur Modifier en ayant la macro "PDF_Excel" surlignée en bleue
- dans la fenêtre "Microsoft Visual Basic" avec le nom "Pilote PDF(2)", remplacer chemin = ThisWorkbook.Path & Application.PathSeparator par chemin = "/Users/info/Desktop/"
- cliquer sur Enregistrer et fermer l'éditeur de macros
- laisser "Pilote PDF(2).xlsm" ouvert, puis ouvrir un fichier .xlsx au hasard
- appuyer sur Ctrl + E

... et là, apparaît le même message et le même code d'erreur 1004, en sachant que la ligne de code mise en cause par le débogueur n'est pas chemin = ThisWorkbook.Path & Application.PathSeparator mais ce qui est surligné en jaune dans mon screen, à savoir:

wb.Worksheets(1).ExportAsFixedFormat xlTypePDF, chemin & Left(wb.Name, InStrRev(wb.Name, ".") - 1) & ".pdf", _
Quality:=xlQualityMinimum, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False


@kiki29
Salut, as-tu lu le Post#8 et testé les 4 procédures du fichier Mac2PDF.xlsm ?

Désolé, j'avais raté ton post ! Merci pour ton aide :)
Dois-je télécharger le fichier "Mac2PDF.xlsm" de la même façon que "Pilote PDF(2).xlsm"?
Faut-il supprimer "Pilote PDF(2).xlsm du bureau, ainsi que les deux fichiers que job75 m'avait envoyés?
Comment lancer les macros ensuite, vu qu'il y en aura 4 différentes ? Y a-t-il un raccourci distinct pour chacune d'entre elles?
Désolé si j'ai l'air d'un gros noob, mais tout ceci n'est pas évident pour moi !
 

Marowak

XLDnaute Nouveau
Salut, as-tu lu le Post#8 et testé les 4 procédures du fichier Mac2PDF.xlsm ?

@kiki29
Hourra ! En utilisant la macro de ton fichier, nommée "SaveActiveSheetAsPDFInMacExcel2016", une version PDF du fichier Excel ouvert se créer dans un dossier dont une gentille fenêtre m'a indiqué l'emplacement (plus qu'à faire un alias).

Du coup, je te remercie du fond du coeur car c'est une sacrée avancée, mais j'aurais encore une petite demande : pourrait-on empêcher la macro d'ajouter à la fin du nom du dossier la date et l'heure de la création du PDF, car je n'en ai pas utilité?

Sinon, pouvoir faire du Bureau le fichier de destination serait idéal, mais je ne veux pas en demander trop non plus.. !

En effet, ça s'affiche comme ça: NOMDUFICHIER.xlsx 12-août-2020 10-19-30.pdf

MERCI ENCORE :D ET @job75 AUSSI ;)
 

kiki29

XLDnaute Barbatruc
Re, c'est une version pdf de la feuille sélectionnée au lancement de la macro. Si tu sélectionnes la Feuil2 puis lances la macro ce sera elle qui sera sauvée en pdf.

VB:
FileName = ActiveSheet.Name & ".pdf"

Maintenant il te reste à tester les 3 autres ...
 
Dernière édition:

Marowak

XLDnaute Nouveau
Re,

Là, je dois remplacer FileName:= _ par FileName = ActiveSheet.Name & ".pdf" ?

Parce que quand je le fais, ça me dit que ça va réinitialiser le projet et la ligne devient rouge.
Peut-être que je fais mal quelque chose...

Sinon, j'ai bien vu les trois autres macros. Il y en a une pour Word, et les deux autres, c'est pour enregistrer plusieurs fichiers en même temps, c'est ça ?
 

Marowak

XLDnaute Nouveau
Re,

Tu as aussi des problèmes avec l'Anglais visiblement.

Non, pas de problème avec l'anglais, c'est parce que j'étais entré dans Pas à pas et non dans Modifier dans le menu des macros, du coup je ne voyais pas la même chose que toi.

Donc, c'est bon pour le code, je suis arrivé à retirer la date et l'heure sans avoir des lignes rouges.

Par contre, à un moment, j'étais arrivé à garder le nom du fichier Excel comme nom du fichier PDF, mais là ça me met Feuil1 ...

En regardant le code, je vois que c'est : FileName = ActiveSheet.Name & ".pdf"

C'est peut-être ça qu'il faut modifier pour avoir le nom du fichier, et non celui de la feuille.

Pourrais-tu m'aider ?
 

Marowak

XLDnaute Nouveau
Merci pour Google Trad :')

C'est pas trop l'anglais qui me fait défaut, c'est surtout la logique de la programmation qui me perd.

Par contre, c'est vrai que j'avais pas saisi que Workbook désignait le fichier en entier, j'aurais bien pensé que c'était désigné comme "File" tout simplement, vu qu'on voit souvent FileName, etc.

Du coup, c'était la macro d'à côté pour avoir le nom qu'il faut, à savoir :
SaveActiveWorkbookAsPDFInMacExcel2016

D'ailleurs, je suis pas trop débile, tu vois, j'ai même réussi à virer tout seul le message qui me dit que c'est dans tel dossier (une fois le raccourci fait, ça ne sert à rien de se le faire rappeler à chaque fois).

Par contre, je sais pas trop si c'est possible de virer automatiquement l'extension .xlsx qui reste avant l'extension .pdf, parce qu'elle est pas trop utile du coup, une fois la conversion faite.
 
Dernière édition:

Marowak

XLDnaute Nouveau

Certes, mais ce fut le choix de mon entreprise, et non le mien :)

Bien consulté tes deux sites, mais sont-ils supposés me donner les ressources nécessaires pour créer la même macro sur Word 2016 pour Mac ?

J'y trouve en effet des dénominations bien utiles, telles que wdFormatPDF, mais la structure d'une macro ne consiste hélas pas que de cela.

Devrais-je m'inspirer de la macro Excel dont je dispose grâce à vous ?
 

kiki29

XLDnaute Barbatruc
Re, à tenter sans garantie : SaveDocumentAsPDFInPCWord2007

VB:
Option Explicit

Private Function CreateFolderinMacOffice2016(NameFolder As String) As String
Dim OfficeFolder As String
Dim PathToFolder As String
Dim TestStr As String

    OfficeFolder = MacScript("return POSIX path of (path to desktop folder) as string")
    OfficeFolder = Replace(OfficeFolder, "/Desktop", "") & _
                   "Library/Group Containers/UBF8T346G9.Office/"

    PathToFolder = OfficeFolder & NameFolder

    On Error Resume Next
    TestStr = Dir(PathToFolder & "*", vbDirectory)
    On Error GoTo 0
    If TestStr = vbNullString Then
        MkDir PathToFolder
    End If
    CreateFolderinMacOffice2016 = PathToFolder
End Function

Sub SaveDocumentAsPDFInPCWord2007()
Dim FileName As String
Dim FolderName As String
Dim Folderstring As String
Dim FilePathName As String

    ThisDocument.PageSetup.Orientation = wdOrientPortrait

    FolderName = "PDFSaveFolder"
    FileName = ThisDocument.Name & ".pdf"

    Folderstring = CreateFolderinMacOffice2016(NameFolder:=FolderName)
    FilePathName = Folderstring & Application.PathSeparator & FileName

    ThisDocument.ExportAsFixedFormat OutputFileName:=FileName, _
                                     ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
                                     wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
                                     Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
                                     CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
                                     BitmapMissingFonts:=True, UseISO19005_1:=False
End Sub
 
Dernière édition:

Marowak

XLDnaute Nouveau
Re, à tenter sans garantie : SaveDocumentAsPDFInPCWord2007

VB:
Option Explicit

Private Function CreateFolderinMacOffice2016(NameFolder As String) As String
Dim OfficeFolder As String
Dim PathToFolder As String
Dim TestStr As String

    OfficeFolder = MacScript("return POSIX path of (path to desktop folder) as string")
    OfficeFolder = Replace(OfficeFolder, "/Desktop", "") & _
                   "Library/Group Containers/UBF8T346G9.Office/"

    PathToFolder = OfficeFolder & NameFolder

    On Error Resume Next
    TestStr = Dir(PathToFolder & "*", vbDirectory)
    On Error GoTo 0
    If TestStr = vbNullString Then
        MkDir PathToFolder
    End If
    CreateFolderinMacOffice2016 = PathToFolder
End Function

Sub SaveDocumentAsPDFInPCWord2007()
Dim FileName As String
Dim FolderName As String
Dim Folderstring As String
Dim FilePathName As String

    ThisDocument.PageSetup.Orientation = wdOrientPortrait

    FolderName = "PDFSaveFolder"
    FileName = ThisDocument.Name & ".pdf"

    Folderstring = CreateFolderinMacOffice2016(NameFolder:=FolderName)
    FilePathName = Folderstring & Application.PathSeparator & FileName

    ThisDocument.ExportAsFixedFormat OutputFileName:=FileName, _
                                     ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
                                     wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
                                     Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
                                     CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
                                     BitmapMissingFonts:=True, UseISO19005_1:=False
End Sub

Salut et merci pour ton aide !

Je viens de créer la macro avec le nom que tu as précisé : SaveDocumentAsPDFInPCWord2007.

Après quoi j'ai copié le contenu du code dans Microsoft Visual Basic en prenant bien soin de ne pas laisser deux fois "End Sub" à la fin (il y a toujours un peu de code pré-rempli).

Conclusion : Erreur de compilation. Nom ambigu détecté : SaveDocumentAsPDFInPCWord2007

Comment lever cette ambigüité ? Dois-je renommer la macro en SaveDocumentAsPDFInWord2016 et changer le nom dans le code également ?

Quelle histoire, ces macros ...

PS : En tentant de renommer, je viens d'avoir le code d'erreur : Sub ou Fonction non définie
 

Discussions similaires