Récupération de donné d'une fonction solidworks pour l'afficher sur une macro

Bonjour, j'ai créé une macro qui permet de configurer ma pièce (dimensions, usinage avec bossage ou enlèvement de matière, ect). Une fois la pièce créé, je voudrais que quand je relance la macro sur cette pièce, les valeurs afficher sur le userform sois celle que j'ai mise dans la pièce pour avoir un aperçu rapide de ma pièce ouverte. Hors la c'est les valeur par défaut qui s'affiche. il faudrait donc récupérer les information de la pièce et de les renvoyer dans les bonnes cases de mon userform.  

j'ai réussi à récupérer les cotes d'une esquisse et à les renvoyer en utilisant ceci :    txt_Z.Text = Part.Parameter("D1@F").SystemValue .  mais je n'arrive pas à récupérer la valeur TRUE ou FALSE d'une fonction (enlev. mat., bossage, perçage)  pour dire si celle si est activer ou supprimer dans ma pièce.

Si vous avez une solution je suis preneur :) 

Bonjour,

Il faut regarder du côté de swFeat.IsSuppressed2.

3 « J'aime »
Option Explicit

Sub main()

    Dim swApp                   As SldWorks.SldWorks
    Dim swModel                 As SldWorks.ModelDoc2
    Dim swSelMgr                As SldWorks.SelectionMgr
    Dim swFeat                  As SldWorks.Feature
    Dim vConfNameArr            As Variant
    Dim vSuppStateArr           As Variant
    Dim i                       As Long
    Dim bRet                    As Boolean

   
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swSelMgr = swModel.SelectionManager
    Set swFeat = swSelMgr.GetSelectedObject6(1, -1)
    
    vConfNameArr = swModel.GetConfigurationNames
    vSuppStateArr = swFeat.IsSuppressed2(swThisConfiguration, vConfNameArr)
    Debug.Assert 0 = UBound(vSuppStateArr)
    
    Debug.Print "File = " & swModel.GetPathName
    Debug.Print "  " & swFeat.Name

        Debug.Print "    " & vConfNameArr(i) & " ---> " & vSuppStateArr(i)

End Sub

Bonjour Cyril, c'est bien ce qu'il me faut, j'ai réussi a obtenir la valeur TRUE ou FALSE avec ce code.

Mais, le problème c'est que je dois sélectionner la fonction avant de lancer la macro. Comment faire pour que quand je lance la macro il prenne toutes les fonctions que je lui aurais donné (dans mon code) pour qu'il me dise si c'est vrai ou faux ? sans avoir a sélectionner les fonctions ?

(je précise que je suis débutant en VBA, c'est tout ressent je commence juste a faire des macros sur sw)  

Bonjour,

Il faut lister tous les éléments du "Feature" et ne travailler que sur les fonctions que tu veux, regarde l'exemple donné ICI.

Cordialement,

2 « J'aime »
Private Sub ActualiserInfosPiece()

    actualisationInfoPiece = True

    Dim swFeature As SldWorks.Feature
    Dim swModelDocExt As SldWorks.ModelDocExtension

    Dim featureName As String
    Dim status As Boolean
    Dim vSuppStateArr As Variant
    Dim vConfNameArr As Variant

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swModelDocExt = swModel.Extension
    Set Part = swModel
    

    If swModel Is Nothing Then
        Exit Sub
    End If
    

    If (swModel.GetType <> swDocPART) Then
        Call MsgBox("Macro valable uniquement pour une pièce", vbOKOnly, "AVERTISSEMENT")

        Exit Sub
    End If
    

    
    vConfNameArr = swModel.GetConfigurationNames
    

    Set swFeature = Part.FirstFeature
    Do While Not swFeature Is Nothing
    

        featureName = swFeature.name
        status = swModelDocExt.SelectByID2(featureName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)
        vSuppStateArr = swFeature.IsSuppressed2(swThisConfiguration, vConfNameArr)
        Select Case featureName
        
            Case "FONCTION SW 1"
                 TglB_N1.value = Not vSuppStateArr(0)
                 
            Case "FONCTION SW 2"
                 TglB_N2.value = Not vSuppStateArr(0)
                 
            Case "FONCTION SW 3"
                TglB_N3.value = Not vSuppStateArr(0)
                
            Case "FONCTION SW 4"
                 TglB_N4.value = Not vSuppStateArr(0)
            
            Case "FONCTION SW 5"
                TglB_N5.value = Not vSuppStateArr(0)
            
            Case FONCTION SW 6"
                TglB_N6.value = Not vSuppStateArr(0)
         
        End Select
        
        Set swFeature = swFeature.GetNextFeature() 
    Loop 


        ComboBox_HAUT.Text = Part.Parameter("D3@Esquisse FONCTION SW").SystemValue * 1000
        ComboBox_BAS.Text = Part.Parameter("D4@Esquisse FONCTION SW").SystemValue * 1000
        ComboBox_GAUCHE.Text = Part.Parameter("D2@Esquisse FONCTION SW").SystemValue * 1000
        ComboBox_DROIT.Text = Part.Parameter("D1@Esquisse FONCTION SW").SystemValue * 1000

        txt_X.Text = Part.Parameter("D3@Esquisse Débit").SystemValue * 1000
        txt_Y.Text = Part.Parameter("D4@Esquisse Débit").SystemValue * 1000
        txt_Z.Text = Part.Parameter("D1@F").SystemValue * 1000

    actualisationInfoPiece = False

End Sub

 

Problème résolu, merci pour vos réponse .