Nommer et enregistrer un fichier PDF
Bonjour,
Je sais lancer une macro pour enregistrer un fichier via PDF creator, mais je dois saisir manuellement le nom du fichier et indiquer manuellement aussi l'emplacement de l'enregistrement.
Voici ma macro actuelle
Range("L3").Select
Selection.Copy 'copie du nom de fichier
Application.ActivePrinter = "PDFCreator sur Ne00:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Peut-on automatiser ces commandes ?
Merci d'avance,
et bonne journée
Ciboulette
Bonjour ciboulette05;
Pour ma part, je fonctionne avec cette macro:
Sub EnregFichTechPdf()
Dim Sauvegarde As Variant
'a adapter si besoin d' une selection d' impression
ActiveSheet.PageSetup.PrintArea = "$A$1:$J$31"
Sauvegarde = Application.GetSaveAsFilename(FileFilter:=" PDF Files (*.pdf), *.pdf")
'Si, dans la boite de dialogue d' enregistrement, j' annule, je quitte la macro
If Sauvegarde = False Then
Exit Sub
Else
'Sinon, si le nom de fichier que je donne dans la boite de dialogue n' existe pas, j' enregistre
If Dir(Sauvegarde) = "" Then
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=Sauvegarde, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
'Si le nom de fichier existe déjà:
Else
If MsgBox("Un fichier existant porte déjà ce nom, voulez-vous le remplacer?", vbYesNo + vbExclamation, "demande de confirmation") = vbYes Then
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=Sauvegarde, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Else: MsgBox ("Veuillez renommer le fichier")
Exit Sub
End If
End If
End If
MsgBox ("Ficher enregistré avec succès")
End Sub
Par cette méthode d' enregistrement par exportation, Excel ne prévient pas si un fichier portant ce nom existe déjà .
Il est important de vérifier si le fichier existe pour éviter un écrasement sauvage, par la ligne If Dir(Sauvegarde) = "" Then)
@++
Bonjour,
En effet, merci, ça fonctionne parfaitement, sauf que le nom de fichier et la destination de l'enregistrement ne sont pas automatiques ? Quand je lance ta macro, j'ai une boite de dialogue qui me demande le nom du fichier. Bon, OK, mais j'aimerais au moins qu'elle copie le contenu de la cellule O9 (afin d'éviter les erreurs) et qu'il ne me reste plus qu'à faire un CTRL V et que la macro aille enregistrer le fichier dans le dossier indiqué ????? (où?). Tous les enregistrements doivent se faire dans le même dossier.
Je comprends la nécessité de faire des contrôles pour ne pas écraser un fichier existant portant le même nom, mais windows ne préviendrait pas dans ce cas ?
Je continue à décordiquer ta macro pour essayer de bien comprendre.
Merci et bon après midi.
Ciboulette
Ok, j'ai degainé un peu vite, laisse tomber celle la, j'en ai une autre sous le coude qui fait exactement ce que tu veux,
J'ai zappé le fait que tu voulais un enregistrement automatique avec remplissage du nom et chemin.
Dès que je rentre chez moi, je l'envoie.
OK, super.
Merci par avance
@+
Ciboulette
Sub EnregistrerPdf()
Dim Chemin As String
Dim NomFichier As String
Chemin = "C:\" ' A adapter
NomFichier = Range("O9") ' Range à adapter
'Message Box non obligatoire, mais confirme l' emplacement et le nom
If MsgBox("Ce fichier sera enregistré sous le nom:" & Chr(10) & NomFichier & Chr(10) & Chr(10) & "Dans le dossier:" & Chr(10) & Chemin, vbOKCancel, "confirmation de l' enregistrement") = vbOK Then
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & NomFichier & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
'Message Box non obligatoire,
MsgBox ("Fichier enregistré avec succés")
Else: Exit Sub
End If
End Sub
Je confirme, du moins sur ma configuration, qu ' avec la procédure d' enregistrement par "export"( obligatoire pour le Pdf), qu' il n' y a pas de message d' alerte de risque d 'écrasement fichier.
Pour avoir un message d' avertissement, insérer la ligne
If Dir(Sauvegarde) = "" Then
Bonsoir,
et
Je suis persuadée que ce ne doit pas être très compliqué à modifier.
Tu me lèves une sacrée épine !!!!
Ah j'oubliais, un détail : tous les fichiers portent bien le nom indiqué dans la cellule "O9", mais le nom est précédé de "excelMacronom de fichier". Ce n'est pas hyper gênant, mais si c'est possible, je préfèrerais le supprimer.
J'essaie d'y réfléchir toute seule et si je n'y arrive pas, je reviens te lancer un SOS
Très bonne soirée et encore merci.
Cordialement
Ciboulette
Si tu peux envoyer le fichier excel en pièce jointe, débarrassé de données confidentiel, ce sera plus clair selon nombre de feuille etc etc
Bonjour,
J'ai pratiquement tout réparé
En ce qui concerne le nom du fichier, j'avais tout simplement oublié le dernier anti-slash du chemin !
En ce qui concerne l'enregistrement de la feuille et non du dossier, j'ai modifié la ligne de ta macro en ajoutant ce que j'ai mis en rouge :
ThisWorkbook.Sheets("fact").ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & NomFichier & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Il ne me reste plus qu'un problème : la zone de la feuille enregistrée en pdf ne correspond pas à la zone d'impression paramétrée. Autrement dit j'ai une facture tronquée à droite et en bas. Je ne vois pas où préciser ces informations.
Si quelqu'un a une idée ?????????????
Que signifie : IgnorePrintAreas = False
Cdlt
Ciboulette
Bonjour,
ça y est, tout fonctionne.
J'ai précisé ça : ActiveSheet.PageSetup.PrintArea = "$A$1:$L$45"
et c'est tout bon.
Encore merci
Bonne journée
Ciboulette
Voilà, c' est OK comme ça quand tu as plusieurs feuilles sur le classeur.
@++