XL 2019 VBA - Export PDF avec choix du nom (cellule)

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

sami1814

Guest
Bonsoir à toutes et tous,

Toujours novice en VBA, je recherche une solution. J'ai cherché et testé pleiiiins de codes trouvés sur XLD ou autre, mais sans succès...

J'aimerais exporter une feuille en PDF avec un bouton, et dans la boîte de dialogue il faudrait qu'il y ait déjà le n° de facture (qui est présent en B14).
Après qu'on puisse choisir le chemin.

Voici le code :

Code:
Sub Save_PDF()

    NomFichier = Application.GetSaveAsFilename(fileFilter:="PDF (*.pdf), *.pdf")
    If NomFichier <> False Then
    
    Dim noFacture As String
    noFacture = [B11]

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        noFacture, Quality:=xlQualityStandard _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
    End If
End Sub
 

Pièces jointes

Salut, va voir par ici et adapte à ton contexte.
Merci !

J'ai essayé de bricoler le code mais j'ai un soucis avec ThisWorkbook.

Aussi, je ne sais pas si la fonction NomFichierValide est utile (je ne sais pas ce qu'elle fait).

Code:
Option Explicit

Private Function NomFichierValide(sChaine As String) As Boolean
Dim i As Long
Const sCaracInterdits As String = """*/:<>?[\]|"
    NomFichierValide = True
    If Len(sChaine) = 0 Then
        NomFichierValide = False
        Exit Function
    End If
    For i = 1 To Len(sCaracInterdits)
        If InStr(sChaine, Mid$(sCaracInterdits, i, 1)) > 0 Then
            NomFichierValide = False
            Exit Function
        End If
    Next i
End Function

Sub EnregistrerSous()

Dim sNomfichier As String
Dim oNomFichier As Variant, sExt As String

    ChDir ThisWorkbook.Path

    sNomfichier = ThisWorkbook.Sheets("CREER_FACTURE").Range("B11")
    
    sExt = ".pdf"
    If NomFichierValide(sNomfichier) = False Then
        ThisWorkbook.Sheets("CREER_FACTURE").Range("B11").Select
        MsgBox "Nom de fichier invalide", vbCritical + vbOKOnly, "Nom de fichier"
        Exit Sub
    End If

    oNomFichier = Application.GetSaveAsFilename(InitialFileName:=sNomfichier, _
                                                fileFilter:="Fichiers PDF (*" & sExt & ", *" & sExt)
    If oNomFichier <> False Then
        ThisWorkbook.Sheets("CREER_FACTURE").ExportAsFixedFormat Type:=xlTypePDF, _
                                   Filename:=oNomFichier, _
                                   Quality:=xlQualityStandard, _
                                   IncludeDocProperties:=True, _
                                   IgnorePrintAreas:=False, _
                                   OpenAfterPublish:=False
    End If
End Sub
 

Pièces jointes

Re,

Feuil1 est le CodeName de l'onglet "Facture". L'usage du CodeName permet de modifier le nom d'onglet, de déplacer cet onglet dans l'ensemble des feuilles sans avoir à retoucher au code VBA.

VB:
Option Explicit

Private Function NomFichierValide(sChaine As String) As Boolean
Dim i As Long
Const sCaracInterdits As String = """*/:<>?[\]|"
    NomFichierValide = True
    If Len(sChaine) = 0 Then
        NomFichierValide = False
        Exit Function
    End If
    For i = 1 To Len(sCaracInterdits)
        If InStr(sChaine, Mid$(sCaracInterdits, i, 1)) > 0 Then
            NomFichierValide = False
            Exit Function
        End If
    Next i
End Function

Sub EnregistrerSous()
Dim sNomfichier As String
Dim oNomFichier As Variant, sExt As String

    ChDir ThisWorkbook.Path

    sNomfichier = Feuil1.Range("B11")
    sExt = ".pdf"
 
    If NomFichierValide(sNomfichier) = False Then
        Feuil1.Range("B11").Select
        MsgBox "Nom de fichier invalide", vbCritical + vbOKOnly, "Nom de fichier"
        Exit Sub
    End If

    oNomFichier = Application.GetSaveAsFilename(InitialFileName:=sNomfichier, _
                                                fileFilter:="Fichiers PDF (*" & sExt & ", *" & sExt)
    If oNomFichier <> False Then
        Feuil1.ExportAsFixedFormat Type:=xlTypePDF, _
                                   Filename:=oNomFichier, _
                                   Quality:=xlQualityStandard, _
                                   IncludeDocProperties:=True, _
                                   IgnorePrintAreas:=False, _
                                   OpenAfterPublish:=False
    End If
End Sub
 

Pièces jointes

  • 3.png
    3.png
    32 KB · Affichages: 33
Dernière édition:
Re,

Feuil1 est le CodeName de l'onglet "Facture". L'usage du CodeName permet de modifier le nom d'onglet, de déplacer cet onglet dans l'ensemble des feuilles sans avoir à retoucher au code VBA.

VB:
Option Explicit

Private Function NomFichierValide(sChaine As String) As Boolean
Dim i As Long
Const sCaracInterdits As String = """*/:<>?[\]|"
    NomFichierValide = True
    If Len(sChaine) = 0 Then
        NomFichierValide = False
        Exit Function
    End If
    For i = 1 To Len(sCaracInterdits)
        If InStr(sChaine, Mid$(sCaracInterdits, i, 1)) > 0 Then
            NomFichierValide = False
            Exit Function
        End If
    Next i
End Function

Sub EnregistrerSous()
Dim sNomfichier As String
Dim oNomFichier As Variant, sExt As String

    ChDir ThisWorkbook.Path

    sNomfichier = Feuil1.Range("B11")
    sExt = ".pdf"
 
    If NomFichierValide(sNomfichier) = False Then
        Feuil1.Range("B11").Select
        MsgBox "Nom de fichier invalide", vbCritical + vbOKOnly, "Nom de fichier"
        Exit Sub
    End If

    oNomFichier = Application.GetSaveAsFilename(InitialFileName:=sNomfichier, _
                                                fileFilter:="Fichiers PDF (*" & sExt & ", *" & sExt)
    If oNomFichier <> False Then
        Feuil1.ExportAsFixedFormat Type:=xlTypePDF, _
                                   Filename:=oNomFichier, _
                                   Quality:=xlQualityStandard, _
                                   IncludeDocProperties:=True, _
                                   IgnorePrintAreas:=False, _
                                   OpenAfterPublish:=False
    End If
End Sub
Re! Top merci à toi ! J'y vois un peu plus clair maintenant 😊
 
Re!

Je commence à peter un câble 😕. J'ai pu mettre le code pour la Feuil4 et cela fonctionne, mais quand je le mets pour la Feuil5 (en changeant les termes pour Feuil5), ça me met "Erreur de compilation, Variable nom définie".

Est-ce que tu saurais pourquoi ?
 

Pièces jointes

  • Capture.PNG
    Capture.PNG
    36.6 KB · Affichages: 24
  • Capture2.PNG
    Capture2.PNG
    45.3 KB · Affichages: 21
  • FACTURATION - Copie.xlsm
    FACTURATION - Copie.xlsm
    131 KB · Affichages: 9
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Problème macro
Réponses
4
Affichages
245
Réponses
3
Affichages
672
Réponses
3
Affichages
885
Retour