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 .
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
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
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.
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:
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 .
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.
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)
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.
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
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.
@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.