Soucis Macro PDF de Annwn

vos questions concernant les API SolidWorks

Soucis Macro PDF de Annwn

Messagepar Keyser-Soze » Mer 23 Nov 2011, 11:42

Bonjour,

Je cherchais à bricoler une macro depuis pas mal de temps, et je viens de tomber sur celle d'Annwn qui est presque parfaite pour moi. Par contre, je n'arrive pas à la lancer!
Lorsque je fais excécuter la macro, je spécifie le dossier où sont mes plans à, et ca m'ouvre seulement les plans, puis change de feuille sans rien faire.
En éditant la macro et en lancant la "partie " mBrowseForFolder(Code) puis Main, la macro s'excécute bien par contre!
Savez vous d'où peut venir le problème?
Lien macro : http://www.logiciel-cao.com/forum/viewtopic.php?t=2979


Autre chose, cette macro ne découpe pas les fichiers PDF/DXF par feuille, mais fait 4 pages dans un PDF par exemple. Comment rajouter le code pour que chaque feuille de mise en plan soit enregistrer avec son nom de feuille en PDF, puis en DXF?

J'ai ce code là qui fonctionne, mais où l'insérer.....

For Each sheetName In sheetNames 'itération sur chaque feuille de la mise en plan
name = sheetName 'génération de la codififcation d'enregistrement en récupérant le nom de la feuile
filename = DossDest & "\" & name & ".PDF" 'compilation du dossier de destination avec le nom de fichier
swModel.ActivateSheet (sheetName) 'activation de la feuille
boolstatus = swModExtension.SaveAs(filename, 0, 0, swExportData, lErrors, lWarnings) 'export les donnés au format PDF
filename = DossDest & "\" & name & ".dxf" 'ajoute l'extension DXF
swModel.SaveAs2 filename, 0, True, False 'enregistre le fichier DXF
Next
End Sub


Edit : ajout lien macro
Dernière édition par Keyser-Soze le Mer 23 Nov 2011, 13:54, édité 1 fois.
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Re: Soucis Macro PDF de Annwn

Messagepar Ydello » Mer 23 Nov 2011, 12:29

Keyser-Soze a écrit:Je cherchais à bricoler une macro depuis pas mal de temps, et je viens de tomber sur celle d'Annwn qui est presque parfaite pour moi. Par contre, je n'arrive pas à la lancer!


Bah ce serait bien de mettre le lien qui mène à rediriger vers le sujet de la macro de Annwn.
Sinon, je pense qu'on aura du mal à te répondre :)
Ydello
Ewok SolidWorks
 
Messages: 41
Inscription: Ven 09 Sep 2011, 15:04
Localisation: Maubeuge (59) SolidWorks 2010 SP 5.0 64bits

Re: Soucis Macro PDF de Annwn

Messagepar Annwn » Mer 23 Nov 2011, 13:10

Keyser-Soze a écrit:En éditant la macro et en lancant la "partie " mBrowseForFolder(Code) puis Main, la macro s'excécute bien par contre!
Je ne comprends pas bien comment tu peut lancer le module mBrowseForFolder puis Main.
Quand tu lance Main, la première chose qu'il fait (après les Dim) c'est de lancer la Fonction GetFolder du module mBrowseForFolder ....



Keyser-Soze a écrit:J'ai ce code là qui fonctionne, mais où l'insérer.....

For Each sheetName In sheetNames 'itération sur chaque feuille de la mise en plan
name = sheetName 'génération de la codififcation d'enregistrement en récupérant le nom de la feuile
filename = DossDest & "" & name & ".PDF" 'compilation du dossier de destination avec le nom de fichier
swModel.ActivateSheet (sheetName) 'activation de la feuille
boolstatus = swModExtension.SaveAs(filename, 0, 0, swExportData, lErrors, lWarnings) 'export les donnés au format PDF
filename = DossDest & "" & name & ".dxf" 'ajoute l'extension DXF
swModel.SaveAs2 filename, 0, True, False 'enregistre le fichier DXF
Next
End Sub
Je pense que faudrait l'insérer juste après If PDF=True Then dans le module ES_dxf_pdf1...
Mais je n'est pas fait le test !
Programmer, c'est bien; programmer utile, c'est mieux........
Venez faire un tour ici !
Annwn
Site Admin
 
Messages: 4938
Inscription: Lun 18 Déc 2006, 22:35

