Générer un pdf via un bouton d'activation

Bonjour à tous,

J'ai trouvé cette macro qui permet de générer un pdf de l'ensemble de mon fichier excel via un bouton d'activation :

Sub ToPdf()

Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")

NomExcel = FIE

NomPdf = Left(NomExcel, Len(NomExcel) - 4) & ".pdf"

With pdfjob

If .cStart("/NoProcessingAtStartup") = False Then

MsgBox "Can't initialize PDFCreator.", vbCritical + vbOKOnly, "PrtPDFCreator"

Exit Sub

End If

.cOption("UseAutosave") = 1

.cOption("UseAutisaveDirectory") = 1

.cOption("AutosaveDirectory") = ThisWorkbook.Path

.cOption("AutosaveFilename") = NomPdf

.cOption("AutosaveFormat") = 0

.cClearCache

End With

ThisWorkbook.PrintOut Copies:=1, ActivePrinter:="PDFCreator"

Do Until pdfjob.cCountOfPrintjobs = 1

DoEvents

Loop

pdfjob.cPrinterStop = False

Do Until pdfjob.cCountOfPrintjobs = 0

DoEvents

Loop

With pdfjob

.cDefaultPrinter = DefaultPrinter

.cClearCache

.cClose

End With

End Sub

Cette macro fonctionne très bien mais ce que je souhaite, c'est générer le pdf d'une seuille feuille (ma page active où se trouvent mes données et mon bouton d'activation) et plus précisement une plage de cellules qui commence en B9 et se termine à la colonne L et à la dernière ligne contenant des données.

Je suppose qu'il faut modifier les deux lignes que j'ai mises en rouge, mais je ne sais pas quel code mettre...


Oups, j'ai envoyé sans finir mon message...

Donc merci beaucoup d'avance

Et très bonne journée à tous!

Einstein

bonsoir einstein le forum

tu es uniquement sous 2003 ou tu possèdes aussi 2007??

a+

papou

Bonjour Papou!

Suis uniquement sous 2003.

Einstein

Re Einstein le forum

mets moi un petit fichier que je puisse tester STP

a+

papou

Bonjour Papou,

J'espère qu'il n'est pas trop tard pour te répondre...

Voici donc un fichier test.

Merci beaucoup pour ton aide précieuse.

Einstein

166essai-pdf.zip (11.50 Ko)

Bonjour,

Peut-être un point de départ..

Au niveau code, vu que je ne suis pas un pro, il doit y avoir certainement matière à améliorer.

Toutefois, cette solution te permet de définir ta zone d'impression et d'imprimer uniquement cette zone en format pdf.

331essai-pdf-v1.zip (14.82 Ko)

Bonjour onobyone!

Jajajajaja ça marche, c'est super! Merci beaucoup!

J'ai une autre question à te poser.

Voilà, j'ai essayé d'adapter le nom du fichier pdf généré en modifiant la partie du code suivant :

'POUR LE PDF

Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")

NomExcel = "FIE"

NomFamille = B9

Prenom = D12

Date = B13

'NomPdf = Left(NomExcel, Len(NomExcel) - 4) & ".pdf"

NomPdf = NomExcel & NomFamille & Prenom & Date & ".pdf"

Comme ça le nom du fichier pdf n'est jamais le même en fonction du contenu des cellules B9, D12 et B13!

Mais cela ne fonctionne pas... Aurais-tu une idée?

Au fait : Pas mal pour un "non pro"!!!

A bientôt

Einstein


Euuuuhhh non ça va en fait!!! Désolée...

Je suis bête j'avais pas mis Range("B3") mais seulement B3...

Euuuuhh, hihihi, suis pas Einstein!!! lol

Einstein

onobyone... En fait j'ai encore une question!!

Voilà, je suis en train de transposer la macro dans mon fichier et j'ai un soucis avec deux données :

Non_pour_Zone et

Zone_d_impression

En y regardant de plus près, j'ai vu dans Insertion/Nom/Définir, que tu avais nommé ces deux zones.

Mais je ne comprends pas comment tu as fait, vu que la plage de sélection doit pouvoir se modifier en fonction des données...

Bref, ma transposition ne fonctionne pas. Quand je lance ma macro, le message d'erreur 1004 apparaît.

Il ne comprend pas cette ligne de code :

Sheets("FIE").Names("Non_Pour_Zone").Delete

Merci du coup de main... C'est trop bête de bloquer maintenant...

Je suis à deux doigts de terminer ma super fonction!!

Einstein

Zone_d_impression est mis automatique lorsque tu définis une zone d'impression.

Ton problème vient du fait que très certainement, la plage de cellule nommée Nom_Pour_Zone n'existe plus lorsque tu lances la macro.

Si tu nommes une plage de cellule Nom_Pour_Zone n'importe où sur la feuille, il y a de très forte chances que cela ne plante plus.

Explications :

Si tu rajoutes des lignes dans ton tableau, ta zone d'impression initiale n'est plus valable. Il faut donc la redéfinir. Pour ce faire, je la définie à partir de la plage de cellules nommées Nom_Pour_Zone, qui elle même est supprimée avant sa redéfinition (sinon, ça ne marche pas), je ne sais pas si je suis clair

Comment je définis la plage de cellule nommées alors que ton tableau évolue ?

Dans un premier, je supprime la plage nommée puis j'atteins la 1ère cellule non vide de ta colonne B et je fais un Ctrl + Fin pour prendre toutes les cellules non vides de la feuille. Il faut être vigilant à ce qu'il n'y ai pas une cellule non vide en dehors du tableau. Une fois que tout le tableau est sélectionné, je définis le nom Nom_Pour_Zone.

Je pense qu'il y a une méthode moins contraignante pour le faire et peut-être plus sûre mais je ne la connais pas.

Aussi, je pense que tu le fais déjà mais ce qui m'aide, c'est d'enregistrer des manipulations sur Excel via des macros. Ca donne une idée du code et parfois, ça permet d'être plus précis dans les recherches sur le net.

Tiens moi au courant stp.

Rechercher des sujets similaires à "generer pdf via bouton activation"