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 :
-
Ouvrir l’éditeur VBA : Dans SolidWorks, allez dans
Outils > Macro > Nouvelle Macro...ouModifier Macro...si vous avez déjà un module. -
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 -
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
swViewmentionnée dans le message original est effectivement inutile pour cette tâche et peut être supprimée.
-
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 macroExportActiveSheetPDFDXF.
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é.