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 »