XL 2019 Nom et chemin VB enregistrement PDF

Yeti_69

XLDnaute Nouveau
Bonjour à tous,
En cherchant sur le forum, j'ai réussi tant bien que mal à faire un macro pour faire un export PDF. Les points que j'aimerai, pouvoir modifier, c'est :
- que le fichier pdf s'enregistre dans le même répertoire que le fichier .xslm
- que le nom du fichier pdf créé soit le texte d'une cellule + .pdf
VB:
Sub PDF_SAVE()
    Dim fichier As String
    fichier = M13 & ".pdf"
 
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:="D\" & fichier & " .pdf", _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    From:=1, To:=1, OpenAfterPublish:=False
 
    MsgBox "Fichier pdf créé !"
End Sub
Avez-vous une idée svp pour ces points ?
(Remarque : je ne sais pas ce que j'ai fait, je me rend compte qu'entretemps ma macro ne fonctionne plus... il faut vraiment que je progresse !).
Merci d'avance.
 

kiki29

XLDnaute Barbatruc
Salut, à adapter à ton contexte.
VB:
Option Explicit

Sub SauverPDF()
Dim sFichier As String
Dim sCell As String
    sCell = "M13"
    sFichier = Feuil1.Range(sCell)
    If NomFichierValide(sFichier) Then
        Feuil1.ExportAsFixedFormat Type:=xlTypePDF, _
                                   Filename:=ThisWorkbook.Path & "\" & sFichier, _
                                   Quality:=xlQualityStandard, _
                                   IncludeDocProperties:=True, _
                                   IgnorePrintAreas:=False, _
                                   From:=1, To:=1, _
                                   OpenAfterPublish:=False
        Application.StatusBar = "Fichier pdf créé"
    Else
        With Feuil1
            .Activate
            .Range(sCell).Select
        End With
        Application.StatusBar = "Nom de Fichier INVALIDE"
    End If
End Sub

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

Feuil1 est le CodeName de la feuille concernée, pas le nom d'onglet même si par défaut ils sont identiques à la création d'un classeur. Cela permet de ne pas avoir à retoucher au code VBA en cas de renommage d'onglets, de déplacement de feuilles par exemple.
 
Dernière édition:

Yeti_69

XLDnaute Nouveau
Merci beaucoup ! c'est excellent, je me demande pourquoi je n'ai pas fait ça avant, c'est tellement pratique !
J'ai réussi à adapter, j'ai pas compris chaque ligne / caractère / instruction, mais c'est génial !
Bonne journée !
 

Discussions similaires

Statistiques des forums

Discussions
312 069
Messages
2 085 041
Membres
102 764
dernier inscrit
nestu