SolidWorks: Exporter la feuille active en PDF/DXF avec nom personnalisé

J’ai besoin d’une macro VBA pour exporter la feuille active de ma mise en plan SolidWorks en PDF et DXF. Je souhaite un nom de fichier spécifique incluant le numéro et le nom de la page active, mais ma tentative actuelle ne récupère pas ces informations correctement.

Le problème venait de la difficulté à identifier correctement la feuille de mise en plan active et à en extraire son nom et son numéro d’ordre pour la construction du nom de fichier. La solution consiste à utiliser l’API SolidWorks pour cibler spécifiquement la feuille courante et récupérer ses propriétés.

Voici la procédure pour créer et utiliser la macro VBA :

  1. Ouvrir l’éditeur VBA : Dans SolidWorks, allez dans Outils > Macro > Nouvelle Macro... ou Modifier Macro... si vous avez déjà un module.

  2. Insérer le code VBA : Copiez le code suivant dans un nouveau module (ex: Module1). Ce code a été fourni par sbadenis avec l’aide de Claude.ai.

    Option Explicit
    
    Sub ExportActiveSheetPDFDXF()
    
        Dim swApp As SldWorks.SldWorks
        Dim swModel As SldWorks.ModelDoc2
        Dim swDraw As SldWorks.DrawingDoc
        Dim swSheet As SldWorks.Sheet
        Dim sSheetName As String
        Dim lSheetIndex As Long
        Dim sFileNameBase As String
        Dim sFolderPath As String
        Dim sRevision As String ' Variable pour l'indice de révision
        Dim sDate As String
        Dim vSheetNames As Variant
        Dim i As Long
    
        Set swApp = Application.SldWorks
        Set swModel = swApp.ActiveDoc
    
        ' Vérifier si le document est une mise en plan
        If swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
            MsgBox "Ce document n'est pas une mise en plan SolidWorks.", vbCritical
            Exit Sub
        End If
    
        Set swDraw = swModel
    
        ' 1. Récupérer la feuille active
        Set swSheet = swDraw.GetCurrentSheet
        sSheetName = swSheet.GetName
    
        ' 2. Récupérer l'index de la feuille active (base 1)
        vSheetNames = swDraw.GetSheetNames
        lSheetIndex = 0
        For i = 0 To UBound(vSheetNames)
            If vSheetNames(i) = sSheetName Then
                lSheetIndex = i + 1 ' L'index est basé sur 0 dans le tableau, on veut une base 1
                Exit For
            End If
        Next i
    
        ' 3. Récupérer le nom du fichier de mise en plan (sans extension et chemin)
        sFileNameBase = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, ".") - 1)
        sFileNameBase = Right(sFileNameBase, Len(sFileNameBase) - InStrRev(sFileNameBase, "\"))
    
        ' 4. Récupérer l'indice de révision (exemple : propriété personnalisée "Revision")
        '    Si cette propriété n'existe pas, elle sera vide.
        sRevision = swModel.CustomInfo("Revision")
        If sRevision = "" Then sRevision = "00" ' Valeur par défaut si non trouvée
    
        ' 5. Récupérer la date du jour
        sDate = Format(Now, "yyyy-mm-dd") ' Format AAAA-MM-JJ
    
        ' 6. Construire le nom de fichier de sortie selon le format demandé
        '    Nom fichier Mise en plan_Indice de révision_Numéro de page_Nom de la page_Date du jour
        Dim sOutputFileName As String
        sOutputFileName = sFileNameBase & "_" & sRevision & "_" & lSheetIndex & "_" & Replace(sSheetName, " ", "_") & "_" & sDate
    
        ' 7. Définir le dossier de sortie (ici, le même que le fichier de mise en plan)
        sFolderPath = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, "\"))
    
        ' 8. Exporter la feuille active en PDF
        '    Les options d'exportation PDF peuvent être configurées via swDraw.SetupPDFExportOptions
        '    Pour une exportation simple de la feuille active, SaveAsPDF est suffisant.
        swDraw.SaveAsPDF (sFolderPath & sOutputFileName & ".pdf")
    
        ' 9. Exporter la feuille active en DXF
        '    Les options d'exportation DXF peuvent être configurées via swDraw.SetupDXFExportOptions
        '    Pour une exportation simple de la feuille active, SaveDXF est suffisant.
        swDraw.SaveDXF (sFolderPath & sOutputFileName & ".dxf")
    
        MsgBox "Export de la feuille active '" & sSheetName & "' en PDF et DXF terminé.", vbInformation
    
    End Sub
    
  3. Comprendre le code :

    • swDraw.GetCurrentSheet : Cette fonction est cruciale pour cibler la feuille active et non une autre.
    • swSheet.GetName : Récupère le nom exact de la feuille active.
    • La boucle For i = 0 To UBound(vSheetNames) : Permet de trouver l’index numérique (position) de la feuille active dans la liste de toutes les feuilles, en s’assurant qu’il correspond bien à la feuille courante.
    • swModel.CustomInfo("Revision") : Tente de récupérer l’indice de révision depuis une propriété personnalisée du document, comme demandé dans le format de nom de fichier. Adaptez le nom de la propriété si nécessaire.
    • Replace(sSheetName, " ", "_") : Remplace les espaces dans le nom de la feuille par des underscores pour éviter les problèmes dans les noms de fichiers.
    • La partie swView mentionnée dans le message original est effectivement inutile pour cette tâche et peut être supprimée.
  4. Exécuter la macro : Ouvrez votre mise en plan SolidWorks, activez la feuille que vous souhaitez exporter, puis allez dans Outils > Macro > Exécuter... et sélectionnez la macro ExportActiveSheetPDFDXF.

Cette macro générera les fichiers PDF et DXF de la feuille active dans le même répertoire que votre mise en plan, avec le nom de fichier structuré comme souhaité.