Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

sami1814

XLDnaute Nouveau
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

  • Export PDF.xlsm
    19.5 KB · Affichages: 16

sami1814

XLDnaute Nouveau
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

  • Export PDF.xlsm
    21.2 KB · Affichages: 12

kiki29

XLDnaute Barbatruc
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
    32 KB · Affichages: 28
Dernière édition:

sami1814

XLDnaute Nouveau
Re! Top merci à toi ! J'y vois un peu plus clair maintenant
 

sami1814

XLDnaute Nouveau
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
    36.6 KB · Affichages: 20
  • Capture2.PNG
    45.3 KB · Affichages: 16
  • FACTURATION - Copie.xlsm
    131 KB · Affichages: 9

kiki29

XLDnaute Barbatruc
Salut, parce que le CodeName Feuil5 n'existe pas ( voir pj )
tu as Feuil1 Feuil2 Feuil3 Feuil4 Feuil6 Feuil7 mais pas de Feuil5
 

Pièces jointes

  • 1.png
    6 KB · Affichages: 22
  • CodeName.png
    61.1 KB · Affichages: 21
Dernière édition:

Discussions similaires

Réponses
3
Affichages
750
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…