Activer une configuration de pièce dans un assemblage avec une macro

Bonjour,

 

Je suis à la recherche d'une macro me permettant d'activer les différentes configurations d'une pièce depuis l'assemblage principal.

J'ai bien un bout de code que j'ai bricolé mais il ne fonctionne pas.

 

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("CleanSeal WELDED-1@CleanSeal COMPLETE/Cxxx-x-1@CleanSeal WELDED", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.ShowConfiguration2("C200-0")
Part.ClearSelection2 True
boolstatus = Part.EditRebuild3()
End Sub

 

Merci d'avance pour votre aide

Cordialement.

Bonjour,

J'ai ce bout de code qui fonctionne chez moi, vois au niveau de ta ligne boolstatus, dans la première partie. Je ne comprends pas le "/"... tu n'es pas en train d'éditer un composant?

Edit : Tu dois avoir : "Configuration@nomfichier.extension"

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.EditRebuild3()
boolstatus = Part.Extension.SelectByID2("Défaut@12345678-E VERIN D'APPUI.SLDASM", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.ShowConfiguration2("Défaut")
boolstatus = Part.EditRebuild3()
boolstatus = Part.Extension.SelectByID2("AVEC REHAUSSE@12345678-E VERIN D'APPUI.SLDASM", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.ShowConfiguration2("AVEC REHAUSSE")
boolstatus = Part.EditRebuild3()


End Sub

1 « J'aime »

Bonjour Glaffont,

Tout d'abord merci pour ta réponse ;)

J'ai repris ton code en y ajoutant mais nom de fichier mais ça ne fonctionne pas :(

Voici le code :

 

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.EditRebuild3()
boolstatus = Part.Extension.SelectByID2("C250-0@Cxxx-x.part@CleanSeal WELDED.SLDASM", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.ShowConfiguration2("C250-0")
boolstatus = Part.EditRebuild3()

End Sub

 

Dans ton code toi tu changes juste la config de ton assemblage ?

Pour ma part la structure de mon 3D est la suivante:

 * Assemblage principal (.SLDASM)

                                     *  Sous ensemble (.SLDASM)

                                                                        * composant (.part)

                                                                        * composant (.part)

                                                                       * composant(.part)

                                     * divers composants (.part)

Moi j'aimerai que le code change la configuration d'un composant (.part)  dans mon sous ensemble (.SLDASM) tout en étant dans mon assemblage principal (.SLDASM).

J'espère que mon explication est compréhensible...

Merci d'avance

 

 

 

Bonjour,

J'ai compris la demande, elle était claire dès le début mais j'ai du lire trop vite.

Effectivement dans ce cas ça ne fonctionne pas non plus chez moi. J'ai essayé en éditant la pièce sans succès. Je continue de regarder.

1 « J'aime »

Bonjour,

Il y a combien de niveaux au maximum ?

1) l'assemblage de tête (là où on va executer la macro)

2) un sous-ensemble

3) des pièces

C'est bien ça ?

Pas plus de niveaux intermédiaire ?

 

1 « J'aime »

On peut s'inspirer de ces deux macros que j'ai postées sur Lynkoa :

http://www.lynkoa.com/tutos/3d/enregistrer-une-piece-chaque-configuration

http://www.lynkoa.com/tutos/solidworks/macro-pour-toutes-les-configurations-d-un-assemblage-pour-activer-l-option-%E2%80%9Cpromouv

 

Bonjour PL,

Merci de vous intéresser à mon problème.

 

L'architecture de mon modèle est bien comme vous l'avez décrite.

De mon assemblage principal je souhaite changer la config d'un composant qui se trouve dans un sous-ensemble de mon assemblage principal.

Je suis débutant en VBA, je ne comprends pas bien les codes que vous avez mis sur vos tuto :s

 

Merci d'avance pour votre aide.

Cordialement.

PL, avez-vous déja utilisé ce type de code pour choisir une configuration ?

Cordialement.

Bonjour,

J'ai peut-être une piste : avez-vous essayé de traverser l'assemblage avec la fonction traverse component comme indiqué dans la macro ci-dessous :

http://help.solidworks.com/2012/english/api/sldworksap/traverse_assembly_at_component_level_example_vb.htm

pour activer le composant voulu puis modifier sa configuration avec les commandes listées précédemment?

Bonjour Glaffont,

Je ne saisis pas tout sur ce code...

Cordialement.

Voilà le bon lien :

http://help.solidworks.com/2012/english/api/sldworksapi/traverse_assembly_at_component_level_example_vb.htm

1 « J'aime »

Étant débutant en programtion, je vous avoue que je n'y comprend pas grand chosse sur ce code :s

 

J'ai un peu avancé :

Le code ci-dessous sélectionne un composant niveau -2 et modifie la configuration de celui-ci.

MAIS il y a un bug..... la configuration qu'il  affiche n'est pas celle que je lui demande ??!?

Vois ce que ça donne chez toi avec les bons chemins et dis-moi. (c'est aussi le bazard dans les déclarations, pas pris le temps de faire le ménage....)

       ********************************************************************

    Dim swApp As SldWorks.SldWorks
    Dim swAssy As SldWorks.assemblyDoc
    Dim swSelMgr As SldWorks.selectionMgr
    Dim swModel As SldWorks.ModelDoc
    Dim swComp As SldWorks.Component
    Dim ConfigMgr As ConfigurationManager
    Dim instance As ISelectionMgr
    Dim Index As Integer
    Dim Mark As Integer
    Dim boolstatus As Boolean
    Dim modelDoc2 As SldWorks.modelDoc2
Dim assemblyDoc As SldWorks.assemblyDoc
Dim featureMgr As SldWorks.FeatureManager
Dim modelDocExt As SldWorks.ModelDocExtension
Dim selectionMgr As SldWorks.selectionMgr
Dim feature As SldWorks.feature
Dim selObj As Object
Dim feat As SldWorks.feature
Dim folderFeat As SldWorks.feature
Dim errors As Long
Dim warnings As Long
Dim status As Long
Dim count As Long
Dim Value As SldWorks.Component2
Dim componentsToMove() As Object
Dim i As Long
Dim retVal As Boolean
    Dim RefCfg As String

Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swAssy = swModel
    Set swSelMgr = swModel.SelectionManager
    Set ConfigMgr = swModel.ConfigurationManager
    Set modelDoc2 = swApp.ActiveDoc
    Set assemblyDoc = modelDoc2
    
    'Select component
    Set modelDocExt = modelDoc2.Extension
    Set selectionMgr = modelDoc2.SelectionManager
    status = modelDocExt.SelectByID2("testEUT15B0178'015 S-E VERIN D'APPUI-1@Assemblage1/testJOINT TORIQUE STD-2@testEUT15B0178'015 S-E VERIN D'APPUI", "COMPONENT", 0, 0, 0, True, 0, Nothing, 0)
    Set selObj = selectionMgr.GetSelectedObject6(1, -1)
    Set Value = selectionMgr.GetSelectedObjectsComponent4(1, -1)

    ' Show Config1 and make it the active configuration
    Value.ReferencedConfiguration = "JOINT TORIQUE Ø24xØ1.5"

    ' For changes to take effect
    swModel.EditRebuild3

End Sub

                         ****************************************************************

1 « J'aime »

Sur un malentendu ça peut fonctionner : la configuration qu'il affiche est celle du composant quand tu l'ouvre seul.

 

Comment doit je renseigner l a ligne du code avec les nom de mes propres fichiers ?

Voci mes noms de fichiers

 

Assemblage principale : CleanSeal COMPLETE

                    Sous assemblage : CleanSeal WELDED

                                     Composant à l'intérieur du sous ensemble  : Cxxx-x      (Non d'une des confi "C250-0"

Merci beaucoup pour ton aide

Cordialement.

1 « J'aime »

Tout simple : tu copies dans le code que tu as mis dans ta question...... ;-)

Ci-dessous le code avec mes noms de fichiers.

C'est presque ça mais il n'appelle pas la bonne configuration ...

 

Set swApp = CreateObject("SldWorks.Application")
Set Part = swApp.ActiveDoc


Set swApp = _
Application.SldWorks

  Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swModelDocExt = swModel.Extension
    Set swSelMgr = swModel.SelectionManager
       
 
Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swAssy = swModel
    Set swSelMgr = swModel.SelectionManager
    Set ConfigMgr = swModel.ConfigurationManager
    Set ModelDoc2 = swApp.ActiveDoc
    Set AssemblyDoc = ModelDoc2
    
    'Select component
    Set modelDocExt = ModelDoc2.Extension
    Set SelectionMgr = ModelDoc2.SelectionManager
    Status = modelDocExt.SelectByID2("CleanSeal COMPLETE-1@Assemblage1/Cxxx-x-2@CleanSeal COMPLETE", "COMPONENT", 0, 0, 0, True, 0, Nothing, 0)
    Set selObj = SelectionMgr.GetSelectedObject6(1, -1)
    Set Value = SelectionMgr.GetSelectedObjectsComponent4(1, -1)

    ' Show Config1 and make it the active configuration
    Value.ReferencedConfiguration = "Cxxx-x C250-0"

    ' For changes to take effect
    swModel.EditRebuild3


End Sub

 

 

1 « J'aime »

Ouvre ton Cxxx-x-2 et regarde dans quelle configuration il est.

Mets le dans la configuration "C250-0" et retente.

Je précise : c'est du bricolage! On essaiera de trouver une solution en VBA.

Edit : Il y a une erreur dans le nom de la configuration que tu appelles, il faut mettre uniquement "C250-0" et non ""Cxxx-x C250-0"

1 « J'aime »

ça fonctionne tu as fait un heureux  :-)  !!!

Par rapport au tout 1er code que tu m'as donné que fait il de plus celui-ci ?

Quand tu dis "c'est du bricolage! On essaiera de trouver une solution en VBA." tu entends quoi par la ?

En tout cas merci beaucoup pour ton aide.

 

 

Peux-tu vérifier une chose : ouvre ta pièce Cxxx-x-1, change sa configuration et relance la macro.

Est-ce qu'elle active bien la configuration que tu veux ?