Macro d'enregistrement en PDF et DXF dans un dossier externe

Bonjour à tous et bonne année 2014!

 

Je recherche une macro qui permet :

  • d'enregistrer sous DXF et PDF une mise en place SW
  • dans un dossier du réseau différent de l'emplacement du .SLDDRW
  • de rajouter à la fin du nom du fichier la propriété personnalisé "Révision"
  • de cliquer sur une icône pour faire toute l'opération

 

Le lien (http://forum.solidagora.com/macro-api-solidworks-enregistrer-pdf-dxf-x-t101.html) que proposait Gt22 dans la question (http://www.lynkoa.com/forum/3d/macro-d-enregistrement-en-pdf#) est une belle promesse mais il n'y pas la macro...

L'utilitaire BatchConverter est bien mais un peu plus lourd (je veux juste à avoir à cliquer sur une icône)

 

Du coup, est ce que quelqu'un peut me venir en aide?

 

D'avance merci,

Thomas

Bonjour,

Dans le lien de solidagora, il est marqué qu'il faut juste contacter la personne qui à poster le message pour recevoir la macro. Donc je commencerai par la!  ;)

Dans le même esprit que BATCHCONVERTER il y a INTEGRATION (surtout si tu veux modifier le nom du fichier final en y ajoutant la propriété Révision, car il ne me semble pas que Batch sache le faire).

 

Tu devrais demander au "DEV" de chez Axemble s'il peuveut te créer une "macro" depuis SW qui lance INTEGRATION avec ton paramétrage de convertion+modification du fichier final.

 

Personnellement, avant de passer à l'EPDM, nous avons utilisé BATCHCONVERTER pour convertir en automatique les MEP en dxf,pdf et edrw dans un répertoire autre que ceux du BEM (pour qu'ils soient accéssible à la production par exemple).

Nous lancions chaque soir l'utilitaire BATCHCONVERTER qui prenait en compte toutes les mises en plan faites ou modifiés dans la journée (tu gères cela via les filtres sur les dates). L'avantage c'est qu'il n'y a pas d'oublie par cette méthode contrairement à ton bouton macro qui demande une intervention humaine.

2 « J'aime »

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 ?

1 « J'aime »

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!

Mais est ce un seul dossier pour tous les PDF ? Ou pour chaque commande / affaire / machine c'est un dossier différent ?

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
1 « J'aime »

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