Bonjour à tous,
étant Projeteur/Monteur de métier et un p'tit codeur de passion, je me suis attaqué à plus fort que moi en codage de macro VBA.
Mon objectif est d'arriver à pouvoir descendre la barre de reprise dans toutes les pièces d'un assemblage. Pour ce faire, j'aimerais que la macro sélectionne et ouvre, unes à unes, les pièces (avec affichage à l'écran ou non) et qu'ensuite elle descende la barre de reprise dans l'arborescence et enregistre la pièce. Si dans mon ensemble il devait y avoir un sous ensemble, j'aimerais qu'il ouvre ce sous ensemble (idem que pour les pièces, avec affichage ou non) et qu'il recommence à ouvrir une à unes les pièces pour recommencer la première étape.
Je vous fait ici un petit schéma:
ASSEMBLAGE SW -----> Ouvrir part et ass (qui ne sont pas supprimés) -------> Si c'est un part --------> alors Descendre la barre de reprise + sauv + fermer
I
I-----> Si c'est un assemblage, faire de même que la case 2
voici le code et où j'en suis, c'est un code que j'ai trouvé sur le Web, mais qui apparemment a été codé un peut "à l'arrache" sur ce forum : https://forum.solidworks.com/thread/159206
Mon code corrigé comme j'ai pu : Le soucis avec mon code, c'est qu'il y a des erreurs de partout... erreur 91, puis des fois 13.... je suis perdus et aurais besoins de l'aide d'un de vous qui s'y connais!!! Merci d'avance ;)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModel1 As SldWorks.ModelDoc2
Dim swAssembly As SldWorks.AssemblyDoc
Dim CompNum As Integer
Dim CompNum1 As Integer
Dim components As SldWorks.Component2
Dim components1 As SldWorks.Component2
Dim component As SldWorks.Component2
Dim component1 As SldWorks.Component2
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swAssembly = swModel
' Get number of components, not including child components in subassemblies
CompNum = swAssembly.GetComponentCount(True)
components = swAssembly.GetComponents(True)
Dim i As Integer
For i = 0 To CompNum
component = components(i)
swModel1 = component.GetModelDoc2
'open part from assembly function (if subassembly, create another for-loop with same procedure)
If swModel1.GetType = swDocPART Then
Set swModel = swApp.ActivateDoc3(component.Name2, False, swRebuildOnActivation_e.swUserDecision, 0)
boolstatus = part.FeatureManager.EditRollback(swMoveRollbackBarTo_e.swMoveRollbackBarToEnd, "")
boolstatus = part.EditRebuild3()
swModel.SaveAs (component.GetPathName)
swApp.CloseDoc component.GetPathName
Set swModel = swApp.ActiveDoc
ElseIf swModel1.GetType = swDocASSEMBLY Then
CompNum1 = swModel1.GetComponentCount(True)
components1 = swModel1.GetComponents(True)
Dim j As Integer
For j = 0 To CompNum1
component1 = components1(j)
swModel1 = component1.GetModelDoc2
Set swModel = swApp.ActivateDoc3(component.Name2, False, swRebuildOnActivation_e.swUserDecision, 0)
boolstatus = part.FeatureManager.EditRollback(swMoveRollbackBarTo_e.swMoveRollbackBarToEnd, "")
boolstatus = part.EditRebuild3()
swModel.SaveAs (component.GetPathName)
swApp.CloseDoc component.GetPathName
Next
End If
Next
End Sub