Macro pour renommer un assemblage et ses composants

Bonjour,

 

Je souhaiterai créer une macro sur Solidworks afin de renommer un assemblage et ses composants suivant le principe suivant :

"Numéro de projet-ES00" pour l'assemblage

"Numéro de projet-ES0i" pour le i-ème sous-assemblage (1er niveau)

"Numéro de projet-ES0i-C00j" pour la j-ème pièce du i-ème sous-assemblage (2ème niveau)

 

Par exemple l'arbre de création devrait ressembler à cela :

INT846-ES00

     INT846-ES01

          INT846-ES01-C001

          INT846-ES01-C002

          INT846-ES01-C003

          INT846-ES01-C004

     INT846-ES02

          INT846-ES02-C001

          INT846-ES02-C002

     INT846-ES03

     INT846-ES04

 

J'arrive à coder en VBA le principe de récurrence mais je ne sais pas comment réenregistrer un assemblage et ses composants  en prenant en compte l'arbre dans son ensemble. Puis je ne sais pas comment parcourir l'arbre de création de l'assemblage en question.

 

Si vous avez propositions je suis tout ouïe !

 

Merci pour ceux répondront à ma question.

 

PS : j'utilise Solidworks 2013

 

 

 

 

 

 

 

 

Bonjour, par hasard, tu ne peux pas utiliser ceci ?

 

http://www.lynkoa.com/store/fr/tools-et-macros/utilitaires/utilitaire-projectmanager.html

1 « J'aime »
projet manager il doit savoir faire ça
2 « J'aime »

Merci pour la rapidité de vos réponses.

Je ne connais pas ProjectManager. En suivant le lien, j'ai vu que l'utilitaire est payant.

N'y a t-il pas un moyen gratuit ou moins couteux ?

Salut,

 

 

Le code devrait ressembler à ça :

 

Sub Main()

Dim swApp As SldWorks.SldWorks
Dim Document As SldWorks.ModelDoc2
Dim retval() As String
Dim Text As String
Dim Nom() As String

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

retval = Document.GetDependencies2(False, True, False)

'Lignes pour avoir juste les noms de fichier
ReDim Nom(1 To ((UBound(retval) - 1) / 2) + 1)
For i = 0 To (UBound(retval) - 1) / 2 
   Text = Text & retval(2 * i) & vbCr
   Nom(i + 1) = retval(2 * i) 
Next i
i = 0

 

MsgBox Text

End Sub

 

 

Source : http://www.forum-cao-3d.fr/viewtopic.php?t=5432

 

 

Si tu as d'autres questions sur les macros, n'hésite pas à ouvrir une autre question sur Lynkoa !

Bonjour,

 

Par principe le plus performant serait de renommer les fichiers hors SW puis de redirigé les references externe des documents ...

 

Mais c'est compliqué pour qlq qui n'a  pas l'abitude des API SW

 

Le plus simple coté developpement c'est d'ouvrir l'assemblage et de parcourrir les composants puis d'enregistrer chacun des documents, comme l'assemblage principale est ouvert SW va lui meme rediriger les references ...

simplement il restera les anciens fichiers avec les anciens nom a supprimer manuellement

 

Pour créer une recursion sur les composants (parcourir tout l'arbre de l'assemblage) 

 

récupérer l'exemple de l'aide API 

"Traverse Assembly at Component Level Example (VBA)"

 

Le point d'entrée de la marco est la procedure MAin

 

Dans cet exemple la fonction TraverseComponent va etre executé sur chaque composant, l'objet swComp contient le composent, et la variable nLevel contient le niveau du composant dans l'arbre ( ex 1 prour le 1° niveau, 2 pour le composant d'un sous assemblage, 3 etc ...)

 

il vous reste à ajouter le code d'enregistrement du document (le document s'obtient à partir du "component" par l'api GetmodelDoc)

 

Attention à gérer les occurences des composants (un meme composant peut etre present plusieurs fois) seule la premiere occurence doit etre traitée

 

 

8 « J'aime »

Bonjour,

 

Jfradon, j'ai suivi tes conseils. Et j'ai écris une macro qui tend vers ce que je veux.

 

Mais je n'arrive pas à enregistrer le modèle de mes composants.

J'ai une erreur à (swCompModel.SaveAs2 NewFilePath, 0, False, False)

 

 


renommer_fichier.txt

...

Gloup je peux pas annuler DSL

Oui la macro m'a l'air bien

simplement il faut gérer differement le 1° composent (composent racine de l'assemblage principal) 

en fait ce n'est pas un composant 

donc si apres

Set swCompModel = swComp.GetModelDoc

 

swCompModel  est nothing alors ne pas utiliser swCompModel  mais swModel qui est le document assemblage

7 « J'aime »

Si c'est ok, tu clos le poste ?

4 « J'aime »