Sauvegarder factures en PDF

Fermé
simkmil Messages postés 434 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 13 mars 2024 - 23 mai 2020 à 11:12
simkmil Messages postés 434 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 13 mars 2024 - 2 juin 2020 à 16:23
Bonjour,

J'ai encore besoin d'un petit coup de main pour l'élaboration de la facture d'un ami, monteur de pneus.
J'ai bien avancé (beaucoup grâce à l'aide du forum de CCM !)
J'ai maintenant toute ma facture qui s'automatise :
Les noms dans une liste déroulante. Le reste de l'adresse va se chercher automatiquement.
Je sais vider mes cellules et augmenter mon numéro de facture.
Je sauvegarde également ma facture dans un "Historique factures" équivalent à un facturier de sortie.
Mais maintenant, je voudrais sauver ma facture en pdf, afin de pouvoir - l'envoyer par mail au client
- pouvoir l'imprimer à nouveau en cas de demande.
et c'est là que je cale.
J'ai suivi le tutoriel de Naël sur YouTube, mais la partie permettant de sauvegarder en pdf ne fonctionne pas.
Je vous joins mon code pour cette partie, saurez vous m'aider ?
Sub EnregistrementFacture()
'je d?clare mes variables
Dim NomDossier As String
Dim Chemin As String

'je nomme le dossier et donne le chemin
NomDossier = Application.InputBox("ArchivageFactures:", "Ann?e ?")
Chemin = "C:\Documents\ArchivageFactures\" & NomDossier & "\"

If NomDossier = "" Then Exit Sub

'j'enregistre au format PDF

ActiveSheet.ExportAsFixedFormat Type:=xlTypexlsx, Filename:= _
Chemin & "FactureNumero_" & Range("B10").Value & ".pdf", quality:= _
xlQualityStandard, includedocproperties:=True, ignoreprintareas:=False, _
from:=1, to:=1, openafterpublish:=False



End Sub

Configuration: Windows / Edge 17.17134
A voir également:

4 réponses

M-12 Messages postés 1333 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 8 avril 2023 299
23 mai 2020 à 11:35
Bonjour,

Teste comme ceci
Sub EnregistrementFacture()
  'je d?clare mes variables
  Dim NomDossier As String
  Dim Chemin As String
  
  'je nomme le dossier et donne le chemin
  NomDossier = Application.InputBox("ArchivageFactures:", "Année ?")
  Chemin = "C:\Documents\ArchivageFactures\" & NomDossier & "\"
  
  If NomDossier = "" Then Exit Sub
  
  'j'enregistre au format PDF
  
  ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
  Chemin & "FactureNumero_" & Range("B10").Value & ".pdf", Quality:= _
  xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
  From:=1, To:=1, OpenAfterPublish:=False
End Sub
0
Merci beaucoup,
Je vais essayer çela dès demain matin.
Bonne soirée
0
simkmil Messages postés 434 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 13 mars 2024 34
24 mai 2020 à 10:45
Bonjour,
je viens d'essayer … et ça ne fonctionne toujours pas !
j'ai pourtant fait un copier-coller de ce que tu m'as envoyé, et toujours la partie ActiveSheet…. qui se met en jaune.
Je vais tenter de t'envoyer l'entièreté de mon fichier via cijoint.
Merci d'avance de regarder où j'ai fait une erreur (ou plusieurs)
sur la facture j'ai mis des boutons :
Sauvegarder m'envoie les données sur Historique_Facture
Imprimer : m'imprime deux exemplaires
Enregistrement facture en pdf : c'est là que ça cloche !
Nouvelle facture et effacement des données : fonctionne correctement.
Mon projet serait également de ne faire qu'un seul bouton pour l'enregistrement en pdf et la sauvegarde.

voici le lien : https://cjoint.com/c/JEyiTawLSeR

grand merci d'avance.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
23 mai 2020 à 12:22
Bonjour,

