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 Sub

Le 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 :

https://forum.excel-pratique.com/excel/enregistrer-en-pdf-depuis-liste-deroulante-chemin-106527#p630...

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.

86compta-2021.xlsm (29.83 Ko)
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 Sub

A+

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.

Re

Rechercher des sujets similaires à "enregistrer pdf chaque valeur liste deroulante"