Macro export DXF feuille par feuille

Je ne connais rien aux macros et j'aimerais savoir si c'est possible de faire une macro d'export DXF qui exporte tous les feuillets d'un mise en plan dans des fichiers séparés en gardant le nom des feuillets.

Après recherche sur le forum j'ai trouvé ce sujet avec la macro en pièce jointe, qui est ce que je recherche dans le principe, seulement elle fait les PDF et non les DXF:

https://www.lynkoa.com/forum/solidworks/export-diff%C3%A9renci%C3%A9-en-pdf-et-dxf-des-onglets-de-mise-en-plan-par-une-macro

Est-ce qu'une bonne âme du forum pourrait me modifier cette macro pour remplacer le PDF par le DXF.
Est-ce que la macro va garder les options de la fonction "enregistrer sous" de SolidWorks que j'utilise quand je le fais manuellement comme l'utilisation d'un fichier de projection ?

 

En vous remerciant


pdf_page_par_page.swp

Salut,

J'ai remplacé ".pdf" par ".dxf" dans la macro

Essaye ça devrait marcher


dxf_page_par_page.swp

Merci,
Mais ça ne fonctionne pas correctement, 

Ma mise en plan à une vue avec cotation pour la fab (onglet "Feuille 1") et un déplié de tôle pour la découpe laser (onglet "Rep A")

La macro PDF fait:

un fichier: "nom du fichier_Feuille 1.PDF"

un fichier "nom du fichier_Rep A.PDF"

La macro DXF fait:

un fichier:" 00_nom du fichier_Feuille1.dxf"

un fichier: "00_nom du fichier_Rep A.dxf"

un fichier: "01_nom du fichier_Feuille1.dxf"

un fichier :"01_nom du fichier_Rep A.dxf"

Bonjour,

Je ne suis pas certain de comprendre le message précédent.

C'est la macro PDF fait et la macro DXF devrait faire que l'on doit comprendre?

Je n'ai pas ouvert la macro mais s'il y a simplement eu un changement d'extension de fichier sur l'ensemble du code, ça ne fait logiquement qu'enregistrer sous un autre format.

 

Tout à fait,

La macro "pdf_page_par_page.swp" crée 1 fichier par feuille de mise en plan et intègre dans le nom du fichier PDF le nom du fichier de mise en plan + le nom de la feuille

Par exemple, si le fichier de la mise en plan s'appelle "TOTO" et possède 2 feuilles, "PLAN"  et "Rep A", la macro PDF fait:

1 fichier "TOTO_PLAN" avec uniquement la feuille "PLAN"

1 fichier "TOTO_Rep A" avec uniquement la feuille "Rep A"

C'est ce que j'aimerais faire avec les DXF.

Avec la macro "dxf_page_par_page.swp" on retrouve 4 fichiers

"00_TOTO_PLAN" avec uniquement la feuille "PLAN"

"00_TOTO_Rep a" avec uniquement la feuille "Rep A"

"01_TOTO_PLAN" avec uniquement la feuille "PLAN"

"01_TOTO_Rep a" avec uniquement la feuille "Rep A"

Bonjour,

Avec la macro utilisée il te faut modifier les options d'export des formats dxf/dwg dans les options de solidworks :

Cordialement,

Bonjour,

Le résultat est le même, j'ai toujours 4 fichiers au lie de 2

Contrairement aux PDF

Bonjour,

Pour ma part, je suis paramétré sur "Exporter toutes les feuilles dans un fichier" et je n'ai aucun problème.

Il n'y a que si le paramétrage est sur "Exporter toutes les feuilles dans des fichiers séparés" où l'export génère 4 fichiers.

Ce que j'ai pu constater également, c'est qu'il faut forcer le changement de paramétrage deux fois pour que ce soit pris en compte correctement (bug probable de SW2020).

SW n'avait pas pris en compte le paramètre "Exporter toutes les feuilles dans un fichier"

J'ai bien 2 fichiers avec la bonne syntaxe mais c'est la même feuille dans les 2, celle qui est "active" à l'écran.

En regardant la macro, il y a plusieurs fois "swExpPdfData" et "SldWorks.ExportPdfData"

et une ligne  outFile = outFile & IIf(INCLUDE_DRAWING_NAME, drawName & "_", "") & sheetName & ".dxf" ou c'est ".pdf" dans la macro PDF qui fonctionne

Est-ce les  .....ExpPdfData qu'il faut remplacer par l'équivalent pour les DXF ?

Oups, je regarde plus en détail, je n'ai pas ouvert les fichiers.

Re,

Normalement le code ci-dessous répond au besoin

Option Explicit
Dim swApp       As SldWorks.SldWorks
Dim swModel     As SldWorks.ModelDoc2
Dim swDraw      As SldWorks.DrawingDoc
Dim sPathname   As String
Dim vSheetName  As Variant
Dim nErrors     As Long
Dim nWarnings   As Long
Dim i           As Long
Dim bRet        As Boolean
Dim lParam      As Long

Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    
    lParam = swApp.GetUserPreferenceIntegerValue(swDxfMultiSheetOption)
    
    'Changement paramétrage export dxf si différent de feuille active
    If lParam <> 0 Then
        bRet = swApp.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swDxfMultiSheetOption, swDxfMultisheet_e.swDxfActiveSheetOnly)
    End If
    
    sPathname = swModel.GetPathName
    sPathname = Left(sPathname, Len(sPathname) - 7)
    vSheetName = swDraw.GetSheetNames
    For i = 0 To UBound(vSheetName)
        bRet = swDraw.ActivateSheet(vSheetName(i))
        bRet = swModel.SaveAs4(sPathname & "_" & vSheetName(i) & ".dxf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, nErrors, nWarnings)
    Next i
    ' Retour à la Feuille 1
    bRet = swDraw.ActivateSheet(vSheetName(0))
    ' Remise en place du paramétrage initial
    bRet = swApp.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swDxfMultiSheetOption, lParam)
End Sub

 

3 « J'aime »

Merci,
Elle fonctionne parfaitement ;-)