Tu as oublié de créer un nouveau dossier comme ceci:

Sub EnregistrementFacture()
'je déclare mes variables
Dim NomDossier As String
Dim Chemin As String

'je nomme le dossier 
NomDossier = Application.InputBox("ArchivageFactures:", "Année ?")

'je crée le dossier
MkDir "C:\Documents\ArchivageFactures\" & NomDossier
'je donne le chemin
Chemin = "C:\Documents\ArchivageFactures\" & NomDossier & "\"

If NomDossier = "" Then Exit Sub

'j'enregistre au format PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypexlsx, Filename:= _
Chemin & "FactureNumero_" & Range("B10").Value & ".pdf", quality:= _
xlQualityStandard, includedocproperties:=True, ignoreprintareas:=False, _
from:=1, to:=1, openafterpublish:=False
End Sub

0
Merci beaucoup, je vais essayer çela dès demain matin.
Super aide !
Je vous tiens au courant.
Bonne soiree
0
simkmil Messages postés 434 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 13 mars 2024 34
24 mai 2020 à 10:47
Bonjour,
je viens d'essayer … et ça ne fonctionne toujours pas !
j'ai pourtant fait un copier-coller de ce que tu m'as envoyé, et toujours la partie ActiveSheet…. qui se met en jaune.
Je vais tenter de t'envoyer l'entièreté de mon fichier via cijoint.
Merci d'avance de regarder où j'ai fait une erreur (ou plusieurs)
sur la facture j'ai mis des boutons :
Sauvegarder m'envoie les données sur Historique_Facture
Imprimer : m'imprime deux exemplaires
Enregistrement facture en pdf : c'est là que ça cloche !
Nouvelle facture et effacement des données : fonctionne correctement.
Mon projet serait également de ne faire qu'un seul bouton pour l'enregistrement en pdf et la sauvegarde.
voici mon fichier : https://cjoint.com/c/JEyiTawLSeR
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > simkmil Messages postés 434 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 13 mars 2024
Modifié le 24 mai 2020 à 11:34
C'est ton chemin qui n'est pas bon, il manque des éléménts
celui-ci qui doit être bon

  ChDir "C:\Users\bs382\OneDrive\Documents\Archivage Factures\2020"
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Users\bs382\OneDrive\Documents\Archivage Factures\2020\Facturier_DHoe.xlsm" _
        , FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False


et celui là

"C:\Documents\ArchivageFactures\" & NomDossier & "\"


où il manque

C:\Users\bs382\OneDrive


corrige le , ça devrait fonctionner

Mon projet serait également de ne faire qu'un seul bouton pour l'enregistrement en pdf et la sauvegarde.

appeler ces macros dans le même bouton:

Sub EnregistrementFacture()
'enregistrement PDF
'je déclare mes variables
Dim NomDossier As String
Dim Chemin As String
'je nomme le dossier et donne le chemin
NomDossier = Application.InputBox("ArchivageFactures:", "Année ?")
If NomDossier = "" Then Exit Sub
'je crée le dossier
MkDir "C:\Users\bs382\OneDrive\Documents\ArchivageFactures\" & NomDossier
'je donne le chemin
Chemin = "C:\Users\bs382\OneDrive\Documents\ArchivageFactures\" & NomDossier & "\"
'j'enregistre au format PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypexlsx, Filename:= _
Chemin & "FactureNumero_" & Range("B10").Value & ".pdf", quality:= _
xlQualityStandard, includedocproperties:=True, ignoreprintareas:=False, _
from:=1, to:=1, openafterpublish:=False
End Sub
Sub Enregistrement()
'sauvegarde
    ChDir "C:\Users\bs382\OneDrive\Documents\Archivage Factures\2020"
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Users\bs382\OneDrive\Documents\Archivage Factures\2020\Facturier_DHoe.xlsm" _
        , FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub



voilà


