Comment obtenir le nom de la pièce, assemblage ou mep en cours?

Bonjour,

Comment puis-je récuperer le nom de mes pièces, mep et assemblage afin de les fermer après enregistrement ? 

myTitle = myModel.GetTitle

swApp.ActivateDoc2 myTitle, True, 0

swApp.QuitDoc myTitle

J'ai essayé ça mais ça ne fonctionne pas. Je ne trouve pas non plus la commande permettant d'enregistrer simplement mon assemblage.

2 « J'aime »

Bonjour,

 

Ça dépend, tu veux récupérer le nom du fichier actif ? C'est à dire quand tu es sur un plan tu veux récupérer le nom du plan, dans un assemblage le nom de l'assemblage, et dans une pièce le nom de la pièce ?

Si c'est le cas ce tutoriel que je viens de créer sur Lynkoa conviendra :

http://www.lynkoa.com/tutos/import-export-formats-neutres/vba-solidworks-nom-fichier

 

Pour enregistrer un assemblage sans changer toute les pièces, il faut commencer par l'assemblage le plus "haut" jusqu'à ouvrir les S.A. et les pièces qu'ils contiennent. C'est pourquoi à partir de l'assemblage j'ouvre ma pièce, la mep et j'enregistre sous puis ferme le document mais l’opérateur change le nom entre deux c'est pour ça que j'en ai besoin afin de fermé le document. Ensuite il faut que je trouve un moyen d'enregistrer l'assemblage le plus haut après les modifications.

J’espère être clair, dans le code ci-joint je n’arrive pas à fermer la mise en plan pour retourner sur la pièce par exemple.


macro50.swp

Tu peux mettre ton code dans un fichier texte s'il te plait ?

Set swapp = _
Application.SldWorks

Set Part = swapp.OpenDoc6("\xxxxxxxxxx", 2, 0, "", longstatus, longwarnings)
swapp.ActivateDoc2 "Ensemble Magasin pots", False, longstatus
Set Part = swapp.ActiveDoc

F1.Show

Set swappp = Application.SldWorks
Set swmodel = swappp.ActiveDoc
bool = swmodel.Extension.RunCommand(SwCommands.swCommands_SaveAs, "")

'swapp.OpenDoc(Name,Type) '
      
