Comment changer l'affichage de l'arbre via une macro

Bonjour à tous.

Nous avons actuellement nos fichiers solidworks avec un arbre d’assemblage ou de pièce pas très lisible car le nom de la configuration est visible.
image

J’ai trouvé comment corriger cela à la main sur chaque fichier mais c’est super long car c’est enregistré dans les options du fichier et non celles de SW donc à faire pour chaque fichier
J’aimerais donc faire un macro qui fasse cela sur l’assemblage que j’ouvre ainsi que sur tous ses composants. cela me permettrait d’être beaucoup plus efficace.

Est ce que quelqu’un aurait une idée ou piste pour cette macro afin d’arriver après la macro à ces options peu importe les options sélectionnées ou non dans le fichier de base (car tous les fichiers n’ont pas nécessairement les mêmes options de sélectionnées.
image

Voici un exemple qui coche la description:

Option Explicit
Dim swApp As SldWorks.SldWorks
Dim Part As SldWorks.ModelDoc2
Dim SelMgr As SldWorks.SelectionMgr
Dim swFeatMgr As SldWorks.FeatureManager
Sub main()
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    Set SelMgr = Part.SelectionManager
    Set swFeatMgr = Part.FeatureManager
    
    ' Show Component Descriptions is set to true
    swFeatMgr.ShowComponentDescriptions = True
    ' Show Component Configuration Names is set to false
    swFeatMgr.ShowComponentConfigurationNames = True
     ' Show Component Configuration Descriptions is set to false
    swFeatMgr.ShowComponentConfigurationDescriptions = False
    ' Show Component Names
    swFeatMgr.ShowComponentNames = True
     
End Sub

Pour les options qui sont cochés pour nous:
image
Et l’exemple de SW:
https://help.solidworks.com/2021/english/api/sldworksapi/Show_Components_and_Component_Configurations_Names_and_Descriptions_Example_VB.htm
Avec cela tu devrais pouvoir avancer.

5 « J'aime »

Ok merci je vais configurer cela et reviens pour clôturer si j’ai tout ce qu’il me faut.
Mais déjà un grand merci!

Bon j’arrive effectivement presque à faire ce que je veux en ajustant légèrement ta macro
(J’arrive bien à cacher et montrer ce que je veux donc.

Le truc c’est que j’aimerais que cette agisse sur tous les fichiers contenu dans l’assemblage que j’ouvre.

Je m’explique:

J’ouvre un assemblage et je lance cette macro, cela me donne ceci:
image

Mais si j’ouvre le fichier surligné, cela me donne ce qui suit:
image

alors que j’aimerais avoir le même affichage que pour l’assemblage.

Il faudrait donc que la macro s’exécute pour chaque fichier enfant de l’assemblage.

Une idée de comment faire pour parcourir tous ces enfants?
désolé j’ai des idées mais pas de connaissances ou presque…

Pour parcourir chaque sous-assemblage et pièce de ton assemblage il faut utiliser Traverse components et insérer ton code la ou il faut (voir si besoin d’ouvri la pièce ou pas):
https://help.solidworks.com/2020/English/api/sldworksapi/Traverse_Assembly_at_Component_Level_Example_VB.htm

ou encore:

Toujours le même type de code:

Ou autre solution prendre une macro qui fait du traitement en lot (batch) tel que Intégration:

3 « J'aime »

bon avec votre aide j’ai réussi à faire quelque chose qui n’est probablement pas optimal mais qui semble fonctionner. l’ouverture des enfants est effectivement nécessaire.

si jamais cela peut aider

'**********************
'Copyright(C) 2023 Xarial Pty Limited
'Reference: Traversing the components tree using SOLIDWORKS API
'License: License
'**********************
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim Part 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 As Long
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 As String = " "

Sub 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


' Show Component Descriptions is set to true
swFeatMgr.ShowComponentDescriptions = True
' Show Component Configuration Names is set to false
swFeatMgr.ShowComponentConfigurationNames = True
 ' Show Component Configuration Descriptions is set to false
swFeatMgr.ShowComponentConfigurationDescriptions = False
' Show Component Names
swFeatMgr.ShowComponentNames = False

swFeatMgr.ShowDisplayStateNames = False

    Dim swRootComp As SldWorks.Component2

    Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent

    TraverseComponent swRootComp, ""
    


Else

    MsgBox "Please open assembly"

End If

End Sub

Sub TraverseComponent(comp As SldWorks.Component2, indent 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() & ")"
    
    TraverseComponent swChildComp, indent & INDENT_SYMBOL
   
   
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

’ Set SelMgr = Part.SelectionManager
’ Set swFeatMgr = Part.FeatureManager

’ Ouvre le fichier de la boucle

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

'si c’est un part
If ext = « sldprt » Then

Set Part = swApp.OpenDoc6(swChildComp.GetPathName(), 1, 0, «  », longstatus, longwarnings)
Else
'ce n’est pas un prt"
If ext = « sldasm » Then

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

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

End If

''modifie l’affichage de l’arbre SW

Set SelMgr = Part.SelectionManager
Set swFeatMgr = Part.FeatureManager

' Show Component Descriptions is set to true
swFeatMgr.ShowComponentDescriptions = True
' Show Component Configuration Names is set to false
swFeatMgr.ShowComponentConfigurationNames = True
 ' Show Component Configuration Descriptions is set to false
swFeatMgr.ShowComponentConfigurationDescriptions = False
' Show Component Names
swFeatMgr.ShowComponentNames = False

swFeatMgr.ShowDisplayStateNames = False

’ MsgBox « avant fermeture du fichier »

''ferme le fichier de la boucle

swApp.CloseDoc Part.GetPathName

Set Part = Nothing

Next

End Sub

1 « J'aime »