VBA/Excel : bouton impression PDF et nom de fichier sur cellule

Résolu/Fermé
Averroes_75000 Messages postés 8 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 14 août 2014 - 13 août 2014 à 13:52
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 15 août 2014 à 11:06
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.
A voir également:

5 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
14 août 2014 à 11:13
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
Averroes_75000 Messages postés 8 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 14 août 2014
Modifié par Averroes_75000 le 14/08/2014 à 15:04
cs_Le Pivert,

J'ai une question supplémentaire.

Comment faire si je souhaite imprimer plusieurs PDF à partir du CommandButton ?

Ma démarche est la suivante :
- Je dispose d'une liste déroulante en C1 qui commence de 1 à 100
- J'ai 100 PDF à lancer.

Si tu trouve ça, tu passes au niveau empereur ! :)
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
14 août 2014 à 16:11
Il faut faire une boucle sur ta liste.

Ce qu'il faut savoir c'est sous quel nom tu vas enregistrer ces fichiers, pour modifier la macro ToPdf ?

Voici un exemple de boucle que j'avais fait sur une listBox, tu peux t'en inspirer:

Private Sub CommandButton1_Click()

Dim i As Byte
    'boucle sur les éléments de la listbox
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
        feuil = ListBox1.List(i)
        Sheets(feuil).Select
     ToPdf
     End If
0
Averroes_75000 Messages postés 8 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 14 août 2014
14 août 2014 à 16:38
Je te remercie pour ta réponse.

Mon cas est le suivant :
- C1 est ma liste déroulante
- B12 est ma cible pour enregistrer sous en PDF (le code que tu as trouvé).

Au passage, à chaque fois que je change le numéro de la liste déroulante (C1), la cellule B12 change automatiquement. C'est ce qui me permet de nommer le fichier.

Ma problématique est de savoir si je peux exécuter le tout dans un seul code, c'est-à-dire les deux que tu proposes.

J'espère ne pas t'avoir embrouillé :)
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
14 août 2014 à 16:43
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?
0
Averroes_75000 Messages postés 8 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 14 août 2014
14 août 2014 à 17:09
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))
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
15 août 2014 à 11:04
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


1
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
15 août 2014 à 11:06
Il faut lire:

chemsave = "C:\Users\Daniel\Documents\" ' mettre ton chemin suivi de \ à la fin
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
13 août 2014 à 16:59
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

0
Averroes_75000 Messages postés 8 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 14 août 2014
Modifié par Averroes_75000 le 14/08/2014 à 09:59
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Averroes_75000 Messages postés 8 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 14 août 2014
14 août 2014 à 14:40
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
0