Propriété personnalisé

Bonjour.

Je Voudrait depuis mon assemblage modifier une ou deux propriété personnalisé d'un pièce ( contenue dans mon assemblage sans l'ouvrir )  

Le but serait  de piloté tout cela depuis un macro exel. 

je n'ai trouver que cela qui marche correctement : Part.CustomInfo("No_article) = 200020

Mais il faut ouvrir la pièce :/ .

Pouvait vous m'aider 

Salut,

Tu peux modifier les propriétés personnalisées d'un document SolidWorks sans l'ouvrir en utilisant les API Document Manager. Ce sont les API qu'utilisent les applications tels que les MyCadTools.

Personnellement, j'ai créé une application qui lie et modifie les propriétés des composants d'un assemblage afin de gérer les nomenclatures et d'assurer le lien avec notre ERP.

Tu dois pour cela faire une demande de licence dans ton espace client.

Ensuite voici quelques exemples.

Bon code...

2 « J'aime »

Bonjour,

C'est quoi que tu ne veux pas ouvrir dans SW ? ta pièce ou ton assemblage ?

regarde par ICI, la demande ressemble un peu (voir beaucoup).

Cordialement,

1 « J'aime »

Merci de vos réponse je ne veux pas ouvrir ma pièces mon assemblage serait  actif.

et oui d.roger  j'essaye de m'inspiré de cette personne mais j'ai encore quelque souci.

Dim swApp As Object

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

Sub Modif_art2()

'Set swApp = _
'Application.SldWorks

'Set Part = swApp.ActiveDoc
Set swApp = CreateObject("SldWorks.Application")
Set swModelDoc = swApp.ActiveDoc

