Si je ne me trompe pas, vous devriez demander à Lucas Prieur, il s'y connait fortement en macro, mais je ne sais pas s'il est dispo ?
Bonjour et bonne année à tous,
En effet j'ai fait une macro similaire (PDF & DWG).
J'avais l'intention de poster celle-ci sur Lynkoa mais je ne l'ai pas fait par manque de temps. Avant de la poster, j'avais envie de la simplifier et commenter toutes les lignes une par une pour plus de lisibilité pour les néophytes de la programmation en VBA.
Est-ce que tu as les bases en VBA ? Est-ce que tu as déjà une base pour cette macro ou tu pars de zéro ?
J'ai créé un tutoriel pour "Enregistrer-sous" pour SolidWorks (qui est plus simple et commenté pour chaque ligne) que tu peux trouver ici :
http://www.lynkoa.com/tutos/3d/macro-enregistrer-sous-avec-solidworks
Tu auras déjà quelques pistes. Je suis actuellement en vacances jusqu'au 6, donc je transfererai la macro à ce moment (mais sache que celle-ci est spécifique à notre entreprise et demandera beaucoup de travail d'adaptation).
Bonjour et bonne année,
peus tu preciser quand tu dit :
- dans un dossier du réseau différent de l'emplacement du .SLDDRW
Tu le veut toujours en meme endroit?
Nous avons nos fichiers solidworks (pièces, assemblages et mises en plan) dans un dossier "Technique".
Nous avons une "base de données" des plans en DXF et PDF (consultable par tous) dans un autre dossier.
Donc NON, il s'agit bien de 2 endroits différents!
Salut @ ThomasM
je pense que la promesse n'est pas que belle
puisque si je ne me trompe tu as pu recuperer cette dite Macro
as tu essayé et esceque cela correspond a ton reel besoin
il est vrai que plus la question est claire plus la reponse est ciblée ( lucas) ;-)
@+ ;-)
Il s'agit bien d'un seul dossier pour tous les PDF. (et DXF)
Non pour le moment ça ne marche pas.
J'ai récupéré effectivement la macro sur le forum "Solidagora".
Mais elle me renvoie une erreur.
Un problème lié à la base au fait que je suis en 64 bits. (à ce que j'ai compris)
J'essaie d'avancer pour la faire fonctionner.
Et j'aimerais aussi la simplifier pour qu'en appuyant sur l'icône de la macro elle réalise ce que je lui demande sans avoir à rentrer un chemin de dossier ni à cocher l'extension...
Pour le 64 bits le seul problème que je connaisse, c'est que quand tu lances la macro, la boite de dialogue n’apparaît pas.
Avec un "petit" ALT + TAB, tu fais apparaître la boite de dialogue (pas besoin de tout ces longPtr et PrtSafe ...)
cette reponse ne repond pas a ta question
soi patient la plupart des gens sont en congé de fin d'année ca va venir
@+ ;-)
Peux-tu poster la macro ici en fichier texte ?
Je pourrai la modifier pour inclure le chemin que tu veux si tu me le donnes (en UNC c'est mieux, du style : "\\SERVEUR\Bureau d'études\Plans SolidWorks\Plans PDF\")
Quand tu as l'erreur, et que tu cliques sur debuggage, tu arrives à quelle ligne ?
voir ce lien
https://forum.solidworks.com/thread/66010
fichier joint
@+ ;-)
file_save_as_pdf__dwg.swp_.zip
voir ce lien aussi
http://forum.solidagora.com/topic1758.html
@+ ;-)
Voici ce que j'ai réussi à faire en récupérant à droite à gauche.
Option Explicit
Public Enum swDocumentTypes_e
swDocNONE = 0 ' Used to be TYPE_NONE
swDocPART = 1 ' Used to be TYPE_PART
swDocASSEMBLY = 2 ' Used to be TYPE_ASSEMBLY
swDocDRAWING = 3 ' Used to be TYPE_DRAWING
End Enum
Dim swApp As Object
Dim swModel As ModelDoc2
Dim sPathName As String
Dim sReference As String
Dim sSaveName As String
Dim longstatus As Long
Dim myRev As String
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox ("Pas de document ouvert")
ElseIf swModel.GetType <> 3 Then
MsgBox ("Il ne s'agît pas d'une mise en plan")
Else
sPathName = swModel.GetPathName 'recupere le nom complet du document actif
sReference = Mid(sPathName, InStrRev(sPathName, "\") + 1) 'Récupère tout ce qui se situe après le dernier \
sReference = Left(sReference, Len(sReference) - 7) 'Suppression des 6 caractères correspondant à l'extension de fichier et du .
sPathName = Left(sPathName, InStrRev(sPathName, "\")) 'Récupère le chemin sans le nom de fichier
'myRev = swModel.CustomInfo2("", "Indice") 'Récupère l'indice dans les propriétés du document
myRev = swModel.GetCustomInfoValue("", "Indice")
longstatus = swModel.SaveAs3("X:\" + sReference + myRev + ".PDF", 0, 0) 'Association de l'ensemble des variables pour formater le nom d'enregistrement
longstatus = swModel.SaveAs3("X:\" + sReference + myRev + ".DXF", 0, 0)
End If
End Sub
Dernier petit soucis :
Je n'arrive pas à récupérer la propriété "Indice" qui est liée à la pièce.
swModel.CustomInfo2("", "Indice") et swModel.GetCustomInfoValue("", "Indice") ne me renvoie rien.
Que faut-il écrire pour récupérer la propriété "Indice" ?
Et donc, personne n'est en mesure de me dire comment faire pour récupérer la propriété personnalisée "Révision" qui est "ancrée" dans la pièce?
Ca serait super puisque ça me permettrait de répondre entièrement à ma question!
D'avance merci, donc!
je pense que sur l'autre forum tu as une demande d'explication voir le texte ci-joint
par annwn » Mar 7 Jan 2014 14:25
Houlà ... attends ... je ne comprends pas tout !
Quelle modif du code as-tu fait ?
Peux-tu faire des copies d'écran de tes messages d'erreur ?
@+ ;-)
Bonjour,
J'ai une macro similaire qui récupère une propriété personnalisée et l'ajoute au nom de fichier.
Elle fait ce que tu souhaites, enregistre en PDF et DXF une mise en plan avec ajout de la propriété "indice"
Il te reste juste à modifier les chemins de destination.
Si tu as besoin d'aide, n'hésite pas
dxf__pdf_bon_pour_fab.swp
Pour récupérer une propriétée personnaliser, il faut utiliser la commande suivante :
Get4 Method (ICustomPropertyManager)
Ci dessous l'exemple de l'aide API :
Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim val As String Dim valout As String
Dim bool As Boolean
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
' Get the custom property data
Set swCustProp = swModelDocExt.CustomPropertyManager("")
bool = swCustProp.Get4("Property_Name", False, val, valout)
Debug.Print "Value: " & val
Debug.Print "Evaluated value: " & valout
Debug.Print "Up-to-date data: " & bool
End Sub
Merci fgirard,
J'ai adapté ta macro pour qu'elle fonctionne chez nous et fasse ce que je souhaitais.
Merci, donc!
avec cette solution ca devrait fonctionner
http://forum.solidagora.com/viewtopic.php?f=28&t=101&p=14689&e=14689
@+;-)
Bonjour,
je souhaitai utiliser la macro de fgirard mais le lien ne fonctionne pas.
fgirard, pourrais tu la remettre, SVP?
Merci