Macro vba pour exporter les propriétés personnalisée d'un assemblage et de ses enfants

Bonjour,

Je souhaiterais créer une macro afin d’exporter certaines propriétés personnalisées d’un assemblage déjà ouvert dans solidworks mais également de tous ces enfants.

J’ai déjà fait une macro qui me sort les propriétés personnalisées d’un assemblage ou d’une pièce et qui enregistre cela dans un excel.(tout marche bien)

Mon problème est tout bête. je n’arrive pas à ouvrir les part depuis l’assemblage.
J’arrive bien à voir que c’est un assemblage, j’arrive à parcourir l’arbre et à trouver le chemin complet de tous les enfants mais je n’arrive pas à ouvrir chaque enfant pour en extraire les propriétés personnalisées…
si vous avez une idée je suis preneur.
Ci-dessous mon code sans la partie de recup des proprietés personnalisée car ce n’est pas le problème.
La ligne « swApp.OpenDoc6 swChildComp.GetPathName(), 1, 0, « », 0, 0 » devrait sauf erreur ouvrir les enfants.
Le debug print " Debug.Print indent & swChildComp.Name2 & " (" & swChildComp.GetPathName() & « ) »" me donne bien le chemin des enfants en question.

Texte préformaté’**********************
'Copyright(C) 2023 Xarial Pty Limited
Référence : Parcourir l’arborescence des composants à l’aide de l’API SOLIDWORKS
'Licence : Licence
'**********************
Option explicite
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Pièce dim As SldWorks.ModelDoc2
Dim SelMgr As SldWorks.SelectionMgr
Dim swFeatMgr As SldWorks.FeatureManager
Dim path_complete As String 'chemin complet de la pièce
Dim myError aussi longtemps
Dim myWarning As Long

Dim guillemet As String
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Dim ext As String
const INDENT_SYMBOL comme chaîne = " »

Sous-main()

Set swApp = Application.SldWorks

Set swModel = swApp.ActiveDoc

If Not swModel Is Nothing Then


Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set SelMgr = Part.SelectionManager
Set swFeatMgr = Part.FeatureManager




    Dim swRootComp As SldWorks.Component2

    Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent
    
 ' MsgBox "avant de rentrer dans la première boucle des enfants"
  
    TraverseComponent swRootComp, ""
    

Else

    MsgBox "Please open assembly"

Fin Si

Fin du sous-marin

Sub TraverseComponent(comp As SldWorks.Component2, indentation As String)

Dim vChildComps As Variant

vChildComps = comp.GetChildren

Dim i As Integer

For i = 0 To UBound(vChildComps)

    Dim swChildComp As SldWorks.Component2
    Set swChildComp = vChildComps(i)
        
    Debug.Print indent & swChildComp.Name2 & " (" & swChildComp.GetPathName() & ")"

' Ouvre le fichier de la boucle

ext = Droite(swChildComp.GetPathName(), 6)

'si c’est un part
Si ext = « sldprt » Alors
'Debug.Print « Pièce » & swChildComp.GetPathName()

'swApp.OpenDoc6 "C:\VueLocalePDM\PDM\2-CREE\01-Bibliotheque\Pièces\Pièces 06\DOC-000024428.sldprt", 1, 0, "", 0, 0

swApp.OpenDoc6 swChildComp.GetPathName(), 1, 0, «  », 0, 0

Autre
'ce n’est pas un prt"
Si ext = « sldasm » Alors

'////aSM
Set Part = swApp.OpenDoc6(swChildComp.GetPathName(), 2, 0, «  », longstatus, longwarnings) '2 pou swDocASSEMBLY

Else
MsgBox "pas d'extension trouvée"
End If

Fin Si

MsgBox "avant fermeture du fichier"

''ferme le fichier de la boucle

'swApp.CloseDoc Part.GetPathName

Définir la pièce = Rien

Next

Fin du sous-marin

Pour moi ta pièce est déjà ouverte (dans l’assemblage) donc pas de opendoc6 mais plutôt activatedoc3 (pour rendre la pièce déjà ouverte active):

swApp.ActivateDoc3(sOutputFolder & ".sldprt", False, swRebuildOnActivation_e.swUserDecision, Errors)

https://help.solidworks.com/2023/English/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.ISldWorks~ActivateDoc3.html

1 « J'aime »

:rofl: :rofl: :rofl:
… Oû les limites de la traduction automatique !

Fin du Sous Marin < = > End Sub
1 « J'aime »

Cette traduction automatique(Bing) pour le code est effectivement une catastrophe!

Impossible de poster un code assez long sans soucis de traduction si on utilise pas la balise appropriées (balise texte préformaté):
image

@flaheurte attention à poster le code via cette balise sinon end if devient fin si et multitude d’autre erreurs plus ou moins amusante certes mais qui n’aide pas à la compréhension du code!

1 « J'aime »

ok pour moi le opendoc permettait de l’avoir dans une fenêtre à part.
Je confirme que le activatedoc3 fait le job
désolé pour le texte préformaté.

et Merci!

1 « J'aime »

=> Faut pas être désolé quand c’est drôle ! :grin:

1 « J'aime »