Enregistrer en pdf chaque valeur d'une liste déroulante
Bonjour,
J'ai un fichier Excel pour créer des factures de vente avec une macro qui me permet de les enregistrer en pdf dans le dossier de mon choix.
Voici la macro que j'utilise pour info et si cela peut servir sur le forum :
Sub Enregistrer_pdf_Facture()
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Archive\Facture\" & Range("b15").Value & " - " & Range("f4").Value & ".pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End SubLe nom du pdf est par exemple 20210001 - Victor
Avec B15 = N° facture et F4 = Nom du client
Mon problème :
Avec une dizaine de facture à enregistrer en pdf, cela me suffit largement mais quand on arrive à une bonne centaine de factures, cela devient vite très chronophage.
C'est pour cela que j'ai fait pas mal de recherches pour trouver une macro qui me permettent d'enregistrer toutes les valeurs (facture en pdf) de la liste déroulante jusqu'à la dernière.
Je n'ai pas encore trouvé mon bonheur
Il y a bien un post mais comme je suis novice, je n'arrive pas à comprendre comment cela fonctionne ni même si je pourrais la modifier pour l'ajouter à mon fichier :
Comment mon fichier de facturation fonctionne :
Je remplis l'onglet liste avec toutes les données pour faire la facturation. Ensuite la liste déroulante qui est sur l'onglet "FACTURE PDF" me permet d'obtenir la facture à imprimer avec toutes les informations essentielles.
Ma liste déroulante est en B15 de l'onglet "FACTURE PDF" et le nom du client est en F4 de ce même onglet.
Pourriez-vous m'aider à écrire cette macro svp ?
Merci par avance.
Bonjour,
Votre cellule B15 dépend d'une liste de validation, comment s'appelle-t-elle ou quelle est son adresse ?
On suppose que F4 contient une fonction RECHERCHEV et que le contenu varie en fonction de B15.
La solution est de faire varier B15 uniquement via une boucle justement à partir de la liste de validation dont cette cellule dépend.
Il faudrait également modifier votre table des factures pour indiquer que la facture est déjà éditée pour ne pas avoir à la rééditer.
Bonjour Eric,
Je joins le fichier en question car c'est plus simple d'avoir un visuel
La cellule B15 du tableau 1 figurant sur l'onglet "Liste" colonne N° Facture.
F4 est bien une recherche V qui va chercher les informations correspondants au N° de facture.
Excellente idée d'indiquer si la facture est déjà éditer en pdf ou non.
Etant novice en macro, je ne vois pas comment faire. Pourriez-vous m'aider svp ?
Merci par avance.
Option Explicit
Sub Enregistrer_pdf_Facture()
Dim I As Integer
Dim AireFactures As Range, AireEdition As Range
Dim Chemin As String
Dim ShFacture As Worksheet
On Error GoTo Fin
Application.ScreenUpdating = False
Set ShFacture = Sheets("FACTURES PDF")
Set AireFactures = Range("t_Factures[N° Facture]")
Set AireEdition = Range("t_Factures[Editée]")
For I = 1 To AireFactures.Count
With ShFacture
If AireEdition(I) = "" Then
.Range("B15") = AireFactures(I)
DoEvents
'Chemin = "C:\Archive\Auto Entreneur 12.03.20\a_Compta\Livre de recette + Facturier\" & Range("b15").Value & " - " & Range("f4").Value & ".pdf"
Chemin = ActiveWorkbook.Path & "\" & .Range("B15").Value & "-" & .Range("F4").Value & ".pdf"
Application.DisplayAlerts = False
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
'Debug.Print Chemin
AireEdition(I) = Date
Application.DisplayAlerts = True
End If
End With
Next I
Application.ScreenUpdating = True
MsgBox "Edition terminée !", vbInformation
GoTo Fin
Fin:
Set ShFacture = Nothing: Set AireFactures = Nothing: Set AireEdition = Nothing
Application.ScreenUpdating = True
End Sub
Bonjour le fil, Eric
Comme j'avais travaillé dessus, voici mon code à mettre dans un module
Sub ImpressionListe()
Dim sPath As String, sNomFic As String
Dim Cel As Range, PlgFac As Range
' Définir le chemin d'enregistrement
sPath = "C:\Archive\Auto Entreneur 12.03.20\a_Compta\Livre de recette + Facturier\"
' Définir la plage des numéro de facture
Set PlgFac = Range("Tableau1[N° Facture]")
' Pour chaque ligne de facture
For Each Cel In PlgFac
' Si numéro de facture non vide
If Cel.Value <> "" Then
' Avec la feuille active
With ActiveSheet
' inscrire le numéro de facture
.Range("B15") = Cel
sNomFic = .Range("B15").Value & " - " & .Range("F4").Value & ".pdf"
' Au cas ou on recalcul
Application.Calculate
' Exporter la facture
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sPath & sNomFic, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End With
End If
' On continue
Next Cel
End SubA+
Bonjour Bruno,
Pour Jonathan : J'ai oublié de préciser que j'ai supprimé les lignes vides du tableau structuré car elles ne servent à rien.
Bonjour Eric et Bruno.
Merci infiniment pour votre aide et pour votre temps
La macro d'Eric fonctionne à merveille. Quel plaisir d'avoir des factures en automatique en un seul clic.
Je n'ai pas eu le temps de tester celle de Bruno.
Je pense qu'elle va aider bien d'autres personnes à automatiser leur travail.