Messagepar Keyser-Soze » Mer 23 Nov 2011, 14:01

Peut être que je me suis mal exprimé...en fait, j'édite la macro, la ca m'ouvre plusieurs fenêtres, dont mBrowseForFolder. Je clic donc sur ce module pour le rendre "actif", et j'exécute le Sub/UserForm.. Une nouvelle fenêtre s'ouvre et j'ai le choix entre main et main2
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Messagepar Annwn » Jeu 24 Nov 2011, 12:38

Bon pour le Main2 : oublie c'est un essai qui est resté !

Tu ne serais pas en 64 bits ou en Seven par hasard ; parce que je sais qu'on a eu des problèmes ou la boite de dialogue restait derrière les autres :(
Programmer, c'est bien; programmer utile, c'est mieux........
Venez faire un tour ici !
Annwn
Site Admin
 
Messages: 4938
Inscription: Lun 18 Déc 2006, 22:35

Messagepar Keyser-Soze » Ven 25 Nov 2011, 9:09

Non, je suis en XP Pro SP3 :(
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Messagepar Annwn » Ven 25 Nov 2011, 12:42

Là je ne vois pas ! :(
Programmer, c'est bien; programmer utile, c'est mieux........
Venez faire un tour ici !
Annwn
Site Admin
 
Messages: 4938
Inscription: Lun 18 Déc 2006, 22:35

Messagepar liryc » Ven 25 Nov 2011, 14:45

Testé sur SW2009, il faut supprimer le module 1 pour que ça fonctionne correctement.
Ensuite, j'ai ajouté les lignes de cette façon dans le code:
Code: Tout sélectionner
If PDF = True Then
            sheetNames = swModel.GetSheetNames()
            For Each sheetName In sheetNames 'itération sur chaque feuille de la mise en plan
            name = " - " & sheetName  'génération de la codififcation d'enregistrement en récupérant le nom de la feuile
            myFileName = Left(CheminTrans, Len(CheminTrans) - 7) & name & ".PDF" 'compilation du dossier de destination avec le nom de fichier
            Debug.Print myFileName
            swModel.SaveAs2 myFileName, 0, True, False
            Next
            If DXF = False And EDRW = False And X_T = False And STP = False And _
            IGS = False And EPRT = False And EASM = False And Impr = False Then swApp.CloseDoc ChemiN
        End If

Par contre je n'ai pas testé l'impact sur le reste des fonctionnalités.
Maintenant merci de nous dire si cette macro te convient ou si tu pars sur celle dece sujet
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Keyser-Soze » Ven 25 Nov 2011, 16:43

Edit : j'avais pas vu ton post....je regarde ca lundi!
En fait, j'ai besoin des 2 macros! Ca dépends du besoin. Certaines fois on diffuse 2-3 plans, et d'autre, la machine complète soit 50-100 plans.
fin Edit

Bon, du coup j'ai cherché une autre solution pour palier à mon problème.
En m'inspirant d'une macro avec boucle pour la MAJ des miniatures http://www.logiciel-cao.com/forum/viewtopic.php?t=6814&highlight=explorateur, et de ma macro bidouillé elle aussi http://www.logiciel-cao.com/forum/viewtopic.php?p=106168#106168, j'ai "fusionné" les 2 pour avoir : une macro qui ouvre toute les MEP d'un dossier, les enregistres en PDF/DXF suivant le nom des feuilles de MEP, à l'endroit où j'ai choisit.
Elle fonctionne....mais impossible de définir le dossier de destination, bien que je le sélectionne, il l'enregistre à l'endroit des MEP. Je dois avoir un soucis avec les variables ou le GetFolder car je ne comprends pas toutes les lignes....

Option Explicit
Public MonDoss As String

Sub main()

Dim swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2
Dim theFolder As String, FichieR As String, ChemiN As String, TempEnreg As String
Dim myError As Long, myWarnings As Long
Dim myFileName As String, mylength As Integer
Dim swModExtension As ModelDocExtension
Dim swExportData As ExportPdfData
Dim sheetNames As Variant
Dim name As String
Dim filename As String
Dim sheetName As Variant
Dim lWarnings As Long
Dim lErrors As Long
Dim DossDest As String, ChemEnreg As String, DossEnreg As String
Dim boolstatus As Boolean

On Error Resume Next
Set swApp = Application.SldWorks

MonDoss = GetFolder("Choisir un répertoire à traiter...")
If MonDoss = "" Then Set swApp = Nothing: Exit Sub
theFolder = MonDoss & "\"

DossEnreg = GetFolder("Enregistrer dans...")
If DossEnreg = "" Then Set swApp = Nothing: Exit Sub
TempEnreg = DossEnreg & "\"

FichieR = Dir(theFolder & "*.SLDDRW")
Do While FichieR <> ""
ChemiN = theFolder & FichieR
Set swModel = swApp.OpenDoc6(ChemiN, 3, 1, "", myError, myWarnings)
swModel.ForceRebuild

Set swModel = swApp.ActiveDoc
Set swModExtension = swModel.Extension
Set swExportData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
swExportData.SetSheets swExportDataSheetsToExport_e.swExportData_ExportCurrentSheet, Nothing

sheetNames = swModel.GetSheetNames()

For Each sheetName In sheetNames 'itération sur chaque feuille de la mise en plan
name = "" & sheetName 'génération de la codififcation d'enregistrement en récupérant le nom de la feuile
filename = ChemEnreg & "\" & name & ".PDF" 'compilation du dossier de destination avec le nom de fichier
swModel.ActivateSheet (sheetName) 'activation de la feuille
boolstatus = swModExtension.SaveAs(filename, 0, 0, swExportData, lErrors, lWarnings) 'export les donnés au format PDF
filename = ChemEnreg & "\" & name & ".dxf" 'ajoute l'extension DXF
swModel.SaveAs2 filename, 0, True, False 'enregistre le fichier DXF
Next
swApp.CloseDoc ChemiN
FichieR = Dir
Loop
Set swModel = Nothing: Set swApp = Nothing
End Sub
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Messagepar liryc » Ven 25 Nov 2011, 17:38

J'ai corrigé des lignes, test et et vois si ça te convient.
Une partie du problème provenait de la variable ChemEnreg qui n'existe pas (TempEnreg).
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Keyser-Soze » Lun 28 Nov 2011, 9:34

C'est bon ca fonctionne!! Un grand merci à toi, c'est parfait!
J'ai juste remis les noms de fichiers qui sont crées à partir du nom de la feuille, pas du nom fichier+feuille.

Je la remets donc ici, si des gens sont intéressé, ils auront le choix.
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Messagepar liryc » Lun 28 Nov 2011, 10:55

De rien, j'avais modifié le nom d'enregistrement car mes feuilles sont toutes identiques donc forcément ça écrase au fur et à mesure.
Si tu as besoin de vérifier si le fichier existe déjà et proposer de le supprimer ou de le conserver ça peut s'ajouter facilement.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Keyser-Soze » Lun 28 Nov 2011, 12:12

Oui j'ai vu quelques codes qui parlaient de ca, mais dans mon cas pas trop intéressant. Les PDF-DXF servent uniquement à être diffuser à l'atelier à un instant T, après on les effaces.
Par contre, si tu connais un truc utiles pour "filtrer" les types de feuilles, là je suis preneur. Par ex, n'enregistrer en PDF que les vrais MEP, et n'enregistrer en DXF que les feuilles contenant celui-ci.
Impossible de les filtrer par nom de feuille, aucune logique. Faudrait genre un truc qui détecte si il y a un cartouche ou pas. J'avais pensé à détecter le nombre de vue, mais ca nous arrive de n'avoir qu'une vue pour une MEP....
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Messagepar liryc » Lun 28 Nov 2011, 12:57

Deux options, soit tu as une zone de cartouche éditable directement et dans ce cas tu utilises la fonction title block, sinon si tu as des calques dans tes feuilles il suffit de voir s'il est actif ou présent et dorienter la macro sur les actions à mener.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Keyser-Soze » Lun 28 Nov 2011, 16:19

Pas de calque dans mes MEP!
Qu'apelles tu une zone de cartouche éditable? J'ai bien un cartouche avec différentes info qui se remplisse toutes seules suivant les propriétés de mes fichers 3D.
Tu aurais des info sur cette fonction title block? Car en lisant ca http://help.solidworks.com/2012/English/api/sldworksapi/Get_Notes_from_New_or_Existing_Title_Block_Example_CSharp.htm ou ca http://help.solidworks.com/2012/English/api/swconst/DP_Tables-TitleBlock.htm, ca m'avance pas trop....
Title block c'est le cadre de la MEP en fait?
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Suivante

Retourner vers Questions générales sur les API

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 7 invités

banniere