Macro solidworks - Exclusion dans sélection

Bonjour,

J'ai une fonction dans une macro qui sélectionne des pièces en fonction de propriété, afin de déplacer ces pièces dans un dossier ensuite.

Le soucis c'est qu'il me sélectionne aussi les pièces en dessous des contraintes N°1 sur image jointe dont les pièces symétrique ou répétition et surtout celle qui pose problème sont les pièces dans une fonction de courroie voir N°2. (voir pourquoi en fin de sujet)

Est-il possible lors de ma sélection de ne pas sélectionner tout ce qui est en dessous de contraintes ou tout au moins de ne pas sélectionner ce qui est contenu dans une fonction contrainte?

Ci joint mon code:

Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long, catSelect As String)
    Dim vChilds As Variant, vChild As Variant
    Dim swChildComp As SldWorks.Component2
    Dim MyString As String
    Dim swCustPropMgr As SldWorks.CustomPropertyManager
    Set swApp = Application.SldWorks

    
    vChilds = swComp.GetChildren
    For Each vChild In vChilds
        Set swChildComp = vChild
        Dim FileName As String
        FileName = swChildComp.GetPathName
        Debug.Print "Part Name    : " & FileName
        FileName = Left(FileName, InStr(FileName, ".") - 1)
        FileName = Right(FileName, Len(FileName) - InStrRev(FileName, "\"))
        Debug.Print "Part Name    : " & FileName
        MyString = FileName
        Dim ActiveConfig As String
        ActiveConfig = swChildComp.ReferencedConfiguration
        Debug.Print "Configuration: " & ActiveConfig
        FileName = swChildComp.GetPathName
        If swChildComp.GetSuppression() <> swComponentSuppressionState_e.swComponentSuppressed Then
            Dim swPart As SldWorks.modelDoc2
            Set swPart = swChildComp.GetModelDoc2()
            'Récupère la catégorie de la configuration active
            Set swCustPropMgr = swPart.Extension.CustomPropertyManager(ActiveConfig) 'get properties
            categorie = swCustPropMgr.Get("Categorie") 'get categorie
            designation = swCustPropMgr.Get("Designation")
            'Si la catégorie de la config active est vide on récupère celle du document
            If categorie = "" Then
                Set swCustPropMgr = swPart.Extension.CustomPropertyManager("") 'get properties
                categorie = swCustPropMgr.Get("Categorie") 'get categorie
                If designation = "" Then
                    designation = swCustPropMgr.Get("Designation") 'get categorie
                End If
            End If
            
            Debug.Print "Catégorie: " & categorie
            
            If catSelect = "FI" Then
                folderName = "FI"
                If (categorie = "Fourniture Industrielle" And Not (designation Like "STD*")) Or (categorie = "Tuyauterie") Or ((categorie = "Sans Catégorie") And (MyString Like "Bipod*")) Or ((categorie = "Sans Catégorie") And (MyString Like "Tripod*")) Then
                    compteur = compteur + 1
                    retVal = swChildComp.Select2(True, 0)
                End If
             ElseIf catSelect = "Visserie" Then
                folderName = "Visserie"
                Debug.Print "Type:" & swPart.GetType
                If (categorie = "Visserie") Or ((categorie = "Sans Catégorie") And (swPart.GetType = 2) And (Not MyString Like "Bipod*") And (Not MyString Like "Tripod*")) Then
                    compteur = compteur + 1
                    retVal = swChildComp.Select2(True, 0)
                End If
             ElseIf catSelect = "Reconductible" Then
                folderName = "Reconductible"
                'If categorie = "Reconductible" Then
                If (categorie = "Reconductible") And (Not designation Like "STD*") Then
                    compteur = compteur + 1
                    retVal = swChildComp.Select2(True, 0)
                End If
             ElseIf catSelect = "Electricite" Then
                folderName = "Electricité"
                If categorie = "Electricite" Then
                    compteur = compteur + 1
                    retVal = swChildComp.Select2(True, 0)
                End If
            
              ElseIf catSelect = "STD" Then
                folderName = "STD"
                If designation Like "STD*" Then
                    compteur = compteur + 1
                    retVal = swChildComp.Select2(True, 0)
                End If
                
            End If
            
        End If
        Debug.Print
    Next

End Sub

 

 

 

En effet dans Solidworks il existe un bug si on sélectionne la pièce contenu dans une fonction courroie que l'on fait clique droit ajouter au nouveau dossier la pièce de cette fonction se retrouve a la fois au dessus des contraintes et en dessous (visuellement-voir fichier joint)

Au besoin je joint également la macro complète.

 


createfolderbyproperties.swp
dbggtzkwq9.gif