Macro inserer une CutList

Bonjour à tous,

Je cherche à créer une macro VBA dans SolidWorks pour automatiser la mise à jour des listes de pièces soudées (Cut Lists) dans mes mises en plan.

Voici mon contexte :

  • Je travaille souvent à partir de mises en plan déjà existantes avec toutes mes vues.
  • Lorsque je remplace la Part référencée par une autre Part, la Cut List n’est pas automatiquement mise à jour.

Mon objectif avec cette macro :

  1. Supprimer toutes les listes de pièces soudées existantes dans la mise en plan.
  2. Insérer une nouvelle Cut List basée sur la vue 1 du dessin.
  3. La nouvelle table doit idéalement utiliser un template spécifique et respecter le point d’ancrage défini dans le gabarit.

J’ai essayé plusieurs approches avec InsertWeldmentTable, InsertWeldmentCutList ou InsertWeldmentTableAnnotation, mais je rencontre systématiquement des erreurs 438 ou 91, liées à la sélection des vues ou à des méthodes non disponibles en VBA.

Est-ce que quelqu’un pourrait m’aider à trouver une méthode fiable en VBA pour :

  • Supprimer les anciennes Cut Lists
  • Insérer automatiquement la nouvelle sur la vue 1 avec le point d’ancrage du template

Merci d’avance pour votre aide et vos conseils ! :wink:

Bonjour;

Pourquoi essayer de faire cette mise à jour dans la mise en plan alors que Solidworks permet de le faire automatiquement dans la pièce ?
image
A associer avec « mise à jour automatique de la liste de pièce soudées » dans les réglages des propriété du modèle (Template) de vos mises en plan:


=> Cela devrait vous épargner une macro…

Dans une pièce, pour cocher les 2 lignes indiquées par @Maclane via macro:

Option Explicit

Public swApp As SldWorks.SldWorks
Public swModel As SldWorks.ModelDoc2
Public swPart As SldWorks.PartDoc
Public swBodyFolder As SldWorks.BodyFolder
Public swFeat As SldWorks.Feature

Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel.GetType() = swDocumentTypes_e.swDocASSEMBLY Or swModel.GetType() = swDocumentTypes_e.swDocDRAWING Then
Debug.Print "Ne fonctionne que sur une pièce"
Set swModel = Nothing
Set swApp = Nothing
Exit Sub
End If

Set swPart = swModel

Set swFeat = swPart.FirstFeature

While Not swFeat Is Nothing
'Debug.Print ""
'Debug.Print "Nom de l'élément : "; swFeat.Name
'Debug.Print "Type de l'élément : "; swFeat.GetTypeName2
If swFeat.GetTypeName2 = "SolidBodyFolder" Then
    Set swBodyFolder = swFeat.GetSpecificFeature2
    swBodyFolder.SetAutomaticCutList (True)
    swBodyFolder.SetAutomaticUpdate (True)
    swBodyFolder.UpdateCutList
    swBodyFolder.GetAutomaticUpdate
End If
Set swFeat = swFeat.GetNextFeature()
Wend

Set swBodyFolder = Nothing
Set swFeat = Nothing
Set swPart = Nothing
Set swModel = Nothing
Set swApp = Nothing
End Sub

1 « J'aime »

Bonjour;

Sinon l’Aide API Solidworks propose ce type de macro pour l’ajout de la cutlist dans la mise en plan:

'----------------------------------------------------------------------------
' Preconditions:
' 1. Verify that the specified cut list template exists.
' 2. Open public_documents\samples utorial\weldments\weldment_box2.sldprt.
' 3. Click File > Make Drawing from Part > OK > drag a view onto
'    the sheet > OK.
' 4. Expand the drawing view in the FeatureManager design tree.
' 5. Right-click weldment_box2 and select Open Part(weldment_box2.sldprt).
' 6. Right-click the Cut list folder and click Update Automatically.
' 7. Click Window > weldment_box2 - Sheet1*.
'
' Postconditions:
' 1. Inserts a weldment cut list table.
' 2. Examine the FeatureManager design tree and graphics area.
'
' NOTE: Because this part is used elsewhere, do not save changes.
'----------------------------------------------------------------------------
Option Explicit
Const WeldmentTableTemplate As String = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\english\cut list.sldwldtbt"

Sub Main()
  Dim swapp As SldWorks.SldWorks
  Dim oDrawing As DrawingDoc
  Dim swView As View
  Dim WMTable As SldWorks.WeldmentCutListAnnotation

  Set swapp = Application.SldWorks
  Set oDrawing = swapp.ActiveDoc
  Set swView = oDrawing.GetFirstView
  Set swView = swView.GetNextView

  ' Insert the weldment cut list table
  Set WMTable = swView.InsertWeldmentTable(False, 0.1996662889191, 0.1013905859662, swBOMConfigurationAnchor_TopLeft, "Default<As Welded>", WeldmentTableTemplate)
 

  End Sub
1 « J'aime »