XL 2016 enregistrer une feuille au format pdf avec une macro

stéphane97429

XLDnaute Nouveau
Bonjour à tous
Je souhaite enregistrer une feuille active au format pdf via une macro, dans un dossier spécifique, autant de fois que nécessaire sans fermer le fichier. J'ai trouvé une macro qui fonctionne mais je n’arrive pas à faire exactement ce que j’ai expliqué précédemment. Je joins le fichier exemple avec le détail de ce que je souhaite avoir comme résultat.
Merci d’avance pour votre aide
 

Fichiers joints

sousou

XLDnaute Accro
bonsoir
Voici ce que tu peux faire.
Un bouton associé à une macro et une fonction qui trouve le nom du dossier en référence à la commande
Peut-être à adapter à te réelle configuration de dossiers, Jai ici considéré que tes dossiers étaient dans le dossier enregistrements
 

Fichiers joints

stéphane97429

XLDnaute Nouveau
Bonjour Sousou, bonjour à tous
Merci pour votre réponse. Je n'arrive pas à configurer mon dossier par rapport à votre fonction.
Cela étant, pouvez vous me dire ce qu'il faut que je fasse pour que le fichier généré en pdf à partir de la macro, prenne "le nom" de ce qu'il y a dans la cellule G4.
C'est à dire que si G4= AUT/18/09/17_DDD alors Filename dans la macro="F:\Enregistrement\AUT/18/09/17_DDD.pdf", _

Sub enregistrer()

Worksheets("commande").Range("D1:I53").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:="F:\Enregistrement\test.pdf", _
quality:=xlQualityStandard, _
includedocproperties:=True, _
ignoreprintareas:=False, _
openafterpublish:=False7

End Sub

merci d'avance
Bonne journée
 

Jacques25

XLDnaute Occasionnel
Bonjour Stephane,

Je prends le sujet en cours, j'ai pas forcément regardé le code mais une chose m'interpelle, je pense que pour l'enregistrement il faudra enlever les slashs / du nom du fichier. En général les caractères spéciaux ne sont pas admis.
Si tu essaye sans la macro juste en tapant le nom que tu veux ça ne devrait pas marcher.

@ plus

Jack
 

sousou

XLDnaute Accro
Bonjour j'ai effectivement oublié de traité la date de façon à ne pas avoir de /. Ils seront remplacé par des -
pour la configuration du dossier, ça devrait être ok j'ai gardé "f:\Enregistrement
Sinon prècise ce qui ne va pas
Sub enregistrer()
commande = ActiveSheet.Range("g4")
repertoire = dossier(commande)
nomfichier = Replace(ActiveSheet.Range("g4"), "/", "-", 1)
fich = "F:\Enregistrement\" & repertoire & "\" & ActiveSheet.Range("g4") & ".pdf"
Worksheets("B").Range("D1:I53").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=fich, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End Sub
 

Jacques25

XLDnaute Occasionnel
Re,

Ton code ci-dessus fonctionne? sinon qu'est ce qui bloque?
Pourquoi avoir : nomfichier = Replace(ActiveSheet.Range("g4"), "/", "-", 1)
et dans fich mettre ActiveSheet.Range("g4") au lieu de nomfichier

@ plus
 

sousou

XLDnaute Accro
Comme la fait remarquer Jacques les / ne sont pas compatible avec les noms de fichiers.
Ils signifient l'arborescence des dossiers.
J'ai donc remplacé les / par des -, tu peux faire un autre choix , comme les supprimer, ou autre , pour le nommage de tes fichiers
 

stéphane97429

XLDnaute Nouveau
Bonjour Sousou, Bonjour Jacques25, bonjour à tous.
lorsque j'utilise la macro que vous m'avez donnée, l'information suivante apparait:
erreur d'execution'5', argument ou appel de procédure incorrect.
J'ai pris en compte vos remarques et repris vos codes pour adapter la première macro que j'ai renommé "enregistrer2".

Sub enregistrer2()
Worksheets("B").Range("D1:I53").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:="F:\Enregistrement \" & repertoire & "\" & ActiveSheet.Range("g4") & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False7
End Sub

Cela fonctionne. Lorsque j'enregistre mon fichier au format pdf via la macro, le nom du fichier apparaît. C'est une trés bonne chose?
Vraiment merci!!
je suis toujours preneur de réussir à enregistrer chaque fichier dans son répertoire
trés bonne journée à tous
 

Jacques25

XLDnaute Occasionnel
Bonjour,

Si tu n'as vraiment que 4 dossiers tu peux faire de la sorte, c'est un peu bébé mais ça marche ;-) (je suis pas expert en macro j'essaye juste de faire ce qu'il faut) :

Sub classement()
Dim nomrep, fich, repertoire, données
nomrep = Left(Sheets("B").Range("g4"), 2)
Set données = ThisWorkbook.Worksheets("B").Range("D1:I53")

If nomrep = "AU" Then repertoire = "AUTO"
If nomrep = "MO" Then repertoire = "MOTO"
If nomrep = "AV" Then repertoire = "AVION"
If nomrep = "BA" Then repertoire = "BATEAU"

fich = "F:\Enregistrement\" & repertoire & "/" & ActiveSheet.Range("g4") & ".pdf"
données.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=fich, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End Sub

A affecter à ton bouton de commande. J'ai été obligé de faire le test que sur 2 caractères à cause de AV pour AVION

@ plus

Jack
 

sousou

XLDnaute Accro
Bonjour
Joints ton fichier, afin de voir ce qui cloche
En théorie l'enregistrement dans chaque répertoire étaient dans la première version que je t'ai envoyé
N' aurais tu pas oublié 'répertoire=dossier(...)
 

sousou

XLDnaute Accro
RE
Il va falloir te décider, sur le nommage de tes fichers Dans exemples 1 tu as remplacer les/ par des tirets
Est-ce définitif, en effet le traitement est fonction des ce choix
Si c'est le cas alors voir fichier joint.
 

Fichiers joints

stéphane97429

XLDnaute Nouveau
Bonjour Sousou, bonjour à tous
Sousou, votre code vba fonctionne et je vous remercie trés sincèrement. J'ai pensé bien faire en remplaçant les / par des tirets, suite à la lectures des différents échanges et parce que les précédents fichiers ne fonctionnaient pas.
Quelle ligne faut-il ajouter au code VBA pour que je puisse à nouveau utiliser les /.
En tout cas un vrai merci pour votre disponibilité. J'ai beaucoup appris de ces échanges.
Bien à vous
 

sousou

XLDnaute Accro
Deux lignes à remplacer
1/k1 = Left(commande, InStr(1, commande, "_") - 1) par k1 = Left(commande, InStr(1, commande, "/") - 1)
elle détermine le future nom du dossier en isolant AUT, MOT...
2/nomfichier = ActiveSheet.Range("g4") par nomfichier = Replace(ActiveSheet.Range("g4"), "/", "-", 1)
Elle remplace les / par des tirets par définir le nom de fichier qui lui, ne peux en avoir (des/)
Essais de bien comprendre ce qui se passe afin de pouvoir faire évoluer suivant tes besoins
 

Discussions similaires


Haut Bas