Editer Propritété d'une pièce depuis l'assemblage

Bonjour,

Je cherche un moyen d'éditer les propriétées personnalisées d'une pièce depuis l'assemblage.

J'ai trouvé cette petite macro sur le web, mais c'est juste un viewer (PJ).

Je dispose aussi de quelques modèles de macro qui ouvres ou enregistrent les composant sélectionnés.

Je pensais trouver facilement dans le code les partie "composant sélectionné" et "ouvrir" ou "enregistrer" pour remplacer par "ouvrir les prop. personnalisés" , mais elles sont écrites différemment, il y a des compteurs, des tas de chose que je comprends pas, bref, non, c'est pas simple...

 

 


view_properties_of_selected_component_from_assembly.swp

Bonjour,

Voici un petit exemple (fait à l'arrache) qui devrait pouvoir t'aider :

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim Model As ModelDoc2
Dim CompModel As ModelDoc2
Dim swChildComp As SldWorks.Component2
Dim SelectedObject As Object
Dim NbrSelections As Long
Dim i As Long
Dim lErrors As Long
Dim lWarnings As Long

Dim swModel As SldWorks.ModelDoc2
Dim bRet As Boolean
Dim myAssy As AssemblyDoc
Dim nInfo As Long
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim val As String
Dim valout As String

Sub main()

    Set swApp = Application.SldWorks
    Set Model = swApp.ActiveDoc
    
    Set myAssy = Model

    Dim SelMgr As SelectionMgr
    Set SelMgr = Model.SelectionManager
        
    NbrSelections = SelMgr.GetSelectedObjectCount2(-1)

    Set SelectedObject = SelMgr.GetSelectedObject6(1, -1)
    If NbrSelections = 1 Then
        Set swChildComp = SelectedObject
        Set CompModel = swChildComp.GetModelDoc2
        
        bRet = myAssy.EditPart2(True, True, nInfo)
        Set swModel = myAssy.GetEditTarget
        Set swModelDocExt = swModel.Extension
        Set swCustProp = swModelDocExt.CustomPropertyManager("")
        
        bRet = swCustProp.Add3("MaPropriete", swCustomInfoType_e.swCustomInfoText, "Ma valeur 1", swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
        bRet = swCustProp.Get4("MaPropriete", False, val, valout)
        
        Debug.Print "valeur évaluée : " & valout
        
        bRet = swCustProp.Set2("MaPropriete", "Ma valeur 3")
        bRet = swCustProp.Get4("MaPropriete", False, val, valout)
        
        Debug.Print "valeur évaluée : " & valout
        
        bRet = swModel.Save3(swSaveAsOptions_Silent, lErrors, lWarnings)
        
        myAssy.EditAssembly
    End If
    
End Sub

Pour tester, tu ouvres un assemblage puis tu sélectionnes une pièce dans le feature manager avant de lancer la macro (à faire sur des pièces de tests).

Cordialement,

1 « J'aime »

Merci d.roger

J'ai essayé ta macro, ca fonctionne, mais c'est pas exatement ce que j'attendais (enn fait ca va un peu trop loin)

en fait ta macro

- active le composant selectionné : ok pour moi

- créé le propriété "Ma propriété", avec la vale " Ma valeur 1" : en fait je voudrais juste ouvrir la fenêtre de propriété personnalisés.

- enregistre (?) et ferme le composant pour retourner a l'assemblage : Idéalement cette opération peut être déclanché à la fermeture de la fenêtre de propriété personnalisés. si non, a faire manuellement, ça sera déjà bien.

 

 

 

Quelque chose comme ça donc :

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim Model As ModelDoc2
Dim CompModel As ModelDoc2
Dim swChildComp As SldWorks.Component2
Dim SelectedObject As Object
Dim NbrSelections As Long
Dim i As Long
Dim lErrors As Long
Dim lWarnings As Long

Dim swModel As SldWorks.ModelDoc2
Dim bRet As Boolean
Dim myAssy As AssemblyDoc
Dim nInfo As Long

Sub main()

    Set swApp = Application.SldWorks
    Set Model = swApp.ActiveDoc
    
    Set myAssy = Model

    Dim SelMgr As SelectionMgr
    Set SelMgr = Model.SelectionManager
        
    NbrSelections = SelMgr.GetSelectedObjectCount2(-1)

    Set SelectedObject = SelMgr.GetSelectedObject6(1, -1)
    If NbrSelections = 1 Then
        Set swChildComp = SelectedObject
        Set CompModel = swChildComp.GetModelDoc2
        
        bRet = myAssy.EditPart2(True, True, nInfo)
        Set swModel = myAssy.GetEditTarget

        swModel.FileSummaryInfo
        
        bRet = swModel.Save3(swSaveAsOptions_Silent, lErrors, lWarnings)
        
        myAssy.EditAssembly
    End If
    
End Sub

Cordialement,

2 « J'aime »

ALLELUIA ! gloire a toi, sur la terre comme sur mer !

je sent que ça va plaire a mes collégues !

miles merci à toi d.roger, toujours aussi efficace

1 « J'aime »

J'ai quand même une toute petite remarque : ça fonctionne pas correctement sur les sous ensembles :

on dirait qu'il y a inversion entre les étapes "ouverture de la fenêtre de propriétés" et "activation du composant sélectionné"

 

Bonjour,

Essaye avec cette version de macro :

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim Model As ModelDoc2
Dim CompModel As ModelDoc2
Dim swChildComp As SldWorks.Component2
Dim SelectedObject As Object
Dim NbrSelections As Long
Dim i As Long
Dim lErrors As Long
Dim lWarnings As Long

Dim swModel As Object
Dim bRet As Boolean
Dim myAssy As AssemblyDoc
Dim nInfo As Long

Sub main()

    Set swApp = Application.SldWorks
    Set Model = swApp.ActiveDoc
    
    Set myAssy = Model

    Dim SelMgr As SelectionMgr
    Set SelMgr = Model.SelectionManager
        
    NbrSelections = SelMgr.GetSelectedObjectCount2(-1)

    Set SelectedObject = SelMgr.GetSelectedObject6(1, -1)
    If NbrSelections = 1 Then
        Set swChildComp = SelectedObject
        Set CompModel = swChildComp.GetModelDoc2
        
        If CompModel.GetType = swDocumentTypes_e.swDocASSEMBLY Then
            myAssy.EditAssembly
        End If

        bRet = myAssy.EditPart2(True, True, nInfo)
        Set swModel = myAssy.GetEditTarget
    
        swModel.FileSummaryInfo
            
        bRet = swModel.Save3(swSaveAsOptions_Silent, lErrors, lWarnings)
            
        myAssy.EditAssembly

    End If
    
End Sub

Cordialement,

1 « J'aime »

Génial. Rien à redire.

Cette macro compense quelque peu le bug de l'outil visualisation évoqué dans ce poste

Merci beaucoup !

1 « J'aime »