Macro création de bloc à partir d'esquisse 2D dans une pièce

Bonjour,

Je souhaite faire une macro (SW2019) afin de créer automatiquement des blocs à partir des esquisses 2D.
Les esquisses correspondent à un calque unique d’un fichier dxf.

Donc j’ouvre le dxf et je me retrouve avec différentes esquisses 2D.

Voici le code de la macro généré par enregistrement avec commentaires…:

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

’Sélection de l’esquisse "appui top"
boolstatus = Part.Extension.SelectByID2(« appui top », « SKETCH », 0, 0, 0, False, 0, Nothing, 0)
Dim myBlockDefinition As Object
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) 'Création du bloc

’Sélection de l’esquisse "pointes bottom"
boolstatus = Part.Extension.SelectByID2(« pointes bottom », « SKETCH », 0, 0, 0, False, 0, Nothing, 0)
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) 'Création du bloc

’Sélection de l’esquisse "cales pm"
boolstatus = Part.Extension.SelectByID2(« cales pm », « SKETCH », 0, 0, 0, False, 0, Nothing, 0)
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) 'Création du bloc

End Sub

Le répertoire d’enregistrement est défini dans les options du document.
Mais aucun bloc n’est enregistré…
Quelqu’un pourrait-il me donner une piste svp? merci d’avance
Fred

Bonjour,
Il faut le sauvegarder à la fin de la procédure.
Save Method (ISketchBlockDefinition) - 2022 - SOLIDWORKS API Help

1 « J'aime »

Merci beaucoup!
J’ai essayer mais n’étant pas un spécialiste j’ai du mal à appliquer la méthode.
Un petit coup de main serait le bien venu.

Re,
A la fin du code ajouter ceci:

bRet = swSketchBlockDef.Save(NomDeFichier+Chemin)

Juste après:

Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing)

Le nom de fichier doit être xxx.sldblk

Désolé, je dois pas être doué…

Voici mon code:
Sub main()

Dim value As Boolean
Dim bRet As Boolean

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

Dim Dir As String
Dir = Part.GetPathName()
Dir = Left(Dir, InStrRev(Dir, «  »))

’Sélection de l’esquisse "appui top"
boolstatus = Part.Extension.SelectByID2(« appui top », « SKETCH », 0, 0, 0, False, 0, Nothing, 0)
Dir = Dir & "appui top.sldblk"

Dim myBlockDefinition As Object
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) 'Création du bloc
bRet = myBlockDefinition.Save(Dir)

J’ai un message d’erreur « erreur d’exécution ‹ 91 ›:
variable objet ou variable de bloc with non définie »

Quand le déroule en pas à pas, mon « myBlockDefinition » est égale à « nothing » avant la sauvegarde. Est ce que c’est parceque mon bloc serait vide? pourtant je sélectionne bien mon esquisse…

Merci de votre patience et de votre réactivité.

A la place d’object à cette ligne:

Dim myBlockDefinition as Object

Mettre:

Dim myBlockDefinition As SldWorks.SketchBlockDefinition
1 « J'aime »

Bonjour @fgauvreau
En effet vous faites erreur dans la sélection,
La fonction makesketchfromselected(), a besoin d’entité esquisse, non pas l’esquisse elle même
Sinon utisez mackesketchblockfromscketch()

1 « J'aime »

Génial!! ça fonctionne nickel
Un grand Merci pour votre aide