API/VBA : pilotage d'une table de nomenclature BOM

Bonjour,

exit' il le moyen de dire a une table de nomenclature a quel configuration elle ce rattache?

j 'ai déjà la config dans dans une variable."vNameConf"

j'ai essayé: 


Dim swBomTable As SldWorks.BomTableAnnotation ou Dim swBomTable As SldWorks.IBomTable

' table denomenclature
            boolstatus = Part.Extension.SelectByID2("Nomenclature2", "DRAWINGVIEW", 0.195997909234212, 0.164382166839605, 0, False, 0, Nothing, 0)
            Set swBomTable = swSelMgr.GetSelectedObject6(1, 0)
            swBomTable.ReferencedConfiguration = vNameConf(i)

 

Cordialement

Bonjour,

Essaye la méthode SetConfigurations 

Exemple1 Exemple2

1 « J'aime »

Merci Jerome,

Pas facile avec leur exemple qui parfois ce traduise a moitié.

j ai tenté des codé ça:

  
    set swBomFeat = swBomAnn. BomFeature 
    vNameConf(i) = swBomFeat. GetConfigurations (false, visible)
    Visible (0) = Vrai
    boolstatus = swBomFeat. SetConfigurations (True, Visible, vNameConf(i))

 

mais je comprend pas grand chose

dans ma logique il faut identifier le tableau et ensuite lui affecter la config

 

Dim swBomFeat As SldWorks.BomFeature
 

 swBomFeat = "Nomenclature2"
boolstatus = swBomFeat. SetConfigurations (True, Visible, vNameConf(i))

Dommage que ce ne soit pas aussi simple.

La suite de tous a l'heure 

Remplace "test" par le nom de la configuration à utiliser

Option Explicit
Sub main()

    Call NomenclatureConfig("test")

End Sub
Sub NomenclatureConfig(ByVal ConfigName As String)
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDraw As SldWorks.DrawingDoc
    Dim swView As SldWorks.View
    Dim swTableAnn As SldWorks.TableAnnotation
    Dim swBomFeat As SldWorks.BomFeature
    Dim vTables As Variant
    Dim vTable As Variant
    Dim ConfigNames As Variant
    Dim ConfigVis As Variant
    Dim i As Integer
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    Set swView = swDraw.GetFirstView
    If swView.GetTableAnnotationCount > 0 Then
        vTables = swView.GetTableAnnotations
        For Each vTable In vTables
            Set swTableAnn = vTable
            If swTableAnn.Type = swTableAnnotationType_e.swTableAnnotation_BillOfMaterials Then
                Set swBomFeat = swTableAnn.BomFeature
                ConfigNames = swBomFeat.GetConfigurations(False, ConfigVis)
                For i = 0 To UBound(ConfigNames)
                    'Debug.Print "configuration indice: " & i & ", Nom: " & ConfigNames(i) & ", Visible: " & ConfigVis(i) '
                    If ConfigNames(i) = ConfigName Then
                        ConfigVis(i) = True
                    Else
                        ConfigVis(i) = False
                    End If
                Next
                swBomFeat.SetConfigurations False, ConfigVis, ConfigNames
            End If
        Next
    End If
    swDraw.ClearSelection2 True
End Sub

 

1 « J'aime »

Bonjour Jerome,

Merci pour le temps que tu me consacre.

j'ai utilisé ce code mais Il ne se pas rien sur le plan.

 je suis dessus depuis 7H mais il y a beaucoup de variable.

 Pour un novice comme moi sans les annotations ' je galère.

A biento

 

 

Qu'est ce que ca écrit dans la fenêtre immediate si tu active la ligne:

Debug.Print "configuration indice....

Est ce que tu peut joindre un fichier de test. Merci

Jerome,

merci pour cette nouvelle info. j'avais pas compris l'utilité de cette ligne et du cout de la fenetre d execution. j ai debuté il y a un mois seulement

Voici le resulta

configuration indice: 0, Nom: Défaut, Visible: Faux
configuration indice: 1, Nom: ODCA1001, Visible: Vrai
configuration indice: 2, Nom: ODCA1001SP, Visible: Faux
configuration indice: 3, Nom: ODCA1001VR, Visible: Faux
configuration indice: 4, Nom: ODCA1001VRSP, Visible: Faux
configuration indice: 5, Nom: ODCA1002, Visible: Faux
configuration indice: 6, Nom: ODCA2001, Visible: Faux
configuration indice: 7, Nom: ODCA2002, Visible: Faux

