VBA/Excel : bouton impression PDF et nom de fichier sur cellule [Résolu/Fermé]

Signaler
Messages postés
8
Date d'inscription
mercredi 13 août 2014
Statut
Membre
Dernière intervention
14 août 2014
-
Messages postés
6843
Date d'inscription
jeudi 13 septembre 2007
Statut
Non membre
Dernière intervention
23 juillet 2020
-
Bonjour à vous amis programmeurs,

Je viens vers vous car j'ai une problématique à vous soumettre. J'ai trouvé un code sur un forum que je souhaite adapter. C'est le suivant :

Private Sub CommandButton1_Click()
Dim Fichier As Variant
Fichier = "W:\nomdelentreprise\TRANSACTIONS\Commandes\" & Range("B12").Value
ActiveWorkbook.SaveAs Filename:= _
Fichier
End Sub

Je souhaite réaliser cet export en PDF. Pourriez-vous m'aider ? Je vous remercie.

5 réponses

Messages postés
6843
Date d'inscription
jeudi 13 septembre 2007
Statut
Non membre
Dernière intervention
23 juillet 2020
532
Il faut avoir PDFCreator pour pouvoir créer un pdf avec Excel 2003

Insérer un UserForm et mettre un CommandButton


Voici le code

Option Explicit
Private Sub CommandButton1_Click()
ToPdf
End Sub
Sub ToPdf()
Dim pdfjob As Object
Dim DefaultPrinter
Dim chemsave As String
chemsave = "C:\Users\Daniel\Documents\Nouveau dossier\" ' mettre ton chemin avec \ à la fin
If chemsave = "" Then Exit Sub
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
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") = chemsave 'chemin destination
.cOption("AutosaveFilename") = ActiveSheet.Range("B12").Value & ".pdf" 'nom du fichier
.cOption("AutosaveFormat") = 0
.cClearCache
End With
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=32766, Copies:=1, ActivePrinter:="PDFCreator" 'on imprime la feuille active
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
Set pdfjob = Nothing
Dim Ret As Variant
MsgBox "Votre PDF se trouve à cet emplacement: " & chemsave, vbInformation, "Convertir en PDF"
End Sub

3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57805 internautes nous ont dit merci ce mois-ci

Messages postés
6843
Date d'inscription
jeudi 13 septembre 2007
Statut
Non membre
Dernière intervention
23 juillet 2020
532
C'est très bien si la cellule change automatiquement, nous n'aurons pas à changer la macro. Juste supprimer la MsgBox à la fin.

Donc il faut faire une boucle sur ta liste. Comment ce nomme t'elle?
Messages postés
8
Date d'inscription
mercredi 13 août 2014
Statut
Membre
Dernière intervention
14 août 2014

Ma liste ne contient pas de code, c'est la cellule B1 uniquement.
Pour le changement automatique de ma cellule, j'utilise la fonction RechercheV (=RECHERCHEV(F6;Base_de_données;21))
Messages postés
6843
Date d'inscription
jeudi 13 septembre 2007
Statut
Non membre
Dernière intervention
23 juillet 2020
532
Là je ne peux pas t'aider, je ne travaille qu'avec des contrôles. Je ne sais pas comment faire une
boucle dans ce cas là. Pose cette question sur le Forum.

Bonne programmation

@+ Le Pivert
Messages postés
8
Date d'inscription
mercredi 13 août 2014
Statut
Membre
Dernière intervention
14 août 2014

Ton apport m'a été d'une grande utilité. Je t'en remercie.
A bientôt
Messages postés
8
Date d'inscription
mercredi 13 août 2014
Statut
Membre
Dernière intervention
14 août 2014

J'ai dit une bêtise. Peut-être pourrais-tu m'aider.
Ma cellule B1 est une liste déroulante de choix. Elle est égale au champ "ID".
Est-ce possible de parvenir à un résultat avec ces éléments ?
Messages postés
6843
Date d'inscription
jeudi 13 septembre 2007
Statut
Non membre
Dernière intervention
23 juillet 2020
532
Si tu veux faire une boucle sur toutes les feuilles de ton classeur et les convertir,

Voici le code:

Option Explicit
Dim chemsave As String
Private Sub CommandButton1_Click()
Dim Ws As Worksheet
    'Boucle sur les feuilles du classeur.
    For Each Ws In ThisWorkbook.Worksheets
       Ws.Select
       ToPdf
       Next Ws
MsgBox "Vos PDF se trouvent à cet emplacement: " & chemsave, vbInformation, "Convertir en PDF"
End Sub
Sub ToPdf()
Dim pdfjob As Object
Dim DefaultPrinter

chemsave = "C:\Users\Daniel\Documents" ' mettre ton chemin suivi de \ à la fin
If chemsave = "" Then Exit Sub
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
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") = chemsave 'chemin destination
.cOption("AutosaveFilename") = ActiveSheet.Range("B12").Value & ".pdf" 'nom du fichier pdf
.cOption("AutosaveFormat") = 0
.cClearCache
End With
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=32766, Copies:=1, ActivePrinter:="PDFCreator" 'on imprime la feuille active
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
Set pdfjob = Nothing
'MsgBox "Votre PDF se trouve à cet emplacement: " & chemsave, vbInformation, "Convertir en PDF"
End Sub



Bon WE


Messages postés
6843
Date d'inscription
jeudi 13 septembre 2007
Statut
Non membre
Dernière intervention
23 juillet 2020
532
Il faut lire:

chemsave = "C:\Users\Daniel\Documents\" ' mettre ton chemin suivi de \ à la fin
Messages postés
6843
Date d'inscription
jeudi 13 septembre 2007
Statut
Non membre
Dernière intervention
23 juillet 2020
532
Bonjour,

Si tu as Office 2007 et plus, tu peux mettre ceci pour enregistrer au format pdf:

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "W:\nomdelentreprise\TRANSACTIONS\Commandes\" & Range("B12").Value & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False

Messages postés
8
Date d'inscription
mercredi 13 août 2014
Statut
Membre
Dernière intervention
14 août 2014

Bonjour,

Je te remercie pour ta réponse.

J'ai oublié de préciser que je suis sur Excel 2003.

Ce code ne fonctionne pas...

Aurais-tu une autre astuce ?

J'ai trouvé un code qui répond presque à ma demande :

Private Sub CommandButton1_Click()
ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"
Filename = "C:\Test" & ActiveSheet.Range("A1").Value & ".pdf"
SendKeys Filename & "{ENTER}", False
End Sub

Les problèmes sont les suivants :

- Pas de prise en compte de la cellule pour nommer le fichier PDF ;
- Pas de prise en compte du parcours pour enregistrer le fichier ;
- Plusieurs fenêtres s'ouvrent : enregistrer sous de Windows, PDF creator.
Messages postés
8
Date d'inscription
mercredi 13 août 2014
Statut
Membre
Dernière intervention
14 août 2014

cs_Le Pivert,

Tu es un roi. C'est exactement ce code que je recherchais.

Tout fonctionne à merveille (au passage j'ai supprimé la ligne 1).

MERCI