VBA Macro pour générer un PDF sans l'enregistrer

Résolu
Looping38 Messages postés 91 Date d'inscription   Statut Membre Dernière intervention   -  
Looping38 Messages postés 91 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je bloque sur une macro. Je souhaite générer un pdf d'une sélection d'un classeur en lui donnant un nom selon certaines celulles, mai uniquement l'ouvrir par la fonction OpenAfterPublish:= _True. et pas dorcement l'enregistrer. A l'utilisateur de faire enregistrer sous depuis adobe Reader.
En effet, je ne connais pas forcement le lieu de destination du fichier pour l'utilisateur.
Une alternative serait de proposer une boite de dialogue pour choisir la destination, en proposant déja un nom de fichier. (solution que je souhaite uniquement si pas possible autrement.
Actuellement j'utilise le code suivant :

Sub ExportPDFnomvariable()
'Sélection de la zone à imprimer
CV = 6
With Worksheets("Panorama FM")
For n = 8 To 115
If .Columns(n).Hidden = False Then CV = CV + 1
If CV = 11 Then Exit For
Next n
.Range(Cells(8, 2), Cells(114, n)).Select

' Macro export en PDF avec nom variable selon contenu cellule.

'Chemin d'accès pour l'enregistrement
ChDir "C:\Users\Martin GIVELET\Desktop\Devis Santé"
selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\Martin GIVELET\Desktop\Devis Santé\DEVIS " & " " & Sheets("Données Client").Cells(1, 10).Value & " " & Sheets("Données Client").Cells(5, 5).Value & " " & Sheets("Données Client").Cells(4, 5).Value, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True

End With

End Sub

Merci de votre aide.
Cordialement, Martin

2 réponses

  1. Looping38 Messages postés 91 Date d'inscription   Statut Membre Dernière intervention   1
     
    J'ai avancé et je partage ma solution : J'enregistre le fichier dans le même répertoire que le fichier excel.
    Dans l'idéal, il faudrait vérifier si un dossier "Devis" existe pour l'utiliser sinon, le créer.

    Sub ExportPDFnomvariable()
    'incrémentation N° à chaque impression

    Sheets("Données Client").[C25] = Sheets("Données Client").[C25] + 1

    'Séléction de la zone à imprimer
    CV = 6
    With Worksheets("Panorama FM")
    For n = 8 To 123
    If .Columns(n).Hidden = False Then CV = CV + 1
    If CV = 11 Then Exit For
    Next n
    Range(Cells(8, 2), Cells(121, n)).Select

    ' Macro export en PDF avec nom variable selon contenu cellule.

    'Chemin d'accès pour l'enregistrement
    ChDir (ThisWorkbook.Path)

    'Chemin d'accès + nom du document souhaité
    'Attention ==> Sheets("Feuille de route").Cells(N°deLIGNE, N°deCOLONNE).Value
    'Pour les espaces, copier ==> &" "&
    'Pour autoriser ou non l'ouverture du document en pdf a chaque enregistrement changer OpenAfterPublish:= _False/True

    selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    " Devis " & Sheets("Données Client").Cells(1, 10).Value & " " & Sheets("Données Client").Cells(5, 5).Value & " " & Sheets("Données Client").Cells(4, 5).Value & Sheets("Données Client").Cells(25, 3).Value, Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
    True

    End With

    End Sub

    Si quelqu'un peut m'aider sur la fin...
    Martin
    0
    1. Looping38 Messages postés 91 Date d'inscription   Statut Membre Dernière intervention   1
       
      Comment créer le dossier DEVIS s'il n'existe pas?
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    bonjour,

    a mettre dans Thisworkbook tiré du site:

    https://excel-malin.com/

    Option Explicit
    Private Sub Workbook_Open()
    TesteSiDossierExiste
    End Sub
    Sub TesteSiDossierExiste()
    'par Excel-Malin.com ( http://excel-malin.com )
    
    Dim MonDossier As String
    
    MonDossier = ThisWorkbook.Path & "\DEVIS "
    
        If DossierExiste(MonDossier) = True Then
           ' MsgBox "Le dossier existe..."
        Else
          MkDir (ThisWorkbook.Path & "\DEVIS ")
        End If
    
    End Sub
    Public Function DossierExiste(MonDossier As String)
    'par Excel-Malin.com ( http://excel-malin.com )
    
       If Len(Dir(MonDossier, vbDirectory)) > 0 Then
          DossierExiste = True
       Else
          DossierExiste = False
       End If
    End Function
    
    

    0
    1. Looping38 Messages postés 91 Date d'inscription   Statut Membre Dernière intervention   1
       
      Super merci, ça marche.
      0