la table n 'est pas modifier elle reste dans sa config d 'origine

Cordialement

Oups,

Je viens de me rendre compte que c'est ma demande qui n'est pas clair.

j ai une table de nomenclature sur un plan avec une configuration donnée, et je veux lui dire d en utilisé une autre(configuration).

Cordialement

Hello,

 Si je change 

Call NomenclatureConfig("odca1001SP")

le resultat est le même

configuration indice: 0, Nom: Défaut, Visible: Faux
configuration indice: 1, Nom: ODCA1001, Visible: Vrai
configuration indice: 2, Nom: ODCA1001SP, Visible: Faux
configuration indice: 3, Nom: ODCA1001VR, Visible: Faux
configuration indice: 4, Nom: ODCA1001VRSP, Visible: Faux
configuration indice: 5, Nom: ODCA1002, Visible: Faux
configuration indice: 6, Nom: ODCA2001, Visible: Faux
configuration indice: 7, Nom: ODCA2002, Visible: Faux

 

Jerome,

je trouve bizare ce S mais si je l'enlève cela ne change rien (celui qui est souligné)

swBomFeat.SetConfigurations False, ConfigVis, ConfigNames

Cordialement

Jerome

La hot linge me repond sur une Macro de mon cru

La configuration se change au niveau de la bom feature :

    Set swBomFeat = swBomAnn.BomFeature

    swBomFeat.Configuration = "ODCA1001"

j ai taché d'utilisé c'est ligne dans mon code sans resultat.

 

Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim swSheet As SldWorks.Sheet
Dim swSelMgr As SldWorks.SelectionMgr
Dim swView As SldWorks.View
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Dim vNameConf As Variant

' V BOM
Dim swBomAnn As BomTableAnnotation
Dim swBomFeat As SldWorks.BomFeature

Sub main()
    
    ' bibliothec SW
    Set swApp = Application.SldWorks
    ' model actif de SW
    Set swModel = swApp.ActiveDoc
    ' selection de ce model
    Set swSelMgr = swModel.SelectionManager
    'mémorisé l'objet6(1,0)?
    Set swBomAnn = swSelMgr.GetSelectedObject6(1, 0)
    ' On affect la config
    vNameConf = "ODCA1001"
    
    'La configuration se change au niveau de la bom feature :

    Set swBomFeat = swBomAnn.BomFeature

    swBomFeat.Configuration = vNameConf
    
End Sub

 


table1.swp

Essaye ca:

Option Explicit
Sub main()

    Call NomenclatureConfig("ODCA1001SP")

End Sub
Sub NomenclatureConfig(ByVal ConfigName As String)
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDraw As SldWorks.DrawingDoc
    Dim swView As SldWorks.View
    Dim swTableAnn As SldWorks.TableAnnotation
    Dim swBomFeat As SldWorks.BomFeature
    Dim vTables As Variant
    Dim vTable As Variant
    Dim ConfigNames As Variant
    Dim ConfigVis As Variant
    Dim i As Integer
    Debug.Print "Configuration à activée: " & ConfigName
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    Set swView = swDraw.GetFirstView
    If swView.GetTableAnnotationCount > 0 Then
        vTables = swView.GetTableAnnotations
        For Each vTable In vTables
            Set swTableAnn = vTable
            If swTableAnn.Type = swTableAnnotationType_e.swTableAnnotation_BillOfMaterials Then
                Set swBomFeat = swTableAnn.BomFeature
                ConfigNames = swBomFeat.GetConfigurations(False, ConfigVis)
                For i = 0 To UBound(ConfigNames)
                    Debug.Print "configuration indice: " & i & ", Nom: " & ConfigNames(i) & ", Visible: " & ConfigVis(i) '
                    If LCase(ConfigNames(i)) = LCase(ConfigName) Then
                        ConfigVis(i) = True
                        Debug.Print "Configuration activé: " & ConfigNames(i)
                    Else
                        ConfigVis(i) = False
                    End If
                Next
                swBomFeat.SetConfigurations False, ConfigVis, ConfigNames
            End If
        Next
    End If
    swDraw.ClearSelection2 True
End Sub

 

1 « J'aime »

Bonjour Jérôme,

merci,

je doute de pour t'aidé un jour vu ton niveau et ton domaines d activité, mais sais ton jamais, mon point fort c'est les formes gauche(design, surfacique)

Encore merci,

Cordialement

 

1 « J'aime »