Enregistrer en STEP avec une macro

Bonjour à tous,

J'ai actuellement une macro ouvrant un fichier 3D possèdant une famille de pièces, à partir du choix de l'utilisateur dans une liste, ainsi que la mise en plan associée.
Dans certains cas, il se peut que mes collègues aient besoin du fichier sous format STEP donc je me tourne vers vous pour m'éclairer afin de faire cette opération à l'aide d'une macro,. Voici ce que j'aimerais faire : 

- Proposer à l'utilisateur l'enregistrement en fichier STEP de la pièce étant déjà ouverte via un "OptionButton",
- Si le bouton est sélectionné, j'aimerais enregistrer le fichier en STEP sous un autre nom : STEP_"nom rentré au préalable par utilisateur"
- Dans un autre fichier, destiné à accueillir uniquement des STEP sur le serveur avec un chemin basique C:\Users\.......\STEP\STEP_"nom rentré au préalable par utilisateur".STEP

J'ai déjà regardé en passant par l'enregistreur de macro mais je n'obtiens que : 

Dim swApp As Object

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
longstatus = Part.SaveAs3("C:\Users\cbr\Desktop\CAO W25\STEP\STEP.STEP", 0, 0)
End Sub

Mais cela me paraît assez léger ou est-ce vraiment "aussi simple" ?

J'ai également voulu regarder à l'aide de la macro de .PL : http://www.lynkoa.com/tutos/3d/macro-enregistrer-sous-avec-solidworks mais je pense qu'elle est trop complexe pour mon cas.

Donc j'aimerais savoir si certains pourraient m'aider svp ? 

Merci !

Salut,

Encore une fois, tout est dans l'aide API de SW : http://help.solidworks.com/2017/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldocextension~saveas.html

et pour configuer les options d'export : http://help.solidworks.com/2017/english/api/swconst/filesaveasstepoptions.htm

Bonne journée

4 « J'aime »

Alors oui c'est aussi mais non sa le sera pas pour toi car il faudra remplacer dans la maco cbr par le nom d'utilisateur qui theoriqement est different sur chaque poste c'est la seul problematique que je vois ah et aussi mettre une variable pour le nom du fichier :)

 

EDIT à priori cette ligne répondrais a ton soucis de variable d'environnement different

MsgBox CreateObject("WScript.Shell").specialfolders("Desktop")

 

2 « J'aime »

Tout d'abord merci de vos réponses !

remrem j'ai posé directement la question sur le forum car des choses ayant déjà été réalisées je pensais trouver des solutions plus rapidement (ce qui est le cas). Et éviter de me heurter aux explications de l'API (ce qui est le cas aussi..) car je ne comprends pas les paramètres Option et ExportData. Je comprends encore moins pourquoi avec l'enregistreur cette syntaxe n'est pas respectée.

MaD ce chemin d'enregistrement est provisoire pour mes tests mais en réalité se sera un endroit sur le serveur donc je pense que cela résout ce problème. La variable avec le nom est déjà créée et utilisée :).
Je ne vois pas bien ce que fait cette ligne ? A quo icorrespond ("WScript.Shell") stp ?

1 « J'aime »

SA permet de créée un objet particulier qui te permet de recupere des variable systeme on est plus sur de la programmation pur que de la macro SW

2 « J'aime »

D'accord merci pour ton explication. 

Du coup toi tu penses que la ligne de code donnée par l'enregistreur suffit ? Je vais essayer.

Si c'est juste pour un export en step oui apres comme sur le lien de remrem tu peut forcer certaine option si tu en as besoin

2 « J'aime »

Cela dépend encore une fois de ton objectif.

Si tu souhaite faire un simple enregistrer sous et step. Cela étant dit je ne vois pas trop l'intérêt de faire une macro pour trois clics...

Si tuveux forcer les paramètres pour etre sur que ton export sera comme tu le souhaite et pas selon les paramètres du PC alors tout est expliqué dans l'aide.

Essaye d'écrire un bout de code comme expliqué et si tu rencontre un problème. Reviens vers nous et on essaiera de t'expliquer ou de te conseiller... ;-)

2 « J'aime »

Justement mon objectif c'est ça, enfin ce n'est pas d'éviter 3 clics mais c'est dans le but de toujours avoir les mêmes nom de dossier, de fichier et le même chemin d'enregistrement.

J'ai donc essayé la solution facile et cela marche dans un cas mais pas dans l'autre :
 

'Pour l'enregistrement en fichier STEP
                         If Check_step.Value = True Then
                            EnregistrementSTEP = Part.SaveAs3("C:\Users\cbr\Desktop\CAO W25\STEP\STEP_" & ActiveConfiguration & ".STEP", 0, 0)
                            MsgBox "Le fichier STEP a été enregistré dans le dossier suivant : C:\Users\cbr\Desktop\CAO W25\STEP" & Chr(10) & "Sous le nom suivant : STEP_" & ActiveConfiguration, vbInformation, "Emplacement du fichier"
                         End If

J'ai exactement le même code. Dans un cas cela marche et dans l'autre j'au l'erreur "Run-time error '91'" mais je ne vois pas ce qui cloche. Sûrement un élément non défini mais je ne vois pas.

Salut,

Je viens de découvrir que la méthode SaveAs3 est passée obsolète en 2017. Il faut désormais utiliser ceci : http://help.solidworks.com/2017/english/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.IModelDocExtension~SaveAs.html

Aie ! Je vais devoir revoir une partie de mon application en VB.net....

Edit : Fais attention à ce paragraphe :

"To save as an IGES, STL, or STEP file, the document to convert must be the active document. Before calling this method:

  1. Call ISldWorks::ActivateDoc3 to make the document to convert the active document.
  2. Call ISldWorks::ActiveDoc to get the active document."

Mince c'est vrai que le code change suivant la version de SW...
Je suis en 2015 donc SaveAs3 marche chez moi mais SaveAs ne fonctionne pas...
Oui merci c'est ce que j'ai remarqué après avoir posté mon commentaire.

Est-ce qu'il y a un moyen où un tableau existant, permettant de savoir "les méthodes obsolètes" svp ? Car je sans que ça va me poser problème.

Pour cela, dans l'aide, tu peux changer la version cible à l'aide du menu déroulant en haut à droite.

Exemple : Si je change pour 2015, SaveAs3 est toujours obsolete. Si j'essaye en 2010 elle n'est pas disponible.

1 « J'aime »

Bonsoir,

Euh les fonctions obsolètes ne sont pas pour autant plus utilisable. J'utilise encore des macro vba en SaveAs2 sur SW2016 et ça fonctionne très bien (pour des exports en step, stl, iges, pdf)

2 « J'aime »

Salut Cyril.f

Merci de ta précision. Je vais creuser çà pour voir d'où vient le problème.

La disponibilité ou pas de certaines fonction de SW dépend de la dll référencée.

De mémoire, VBA ne créé pas de copie des dll référencées, il se sert de celle disponible. Il peut arriver que certaines fonctions aient été supprimées dans les dll récentes.

Dassault ne s'embête pas à corriger ses dll, il ajoute des fonctions, des paramètres et des procédures suivant les besoins. 

Ca présente au moins un avantage, c'est que l'on peut écrire des macro rétro compatibles mais aussi compatible avec les versions ultérieures mais avec pertes de certaines fonctionnalités.

2 « J'aime »