boolstatus = Part.Extension.GetModelDoc2("XXXXXD06-1@XXXXX_630S_chgt_D_bavette-1", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Part.CustomInfo("No_article") = 200


' fonctionne dans une piece
'boolstatus = Part.AddCustomInfo3("", "No_article", 1, "")
'Part.CustomInfo("No_article") = 2000200
End Sub
 

Mais voila actuellement mon problème .

erreur d'éxecution 91 

variable objet ou variable bloc with non définie

Bonjour,

Tu creer un objet Solidworks : Set swApp = CreateObject("SldWorks.Application")

Tu récupère le document actif : Set swModelDoc = swApp.ActiveDoc

Mais entre les 2 il faudrait ouvrir un document dans Solidworks sinon tu essaye de récupérer un objet qui n'existe pas d'où le message "object non défini" car je supposes qu'en mode debug c'est sur cette ligne que ça bloque.

Cordialement,

1 « J'aime »

Mon assemblage serait actif il serait générer et enssuite j'apellerai cette boite de dialogue il faudrait donc seulement

Set swModelDoc = swApp.ActiveDoc

mais cela m'indique toujour variable objet ou bloc non définie :/

Excuser moi de ma petit expertise a ce niveau la ^^

j'ai pu avancer un peut plus sur le sujet 

 

Dim swApp As Object

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

Sub Modif_art2()
Set swApp = CreateObject("SldWorks.application") '_
Set Part = swApp.ActiveDoc
'------------------------------------------------------------------------------------------------------------------------------------------------------------------------


'------------------------------------------------------------------------------------------------------------------------------------------------------------------------
swApp.ActivateDoc2 "xxxxx.SLDASM", False, longstatus
Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.GetModelDoc2("XXXXXD06-1@XXXXX_630S_chgt_D_bavette-1", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Part.CustomInfo("No_article") = 2003700


End Sub

 

erreur d'exécution 438 (sur la ligne en gras)

Propriété ou méthode non gérée par cet objet 

 

Oui c'est normal puisque la fonction GetModelDoc2 est une fonction appartenant aux objets Icomponent2 alors que dans ton code tu essayes de l'appeler au travers d'un objet IModelDoc2.

Tu as en parallèle ouvert une autre question que l'on trouve ICI mais cela semble être la même question, sur laquelle faut-il répondre ?

Tu trouveras ICI un exemple de l'utilisation de la fonction GetModelDoc2.

Cordialement,

1 « J'aime »

Merci de votre réponse j ai ouvert cette question pour reformuler ma question je trouve que je m était mal exprimé cela n est sûrement pas très utile désolé .

Ensuite je ne comprend pas trop a quoi sert (1.-1)

Debug.Print "Selected Type =" & swSelMgr. GetSelectedObjectType3 (1, -1)

 

Regarde ICI dans le paragraphe "Parameters", et n'hésite pas à faire des recherches (sur chaque fonction utilisée) dans l'aide sur les API Solidworks, celles-ci sont très bien documentées ...

Cordialement,

1 « J'aime »

Dim swApp As Object

Dim Part As Object
Dim BoolStatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim swSelMgr As SldWorks.SelectionMgr
Dim swSelObj As Object
Dim swSelComp As SldWorks.Component2
 Dim swEnt As SldWorks.Entity


Sub Modif_art2()

 Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc
    Set swSelMgr = swModel.SelectionManager
    
Set swSelComp = swSelMgr.GetSelectedObjectsComponent3(1, -1)

Set swSelComp = swEnt.XXXXXD06(nom de ma pièce)

        Part.CustomInfo("No_article") = 20037
End Sub

 

Cela bloque au nom de ma pièces j'ai fait une mauvaise manipulation ?

erreur d'éxécuion '91'

variable objet ou variable bloc with non définie

 

Dim feature As feature

Dim boolstatus As Variant

Dim Part As Object

Dim longstatus As Long, longwarnings As Long

Sub Modif_art2()


Set swApp = CreateObject("SldWorks.Application")

Set Model = swApp.ActiveDoc

 

' Select the feature named "Extrude1"
Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("Boss.-Extru.1@XXXXXD06-1@XXXXX_0000_00_D_111", "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)

 

' If the selection was successful, that is, "Extrude1" was

' selected and it is a "BODYFEATURE", then get that feature; otherwise,

' indicate failure

If boolstatus = True Then

    Dim SelMgr As SelectionMgr

    Set SelMgr = Model.SelectionManager

    Set feature = SelMgr.GetSelectedObject6(1, 0)
    
    
    
Set swCustPropMgr = swCutlistItem.CustomPropertyManager("No_article")

Debug.Print "No_article"

Debug.Print "Number of custom properties = 28 " + CStr(swCustPropMgr.Count("6"))

Debug.Print "No_article", "", "200", "Texte"

 

'Names = swCustPropMgr.GetNames("2000")


End If

End Sub*

 

J'ai aussi essayer cette méthode et je suis bloquer sur la ligne :

Debug.Print "Number of custom properties = 28 " + CStr(swCustPropMgr.Count("6"))

avec une erreur " Objet requis " 

Ref : http://help.solidworks.com/2012/English/api/sldworksapi/Get_Custom_Properties_for_Cut-list_Item_Example_VB.htm

afin de voir si j'arrivé a accéder au propriété de ma pièce .

 

 

Bonjour,

Je suis désolé de te dire ça mais je n'arrive même pas à lire ton code tellement les objets et fonctions sont mélangées sans tenir compte de leurs caractéristiques et fonctionnement. Ne serais-tu pas en train d'essayer de te former aux macros Solidworks en grillant les étapes ?

Cordialement,

2 « J'aime »

Je suis un peut perdue pour cette vba je ne sais pas trop comment m y prendre

Avant de penser VBA Solidworks je penses qu'il faut déjà s'intéresser au langage de programmation en lui-même de façon à comprendre le fonctionnement de celui-ci, il existe tout un tas de cours qui peuvent déjà aider à commencer comme par exemple ICI ou encore ICI, oui c'est pour Excel mais peu importe la philosophie est la même : programmation orientée objet. Ensuite et seulement ensuite tu pourras d'intéresser aux API spécifiques à Solidworks sur l'aide en ligne directement ICI.

Au début ça prend du temps et ça peut paraitre un peu fastidieux mais ça c'est au début...

Cordialement,

2 « J'aime »

D'accord cela me serait utile j essayerai de ré proposer une version après étude de tout ça merci