@+ Le Pivert
0
M-12 Messages postés 1333 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 8 avril 2023 299 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
24 mai 2020 à 13:11
Re,
Si tu veut enregistrer en PDF, commence déjà par modifier (comme préciser dans mon post) dans ta ligne
Type:=xlTypexlsx en Type:=xlTypePDF
0
simkmil Messages postés 434 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 13 mars 2024 34 > M-12 Messages postés 1333 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 8 avril 2023
24 mai 2020 à 20:21
Merci, merci, merci !!!
Je vais mettre cela en route dès demain matin (car aujourd'hui j'ai suffisamment "joué" avec mon PC !)
C'est une chose formidable que cette aide que l'on peut trouver ici.
Je suis à la retraite, et je tente de faire un petit programme pour un ami. J'ai de bonnes connaissances en Excel, mais peu d'expérience en VBA. J'ai bien suivi des cours (en cours du soir) mais cela fait quand même quelques années …
J'espère à mon tour pouvoir aider prochainement quelqu'un à l'aide de mes petites connaissances.
Merci, continuez bien, vous êtes formidables.
0
simkmil Messages postés 434 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 13 mars 2024 34
25 mai 2020 à 10:03
Bonjour, hélas j'ai toujours mon problème !
si je lance la sauvegarde en pdf j'ai la ligne MkDir … qui se met en jaune
je lui met un apostrophe (pour l'éviter) et c'est le bloc ActiveSheet.Export… qui se met en jaune.
J'ai également changé le type en pdf.
Enfin je pense avoir suivi toutes vos indications ?? où alors je me suis planté quelque part ?
Je vous renvoie par cjoint mon fichier actuel (légèrement changé par rapport à celui de hier puisque j'y ai introduit vos changements.
voici le lien : https://cjoint.com/c/JEzicVX0tkR
encore merci de votre aide
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
25 mai 2020 à 10:43
Cela ne sert à rien d'envoyer ton fichier, le problème vient de ton chemin!
Et nous sur notre machine, ton chemin on ne peut pas le tester!

Tu vas te servir de l’enregistreur de macro.
Tu enregistres ton classeur en PDF manuellement et là tu auras ta macro avec le chemin correct. il te suffira de mettre cette macro dans ton projet

Voilà, c'est ce que tu aurais dû faire dès le départ
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
Modifié le 25 mai 2020 à 11:30
J'ai mis ThisWorkbook.Path comme chemin. Cela va enregistrer dans le même dossier que le classeur.

C'est pour te démontrer que le code fonctionne.

L'avantage c'est que cela fonctionne sur n'importe quelle machine!

https://www.cjoint.com/c/JEzjAIQ5jRQ

Voilà

@+ Le Pivert
0
simkmil Messages postés 434 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 13 mars 2024 34 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
Modifié le 25 mai 2020 à 20:44
Bonsoir,
d'abord merci beaucoup pour le mal que tu te donnes, mais j'ai toujours un problème.
J'ai pris ton exemplaire et ai sauvegardé une première facture : OK tout fonctionne et j'ai une inscription : "facture enregistrée"; là, je me dis … Super ! ça fonctionne et du coup je fais une seconde facture et … patatra ça cale au niveau du MKdir
Je me demande si c'est normal que l'on crée un directory à chaque facture ? je pense que une fois créé il est bon pour toutes les factures.
Je l'ai mis entre apostrophes et paf, c'est la partie ActiveSheet qui se met en jaune.
J'ai créé mon chemin en utilisant l'enregistreur de macro, cela donne :
ChDir "E:\Essai Factures"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"E:\Essai Factures\Facturier_DHoe.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False

et je retrouve uniquement ma première facture, mais sans son numéro (utile pour la retrouver)

encore une fois, merci de ton aide. Il n'y a pas urgence, je ne reviendrai sur le PC que demain dans la journée.
en tant que retraité confiné, je n'ai pas une minute à moi. Tel par exemple, cet après midi aller à Bruxelles (100 km de chez moi) pour y chercher un duplicata pour le permis de conduire de mon petit fils, ayant égaré l'original et il était impossible de recevoir cela par mail… pourtant nous sommes au XXI siècle.
Bonne soirée;
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > simkmil Messages postés 434 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 13 mars 2024
26 mai 2020 à 07:53
Je me demande si c'est normal que l'on crée un directory à chaque facture ? je pense que une fois créé il est bon pour toutes les factures.

Si tu enregistres dans le même dossier, alors à quoi te sert cette ligne de code?

'je nomme le dossier et donne le chemin
NomDossier = Application.InputBox("ArchivageFactures:", "Année ?")


et je retrouve uniquement ma première facture, mais sans son numéro (utile pour la retrouver)

dans le chemin il manque quelque chose!

"E:\Essai Factures\Facturier_DHoe.pdf"


il manque ceci:

"FactureNumero_" & Range("B10").Value


Voilà il suffit de corriger ces 2 points et cela devrait être opérationnel

@+ Le Pivert
0
simkmil Messages postés 434 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 13 mars 2024 34
1 juin 2020 à 12:18
Ouf ! ça y est, ça fonctionne.
Je n'ai pas su revenir plus tôt sur ce problème, mais j'avais décidé de m'y remettre ce matin afin de pouvoir en terminer.
Tout (presque) fonctionne.
Je fais ma facture, je l'imprime en deux exemplaires, je l'inscrit dans l'historique clients puis je la sauvegarde en pdf.
Sauf que en faisant ces deux opérations, j'incrémente deux fois et je voudrais diminuer le nombre de boutons afin de simplifier l'utilisation de celui qui s'en servira.
J'ai un module 1
archiver : il écrit dans l'historique clients, vide le corps de facture , vide le nom et incrémente le nouveau numéro de facture.
le module 2 permet d'imprimer deux exemplaires : OK
le module 3 incrémente le numéro de facture : je pense que je devrais le supprimer
le module 4 enregistre en pdf
le module 5 enregistre en pdf serait à supprimer.

Il faut que je sauvegarde dans l'historique client les données telles qu'elles sont, mais je dois également sauvegarder "l'image" de la facture avec son numéro afin de pouvoir procéder à une réimpression plus tard ou simplement de l'envoyer au client par pdf.
Je suis un peu perdu, et j'ai peur d'oter des choses essentielles...
Merci d'encore un peu m'aider.
Bonne journée à vous.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
2 juin 2020 à 11:10
pour cela:

mais je dois également sauvegarder "l'image" de la facture avec son numéro

Option Explicit
'enregistrer facture au nom du client dans le même dossier que ce classeur
Sub savefacture()
Worksheets("Facture").Select
cacherbouton
Worksheets("Facture").Copy
With ActiveWorkbook
     .SaveAs Filename:=ThisWorkbook.Path & "\" & Range("E10") & ".xlsx", FileFormat:=xlOpenXMLWorkbook
     .Close SaveChanges:=False
End With
reinitialiser
MsgBox "Enregistrer dans le même dossier", vbInformation, "Enregistrement facture"
End Sub
Sub cacherbouton()
Dim Sh As Shape
For Each Sh In ActiveWorkbook.ActiveSheet.Shapes
If Sh.Name <> "Image 1" And Sh.Name <> "Rectangle 2" Then
Sh.Visible = False
End If
Next Sh
End Sub
Sub reinitialiser()
Dim Sh As Shape
For Each Sh In ActiveWorkbook.ActiveSheet.Shapes
Sh.Visible = True
Next
End Sub


Voilà

@+ Le Pivert
0
simkmil Messages postés 434 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 13 mars 2024 34 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
2 juin 2020 à 16:23
Merci beaucoup, j'essaie cela ce soir. Maintenant, il fait trop chaud !
j'envoie le retour des que possible
Bon après midi ensoleillée.
0