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 .