Probleme macro export DXF Tolerie

Bonjour à tous, j’ai écris une macro permettant d’effectuer un export du déplié de pièces de tolerie, tout marche bien lorsque celle ci est enclenchée depuis une piece.

Je souhaite la faire fonctionner meme lorsque le document actif est un plan (j’y arrive pour export step).

L’objet est donc, dans le cas ou le point de depart est un plan, d’ouvrir/activer la piece du meme nom puis de faire l’export via ExportToDWG2.

Or j’obtiens une erreur « propriété ou méthode non gérée par cet objet » dans ce contexte, des idées?

(pourtant apres l’ouverture de la piece, MsgBox ("Le document actif est: " & swApp.ActiveDoc.GetTitle) m’indique bien que la pièce est active)

---------------------------------VERIFICATION DU CONTEXTE ET LANCEMENT-------------------------

Sub dxfexport()

If Not swDOC Is Nothing Then
If swDOC.GetType = swDocDRAWING Then
If fso.FileExists(PART_PATH) Then
Call openpart
Call dxf
Call closepart

    Else: MsgBox ("Pièce Introuvable")
    End If
ElseIf swDOC.GetType = swDocPART Then
    'openpart
    dxf
End If

Else
MsgBox « Veuillez ouvrir un document », vbExclamation + vbOKOnly
End If

End Sub

---------------------------------OUVERTURE DE LA PIECE----------------------------
Sub openpart()
Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

Do
If fso.FileExists(PART_PATH) Then
Set Part = swApp.OpenDoc6(PART_PATH, 1, 0, «  », longstatus, longwarnings)
swApp.ActivateDoc3 PART_PATH, False, swRebuildOnActivation_e.swDontRebuildActiveDoc, longstatus
'swApp.ActivateDoc2 PART_PATH, False, longstatus
Set Part = swApp.ActiveDoc
Else: MsgBox (« Pièce Introuvable »)

End If
Loop Until Part.GetType = swDocPART

Part.EditRebuild3
Part.ViewZoomtofit2
MsgBox ("Le document actif est: " & swApp.ActiveDoc.GetTitle)
End Sub

-------------------------------------------EXPORT------------------------------------
Sub dxf()

Dim modelPath As String
Dim longstatus As Long

modelPath = swDOC.GetPathName



Dim OUT_PATH As String
OUT_PATH = EXPORT_PATH & FILE_NAME & Indice + ".DXF"

Dim options As Long
options = 1 Or 2 Or 4 Or 8 Or 16 Or 32

'Codes d'options d'export:
'ExportFlatPatternGeometry = 1
'IncludeHiddenEdges = 2
'ExportBendLines = 4
'IncludeSketches = 8
'MergeCoplanarFaces = 16
'ExportLibraryFeatures = 32
'ExportFormingTools = 64
'ExportBoundingBox = 2048

If modelPath = "" Then
Err.Raise vbError, "", "Enregistrez votre pièce avant export"

Else

If False = swDOC.ExportToDWG2(OUT_PATH, PART_PATH, swExportToDWG_e.swExportToDWG_ExportSheetMetal, True, Empty, False, False, options, Empty) Then
    Err.Raise vbError, "", "Erreur d'export DXF"
End If

End If

End Sub

Bonjour @Clément_Barillot_1 ,

L’erreur vient sans doute de la méthode ExportToDWG2 qui est propre à la classe IPartDoc, et non à ImodelDoc2.
Il faut donc affecter le document de pièce actif à une variable swPart de type SldWorks.PartDoc.

 Dim swPart As SldWorks.PartDoc
        Set swPart = swApp.ActiveDoc
        If False = swPart.ExportToDWG2(OUT_PATH, PART_PATH, swExportToDWG_e.swExportToDWG_ExportSheetMetal, True, Empty, False, False, options, Empty) Then
            Err.Raise vbError, "", "Erreur d'export DXF"
        End If
1 « J'aime »

MERCIII! voici plusieurs jours que je galere, j’ai meme utilisé chatGPT pour m’aider… Tu es pour le moment meilleur que « lui » :wink:

Merci encore

Bonjour
Pour que ça fonctionne, il vas falloir aussi déplacer les déclarations vers (avant en global ) la fonction principale qui est « dxfexport() » non pas « openpart() »,
Ajouter la référence, déclaration et assignation du « fso »,
Supprimer la boucle « do » que si le fso ne trouve pas le fichier ça va entraîner une boucle infini,
(c’est ainsi que ça a fonctionné pour moi)

En réalité il s’agissait d’une erreur de ma part dans openpart:

Set Part = swApp.ActiveDoc
au lieu de
Set swDOC = swApp.ActiveDoc

Or dxf() exporte sur la base de swDOC…

Donc forcement… le principe etait bon mais la variable, non…

l’intervention de m.blt m’a permis de m’en rendre compte, tout silmplement…

pour ce qui est des déclarations, j’ai encore des doublons mais elle se font de type Public & non Dim, à l’initialisation de Main()

dxfexport() n’est pas ma fonction principale, la macro complete exporte en DXF, STEP + PDF, que l’on soit dans une piece ou son plan.

Je vais voir coté boucle inifinie, j’ai pas eu de probleme jusque là mais je note…

Bonjour,
Disons que là il y a moins de risque puisque le fichier existe obligatoirement.
Par contre du coup je me demande quel est l’intérêt de ce contrôle de l’existence du fichier puisque si j’ai bien compris soit on a directement le 3D d’ouvert soit on l’ouvre à partir du 2D donc il existe forcément.
Edit: par contre vérifier que le fichier exporté n’existe pas déjà serait bien plus utile (et de générer le comportement associé)

Bonjour,
Je m’en doutais que d’autres fonctions existent, mais en ne peut traiter que ce que vous avez posté :wink:

Bonjour cyril
Effectivement le 3d existe sûrement, mais pas forcément avec le même nom, voir même plus dans le répertoire spécifié ce qui va amorcé la boucle avec un message infini

Euh non, s’il est obtenu à partir d’une vue du 2D il ne peut qu’exister à l’emplacement défini hormis si fichier virtuel d’un asm mais pas le cas ici à ma connaissance.
Si j’ai bien compris c’est SW ouvert avec le fichier en visuel donc il existe obligatoirement.

Ce qui est pas le cas parce que dans le poste il a préciser le même nom que le drawing

1 « J'aime »

Exact, mal lu

1 « J'aime »