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" ?
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
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
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 ?
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... ;-)
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.
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:
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.
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)
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.