Set Part = swapp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("Magasin pots-1@Ensemble Magasin pots_9", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Part.OpenCompFile
Set Part = swapp.OpenDoc6("\xxxxxxxx", 1, 0, "", longstatus, longwarnings)
Set Part = swapp.ActiveDoc

Set Part = swapp.OpenDoc6("\xxxxxxxx", 3, 0, "", longstatus, longwarnings)
Set Part = swapp.ActiveDoc

Set swappp = Application.SldWorks
Set swmodel = swappp.ActiveDoc
bool = swmodel.Extension.RunCommand(SwCommands.swCommands_SaveAs, "")

On dirait que ton code n'est pas entier (pas de "sub").

C'est quoi le problème exactement ? Tu arrives à ouvrir, mais pas à fermer le document actif ?

Il y a une ligne en erreur quand tu lances ton code ?

Je ne peux pas tester, je n'ai pas SolidWorks, donc il me faut plus d'informations.

Je ne vous ai fourni qu'une partie de mon code, j'ai un peu avancé ce matin et trouvé des solutions (mon code est fourni ci-dessous). Le problème qui survient avec ce code est que je n'arrive pas à obtenir le titre de la mep par le même moyen que les pièces et assemblages. En effet ce code enregistre la pièce, la mep, l'assemblage au départ mais pas à la fin car il se ferme à la place de ma mep. Par conséquent, les références dans l'assemblage sont perdues.

Sub main()
        
Set swapp = _
Application.SldWorks

Set Part = swapp.OpenDoc6("\\xxxxxx", 2, 0, "", longstatus, longwarnings)
swapp.ActivateDoc2 "Ensemble Magasin pots", False, longstatus
Set Part = swapp.ActiveDoc

F1.Show


Set swAppp = Application.SldWorks
Set swmodel = swAppp.ActiveDoc
bool = swmodel.Extension.RunCommand(SwCommands.swCommands_SaveAs, "")


'swapp.OpenDoc(Name,Type) '
      
Set Part = swapp.ActiveDoc

'Recupère le lien
FilePath = swmodel.GetPathName
'Récupère le nombre de caractères
PathSize = Len(FilePath)
'Récupère le nom du fichier seulement sans extension
PathNoExtension = Left(FilePath, 29)

TitleA = swmodel.GetTitle

TitleAs = Len(TitleA)

TitleAn = Left(TitleA, TitleAs - 7)

Set Part = swapp.ActiveDoc
Set Part = swapp.OpenDoc6("\\xxxxx"", longstatus, longwarnings)
Set Part = swapp.ActiveDoc

swapp.ActivateDoc2 "Magasin pots.sldprt", False, longstatus
Set Part = swapp.ActiveDoc


Set Part = swapp.OpenDoc6("\\xxxxx", 3, 0, "", longstatus, longwarnings)
Set Part = swapp.ActiveDoc

swapp.ActivateDoc2 "Magasin pots - Feuille1", False, longstatus
Set Part = swapp.ActiveDoc


bool = swmodel.Extension.RunCommand(SwCommands.swCommands_SaveAs, "")

Set Part = swapp.ActiveDoc

TitleM = swmodel.GetTitle

TitleMs = Len(TitleM)

TitleMn = Left(TitleM, TitleMs - 7)

Set Part = swapp.ActiveDoc
Set Part = Nothing
swapp.CloseDoc TitleMn
Set Part = swapp.ActiveDoc

swapp.ActivateDoc2 "Magasin pots.sldprt", False, longstatus
Set Part = swapp.ActiveDoc

Set swAppp = Application.SldWorks
Set swmodel = swAppp.ActiveDoc
bool = swmodel.Extension.RunCommand(SwCommands.swCommands_SaveAs, "")


TitleP = swmodel.GetTitle

TitlePs = Len(TitleP)

TitlePn = Left(TitleP, TitlePs - 7)


Set Part = swapp.ActiveDoc
Set Part = Nothing
swapp.CloseDoc TitlePn
Set Part = swapp.ActiveDoc

swapp.ActivateDoc2 TitleAn, False, longstatus
Set Part = swapp.ActiveDoc

Set Part = swapp.ActiveDoc
longstatus = Part.SaveAs3(FilePath, 0, 2)

Set Part = swapp.ActiveDoc
Set Part = Nothing
swapp.CloseDoc TitleAn


F2.L_2 = TitleMn

F2.Show


End Sub

C'est à quelle ligne que ça ne marche pas ?

Pour fermer le document actif je procederai comme ça :

swApp.CloseDoc(swModel.GetPathName)

Bonjour,

Ton code me donne le lien de la mep, hors il me faut le nom afin de le fermer, je me trompe ? De toute façons, il me donne toujours le lien de l'assemblage, je pense que je dois avoir un problème d'activation de document lorsque je passe de mon assemblage à ma mep. Mon code fonctionne, c'est juste qu'il ne fait pas ce que je veux.

Donc essaye d'insérer ces lignes lorsque tu veux fermer une mise en plan :

Set swmodel = swapp.ActiveDoc

swApp.CloseDoc(swModel.GetPathName)

 

 

1 « J'aime »

D'ailleurs je viens de voir dans ton code qu'il y parfois "swApp" et "swAppP".

Je pense que c'est une erreur et que tu dois remplacer par "swApp"  partout.

Pour résumer mon programme se perd dans les documents car je n'arrive à récupérer les bons noms. Ci-joint deux photos de ce qu'il récupère comme nom et de même mais avec ton instruction : (en 1er c'est l'assemblage avec et sans extension, en 2ème ça devrait être la mep et en 3eme la pièce)


err1.png

Ca fonctionne avec tes derniers commentaires que je n'avais pas vu ! Pour le swapp(p), j'ai deux déclarations différentes, donc je pense ne pas avoir le choix.

Dim swAppp As SldWorks.SldWorks

Dim swApp As Object

Un très grand merci à toi, il me reste plus qu'a faire cela pour les sous assemblages et les autres pièces :)

 

1 « J'aime »

Pas de soucis !

Pour me remercier, merci de choisir en meilleure réponse ma réponse qui t'a aidé :)