Macro export Piece DXF

Bonjour j’ai longuement essayer de créer une macro simple pour exporter en DXF la vue actuelle de ma piece (.part) , j’ai beau essayer d’utiliser exporttoDWG2 j’arrive jamais à faire fonctionner ma maccro, je pars de loin en VBA aussi j’ai essayer de bidouiller plusieurs code que j’ai trouver sur d’autre topic mais rien n’y fait. et ChatGPT n’a pas réussi à répondre a mon besoin pourtant simple en apparence .

Hâte de vous lire les ingé du forum :slight_smile:

ChatGPT … mais qu’es-ce que vous avez tous avec ce truc maintenant ? C’est jamais qu’un robot qui copie et colle des bouts de texte qu’il voit. Bref

Tu as essayé de faire une macro par apprentissage en enregistrant tes mouvement lors de la création d’un DXF ? Ca pourrait te permettre de voir les fonctions de bases qui sont appelées pour ton action

1 « J'aime »

C’est un outil Gpt , c’est bien plus que ça a mon avis mais oui il prend ces informations sur une large base de donnée. bref²

Oui j’ai commencer par faire ça mais quand bien meme je réalise un DXF de ma piece ça me sort un code , je reessaye avec la meme pièce en suppriment le DXF effectué au préalable , il se lance mais semble faire aucune action, et pas de creation de DXF en sortie…

' ******************************************************************************
' macro recorded on 04/21/23 by CAO21
' ******************************************************************************
Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

' Save As
longstatus = Part.SaveAs3("mon chemin.DXF", 0, 2)

' Redraw
Part.GraphicsRedraw2
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameLeft = 0
myModelView.FrameTop = 22
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWORKS 2020\templates\Mise en plan.drwdot", 0, 0, 0)
swApp.ActivateDoc2 "Mise en plan25 - Feuille1", False, longstatus
Set Part = swApp.ActiveDoc
Set Part = swApp.ActiveDoc
Set myModelView = Part.ActiveView
myModelView.FrameLeft = 0
myModelView.FrameTop = 22
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
swApp.ActivateDoc2 "nom piece", False, longstatus
Set Part = swApp.ActiveDoc

' New View
Part.NameView "*En cours"
Dim myView As Object
Set myView = Part.CreateDrawViewFromModelView3("cheminpiece", "*En cours", 0, 0, 0)
boolstatus = Part.DeleteNamedView(*En cours)
Part.ClearSelection2 True
End Sub

voila le code que ça me sort… et quand je l’execute ensuite j’ai une erreur de synthaxe sur

boolstatus = Part.DeleteNamedView(*En cours)

Bonjour,
Pour l’erreur de syntaxe c’est dû à l’oubli des guillemets autour de *En cours. Sans les guillemets il considère que c’est une variable donc comme elle n’existe pas, ou est vide, il retourne une erreur.

2 « J'aime »

Bonjour Cyril merci de ta réponse, ça a résolu l’erreur de synthaxe néanmoins le probleme ce déplace un peu plus bas , lorsque je lance la macro j’ai le message
suivant:
image

la ligne

Set myView = Part.CreateDrawViewFromModelView3("chemin de ma pièce.SLDPRT", "*En cours", 0, 0, 0)

est désormais surligné,

Lorsque que j’exécute la macro , une mise en plan vierge s’ouvre également .

Bonjour,
Après analyse la macro est à mon avis pas faite pour le besoin.
Faudrait plutôt regarder ce code et l’adapter si besoin.

Ou est-ce que je peux trouver ça ? Copy public_documents \samples\tutorial\api\2012-sm.sldprt to ’ c:\temp . ’

Normalement c’est dans le dossier Documents public de Windows.
C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS XXXX\samples\tutorial

Bonjour @leon.c

La macro jointe devrait permettre d’enregistrer la vue en cours d’une pièce au format DXF ou DWG.
La pièce doit être ouverte et document actif.
A noter que les corps surfaciques ne sont pas pris en compte dans la fonction d’export de SolidWorks.

Cordialement,
PartToDxfDwg.swp (76,5 Ko)

3 « J'aime »

EDIT: ça marche parfaitement bien sur 2 des 3 postes , sur le 3eme la macro fonctionne, mais par la suite impossible de créer une nouvelle pièce , le problème persiste jusqu’à l’ouverture d’une autre pièce. Une idée d’où pourrait provenir ce bug? (C’est un détail, étant donner qu’a l’étape de création de DXF nous ne sommes théoriquement plus dans une phase de création de nouvelles pièces)

Bonjour,

J’ai ce même comportement sur mon PC, le menu associé à la fonction de création ne répond pas après exécution de la macro.
En suivant l’exécution pas à pas, la création d’une nouvelle pièce est possible tout au long de la macro, jusqu’à la fonction ExportToDWG2, et devient impossible après…
C’est elle qui semble à l’origine du problème, et je n’ai pas la moindre idée de la façon de le contourner.

2 « J'aime »

Il semble que ce GPT n’a pas bien structuré le code, néanmoins il a fait preuve d’une bonne logique de {penser}, creer une mep de la vue en cours puis exporter en dxf, pas mal,

Option Explicit

Dim swApp As Object
Dim swModel As ModelDoc2
Dim swdrawing As DrawingDoc
Dim status As Boolean
Const modelPath As String = "C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2018\templates\Drawing.drwdot"
Const nameView As String = "Current"

Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    If Not (swModel.GetType() = 1 Or swModel.GetType() = 2) Then
        MsgBox "Fonctional only on  'Part' or 'Assembly' documents.", vbCritical
        End
    End If
    Dim path As String
    path = swModel.GetPathName
    On Error GoTo err
    swModel.nameView nameView
    Set swdrawing = swApp.NewDocument(modelPath, 0, 0, 0)
    swdrawing.CreateDrawViewFromModelView3 path, nameView, 0, 0, 0
    Set swModel = swApp.ActiveDoc
    path = Left(path, InStr(1, path, ".")) + "dxf"
    Dim error As Long, warning As Long
    status = swModel.Extension.SaveAs(path, 0, 1, Nothing, error, warning)
    swApp.CloseDoc ""
    Set swModel = swApp.ActiveDoc
    swModel.DeleteNamedView nameView
    If status = False Then GoTo err
    MsgBox "Success", vbInformation
Exit Sub
err:
    MsgBox "Error in processing", vbCritical
End Sub

Il aurait réussi sil a deviner que le nom (*En cours) appartient a la palette des vues non pas au modèle :grin:

Peut-être à cause du tableau des vues, déclaré pour 2 vues mais seulement 1 est définie,

Bonjour,
Je pense plutôt que c’est lié au fait de ne pas vider les objets de la mémoire.
Le formulaire reste actif chez moi mais ne m’empêche pas à minima de créer un nouveau fichier (pas essayé de faire quoi que ce soit dedans).
Faut ajouter je pense du « Set xxx = Nothing » à différents endroits de la macro.

1 « J'aime »

@m.blt avec cette macro je n’ai pas de soucis après l’export pour la création de nouvelle pièce mais j’avais le soucis avec une autre, j’ai pas eu le temps de me pencher dessus pour voir la différence entre les deux mais si ça peut aider.

DXF avec ligne de pliage.swp (36 Ko)