Macro export PDF & DXF page active

Bonjour,
N’ayant pas énormément de connaissance en macro et code VBA, je cherche à exporter la page en cours en PDF et DXF avec comme de nom de fichier :
Nom fichier Mise en plan_Indice de révision_Numéro de page_Nom de la page_Date du jour.

Après de multiples recherches et essais d’écriture d’une macro, je suis arrivé à un résultat qui ne me satisfait pas, Je n’arrive pas à récupérer toutes les données souhaitées : Numéro et nom de la page.
Quelqu’un peut-il m’aider ?

Ci-joint mon code :

Option Explicit
Dim swApp               As SldWorks.SldWorks
Dim swModel             As SldWorks.ModelDoc2
Dim swDrawModel         As SldWorks.ModelDoc2
Dim swDraw              As SldWorks.DrawingDoc
Dim swCustProp          As CustomPropertyManager
Dim swView              As SldWorks.View
Dim swExportPDFData     As SldWorks.ExportPdfData
Dim sFileName           As String
Dim sPathname           As String
Dim Revision            As String
Dim resolvedRevision    As String
Dim sSheetName          As String
Dim sSheetNumber        As String
Dim dateNow             As String
Dim nErrors             As Long
Dim nWarnings           As Long

Sub main()
    Set swApp = Application.SldWorks
    Set swDrawModel = swApp.ActiveDoc
    Set swDraw = swDrawModel
        
        ' Vérifier si une mise en plan est ouverte
        If swDrawModel Is Nothing Then
                MsgBox "Il n'y a pas de document de mise en plan ouvert."
                Exit Sub
        End If

        If swDrawModel.GetType <> swDocDRAWING Then
                MsgBox "Ouvrez d'abord une mise en plan, puis réessayez "
                Exit Sub
        End If

        If swDrawModel.GetPathName = "" Then
                MsgBox "Enregistrez d'abord le dessin, puis réessayez !"
                Exit Sub
        End If

    Set swView = swDraw.GetFirstView

    Set swView = swView.GetNextView

        ' Déterminer s'il y a une vue existante
        If swView Is Nothing Then
                MsgBox "Insérez d'abord une vue, puis réessayez !"
                Exit Sub
        End If

        ' On récupère le nom du fichier de la mise en plan
    sPathname = Replace(swDraw.GetPathName, ".SLDDRW", "")     ' Récupère le nom du fichier et enlève l'extension .SLDDRW
      
        ' On récupère les valeurs qui nous intéresse dans les propriétés personnalisées du plan
    Set swCustProp = swDraw.Extension.CustomPropertyManager("")
    swCustProp.Get2 "Révision", Revision, resolvedRevision      ' Récupère l'indice de Révision du fichier Mise en Plan
    
        ' On récupère la date du jour et on la met dans un format pouvant se mettre dans le nom d'un fichier
    dateNow = Replace(Date, "/", ".")
    
        ' On récupère les données de la feuille active
    'sSheetName = swDraw.ActivateSheet.GetSheetNames    ' Récupère le nom de la feuille active
    'sSheetNumber = swDraw.GetCurrentSheet              ' Récupère le numéro de la feuille active
     
        'Obtenir et définir le nom du fichier
    sFileName = sPathname & " - " & resolvedRevision & " - " & dateNow      'Code fonctionnel mais sans le numéro et le nom de la page
    'sFileName = sPathname & " - " & resolvedRevision & " - " & sSheetNumber & " - " & sSheetName  & " - " & dateNow        'Code non-fonctionnel voulu

    Set swExportPDFData = swApp.GetExportFileData(1)

    swExportPDFData.SetSheets swExportData_ExportCurrentSheet, ""

    swExportPDFData.ViewPdfAfterSaving = False

    swApp.SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swDxfMultiSheetOption, swDxfActiveSheetOnly

        'Enregistrer au format DXF

    swDraw.Extension.SaveAs sFileName & ".DXF", 0, 0, Nothing, nErrors, nWarnings

        'Enregistrer au format PDF

    swDraw.Extension.SaveAs sFileName & ".PDF", 0, 0, swExportPDFData, nErrors, nWarnings

    End Sub

Merci beaucoup pour vos retour.
Manu

Une capture d’écran d’un nom de page et son numéro?
N° inclut dans le nom de la feuille ou dans l’ordre ou elles apparaissent?

1 « J'aime »

Bonjour Manu,

Voici ce que l’on utilise pour ce genre traitement.


…Voilà, voilà, voilà…
@+
AR.

Pour obtenir le nom d’une feuille:

vSheetName = swDraw.GetSheetNames
'On boucle sur les feuilles
For i = 0 To UBound(vSheetName)
        sheetName = vSheetName(i)
        'Debug.Print "Nom de feuille:" & sheetName

Next i

Pour modifier le nom de la feuille:

            swDraw.GetCurrentSheet.SetName "nom de la feuille"

Pour le N° soit le i (incrémentation), soit tu récupère le N° dans le nom de la feuille (suivant besoin)

1 « J'aime »

:smile:J’me disais bien que cette conversation me disais quelque chose, il s’agit bien de la suite de Macro export DXF feuille par feuille - #23 par Cyril_f n’est-ce pas ?
Les propositions précédentes ne convenaient pas ?
Hormis le Nom des feuilles, qui est une nouvelle demande, as-tu essayé de modifier ta macro ?
Ceci dit les propositions de @sbadenis sont tout à fait pertinentes… :grin:

1 « J'aime »