[Resolu] Macro PDF (encore une)

vos questions concernant les API SolidWorks

[Resolu] Macro PDF (encore une)

Messagepar Redrum555 » Ven 14 Oct 2011, 11:39

Bonjour tout le monde,

J'ai ce petit bout de code qui me permet d'enregistrer dans un pdf différent chaque feuille d'une mep:

Code: Tout sélectionner
Private Sub CommandButton1_Click()
 
Dim swApp As SldWorks.SldWorks
Dim swModel As DrawingDoc
Dim swModExtension As ModelDocExtension
Dim swExportData As ExportPdfData
Dim sheetNames As Variant
Dim sheetName As Variant
Dim lWarnings As Long
Dim lErrors As Long


Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModExtension = swModel.Extension

Set swExportData = swApp.GetExportFileData(swExportDataFileType_e.swExportPDFData)
swExportData.SetSheets swExportDataSheetsToExport_e.swExportData_ExportCurrentSheet, Nothing

' Loop all sheets and export
sheetNames = swModel.GetSheetNames()

Dim name As String

For Each sheetName In sheetNames
   name = swModel.GetPathName() & " - " & sheetName & ".pdf"
   swModel.ActivateSheet (sheetName)
   swModExtension.SaveAs name, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Copy, swExportData, lErrors, lWarnings
   
Next

End Sub


Mon soucis c'est que ça enregistre au même endroit que la mep.

Comment fais-je pour que ça enregistre dans un autre répertoire?

Merci d'avance
Dernière édition par Redrum555 le Ven 14 Oct 2011, 13:40, édité 1 fois.
Redrum555
Ewok SolidWorks
 
Messages: 22
Inscription: Ven 06 Mai 2011, 15:48

Messagepar liryc » Ven 14 Oct 2011, 13:18

Bonjour,
Soit tu imposes un répertoire donné soit tu passe par la navigation de dossier (type enregistrer sous).
Pour imposer le répertoire, regarde dans l'aide de l'API à Export to PDF.
Au cas où tu aurais besoin de créer un répertoire, personnellement j'utilise ça:
Code: Tout sélectionner
Set fs = New Scripting.FileSystemObject
    Rep = "C:\PDF\"
    ' test si le repertoire existe
        If Not fs.FolderExists(Rep) Then
         '  création du repertoire si besoin
         fs.CreateFolder (Rep)
    End If
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Redrum555 » Ven 14 Oct 2011, 13:38

Merci liryc,

Ca peut servir.

J'ai réfléchi un peu et j'ai résolu mon problème j'ai même créé un bouton "browse" pour récupérer le répertoire de destination (merci Annwn)

Pour ce que ça intéresse voici mon nouveau code:

Code: Tout sélectionner
Private Sub CommandButton2_Click()
Dim DossDest As String
DossDest = GetFolder("Choisir un nouveau répertoire de destination ...")
If DossDest <> "" Then FormConfigMgr.TextBox2.Value = DossDest

End Sub


Private Sub CommandButton1_Click()
 
Dim swApp As SldWorks.SldWorks
Dim swModel As DrawingDoc
Dim swModExtension As ModelDocExtension
Dim swExportData As ExportPdfData
Dim sheetNames As Variant
Dim sheetName As Variant
Dim lWarnings As Long
Dim lErrors As Long
Dim DossDest As String
Dim boolstatus          As Boolean

Set swApp = Application.SldWorks


Set swModel = swApp.ActiveDoc
Set swModExtension = swModel.Extension

Set swExportData = swApp.GetExportFileData(swExportDataFileType_e.swExportPDFData)
swExportData.SetSheets swExportDataSheetsToExport_e.swExportData_ExportCurrentSheet, Nothing

' Loop all sheets and export
sheetNames = swModel.GetSheetNames()

Dim name As String
Dim filename As String
DossDest = FormConfigMgr.TextBox2.Value
For Each sheetName In sheetNames
   name = " - " & sheetName & ".pdf"
   filename = DossDest & "\" & name & ".PDF"
   swModel.ActivateSheet (sheetName)
   boolstatus = swModExtension.SaveAs(filename, 0, 0, swExportData, lErrors, lWarnings)
Next
End sub
Redrum555
Ewok SolidWorks
 
Messages: 22
Inscription: Ven 06 Mai 2011, 15:48

Messagepar Chico » Ven 14 Oct 2011, 17:04

Content que ton problème soit résolu.

Merci de partager le code final! :D
Il vaut mieux poser une question et risquer d'avoir l'air idiot
une journée que de se taire et d'être bête toute sa vie.

8wd a dit : LA FONCTION RECHERCHE EST TON AMIE
http://www.logiciel-cao.com
Avatar de l’utilisateur
Chico
Esprit Jedi Solidworks
 
Messages: 3120
Inscription: Mer 12 Mar 2008, 19:16
Localisation: Mauricie (Québec) ------SW 2006 SP0.0

Messagepar Annwn » Lun 17 Oct 2011, 11:50

Redrum555 a écrit:J'ai réfléchi un peu et j'ai résolu mon problème j'ai même créé un bouton "browse" pour récupérer le répertoire de destination (merci Annwn)
De rien :wink:
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

Ne fonctionne pas....

Messagepar Keyser-Soze » Jeu 27 Oct 2011, 11:14

Bonjour,
Ne connaissant strictement rien dans les macros, j'essaie à taton....
Cette maccro me convenait, je l'ai donc copié dans l'éditeur VB. D'ici, j'arrive à la lancer et elle fonctionne.
Par contre, quand j'essaie de la lancer à partir de SLW 2008, ca me dit que la macro PDF.swp a un format inadéquat et ne peut être converti en fichier macro VBA.....

Quelqu'un aurait'il une idée?

Merci
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Messagepar Annwn » Jeu 27 Oct 2011, 12:04

Va voir ce post et dis nous si ça règle ton problème !

En attendant tu peux aller faire un tour parla présentationça nous aideras à mieux te répondre :wink:
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 » Jeu 27 Oct 2011, 12:53

Le post à l'air pas mal....mais je ne vois aucune photo! Si c'est pour créer un bouton pour la macro, déjà fait, sans succès....rien ne se passe, mais ca ne me mets pas d'erreur.

Présentation faites ;)
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Messagepar liryc » Jeu 27 Oct 2011, 12:59

Le problème, je pense, doit provenir du fait que la macro est associée à un formulaire.
En mode pas-à-pas ça fonctionne mais en automatique peu de chance vu que ça attend une action click.
Il y a un autre code il me semble dans la section apprentissage.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Keyser-Soze » Jeu 27 Oct 2011, 13:39

Je ne sais pas trop....à vrai dire je m'y perds un peu....
J'ai aussi trouvé cette macro, c'est à peu près ce que j'ai besoin. En faite, j'ai une MEP avec 1 ou plusieurs feuilles renommées, que je voudrais enregistré en PDF et en DXF.
Mais elle ne renomme pas les fichiers avec le nom des feuilles....et surtout, elle crée un pdf multi, et non pas un pdf par feuille comme l'autre!


Sub main()

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

cheminMEP = swModel.GetPathName
NomFichierComplet = Mid(cheminMEP, 1, Len(cheminMEP) - 7) & ".pdf"

'MessAlert = MsgBox("Accepter vous ce fichier ? " + NomFichierComplet, vbYesNo)
'If MessAlert = vbNo Then Exit Sub

Set Part = swApp.ActiveDoc
Set SelMgr = Part.SelectionManager
Part.SaveAs2 NomFichierComplet, 0, True, False
Part.Save2 False

cheminMEP = swModel.GetPathName
NomFichierComplet = Mid(cheminMEP, 1, Len(cheminMEP) - 7) & ".dxf"

'MessAlert = MsgBox("Accepter vous ce fichier ? " + NomFichierComplet, vbYesNo)
'If MessAlert = vbNo Then Exit Sub

Set Part = swApp.ActiveDoc
Set SelMgr = Part.SelectionManager
Part.SaveAs2 NomFichierComplet, 0, True, False
Part.Save2 False



End Sub
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Messagepar liryc » Jeu 27 Oct 2011, 15:25

En mode pas très propre ça donne ça:
Code: Tout sélectionner
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As DrawingDoc
Dim swModExtension As ModelDocExtension
Dim swExportData As ExportPdfData
Dim sheetNames As Variant
Dim sheetName As Variant
Dim lWarnings As Long
Dim lErrors As Long
Dim DossDest As String
Dim boolstatus          As Boolean

Set swApp = Application.SldWorks


Set swModel = swApp.ActiveDoc
Set swModExtension = swModel.Extension

Set swExportData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
swExportData.SetSheets swExportDataSheetsToExport_e.swExportData_ExportCurrentSheet, Nothing

' Loop all sheets and export
sheetNames = swModel.GetSheetNames()

Dim name As String
Dim filename As String
DossDest = "C:\PDF\" 'dossier de destination fixe
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


Tu peux t'en inspirer pour créer ta propre macro.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

Messagepar Keyser-Soze » Jeu 24 Nov 2011, 10:26

Merci pour ton code, ca fonctionne nikel!
J'ai voulu ajouter la fonction parcourir, mais sans succès....mon code donne ca :

Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As DrawingDoc
Dim swModExtension As ModelDocExtension
Dim swExportData As ExportPdfData
Dim sheetNames As Variant
Dim sheetName As Variant
Dim lWarnings As Long
Dim lErrors As Long
Dim DossDest As String
Dim boolstatus As Boolean

DossDest = GetFolder("Choisir un nouveau répertoire de destination ...")
If DossDest <> "" Then FormConfigMgr.TextBox2.Value = DossDest

Set swApp = Application.SldWorks


Set swModel = swApp.ActiveDoc
Set swModExtension = swModel.Extension

Set swExportData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
swExportData.SetSheets swExportDataSheetsToExport_e.swExportData_ExportCurrentSheet, Nothing

' Loop all sheets and export
sheetNames = swModel.GetSheetNames()

Dim name As String
Dim filename As String
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 me suis donc dit qu'il faut obligatoirement créer un bouton, ce que j'ai fait. Un bouton pour choisir le répértoire, un autre pour executer l'enregistrement. J'ai copié les codes dans les boutons....mais je me retrouve sans rien dans mon Sub main() et ca ne fonctionne pas mieux....
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Messagepar liryc » Jeu 24 Nov 2011, 12:57

Il nous faudrait le code de ton formulaire pour voir où ça bloque.
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, 9:16

Voilà ce que j'ai mis en relation avec mes 2 boutons....mais je ne sais pas quoi mettre dans le programme principale Sub main()
Private Sub CommandButton1_Click()
Dim DossDest As String
DossDest = GetFolder("Choisir un nouveau répertoire de destination ...")
If DossDest <> "" Then FormConfigMgr.TextBox2.Value = DossDest

End Sub

Private Sub CommandButton2_Click()
Dim swApp As SldWorks.SldWorks
Dim swModel As DrawingDoc
Dim swModExtension As ModelDocExtension
Dim swExportData As ExportPdfData
Dim sheetNames As Variant
Dim sheetName As Variant
Dim lWarnings As Long
Dim lErrors As Long
Dim DossDest As String
Dim boolstatus As Boolean

Set swApp = Application.SldWorks


Set swModel = swApp.ActiveDoc
Set swModExtension = swModel.Extension

Set swExportData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
swExportData.SetSheets swExportDataSheetsToExport_e.swExportData_ExportCurrentSheet, Nothing

' Loop all sheets and export
sheetNames = swModel.GetSheetNames()

Dim name As String
Dim filename As String
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
Keyser-Soze
Ewok SolidWorks
 
Messages: 22
Inscription: Mer 19 Oct 2011, 9:34

Messagepar liryc » Ven 25 Nov 2011, 9:20

Il faut que tu le lances.
Code: Tout sélectionner
Sub main()
show.userform1 'à renommer en fonction du nom de ton formulaire
End sub

Mais bon, personnellement j'aurais mis dans la procédure principale le code d'enregistrement et le formulaire qui ne s'occupe que de gérer le comportement des boutons.
liryc
Chevalier Jedi SolidWorks
 
Messages: 479
Inscription: Ven 02 Mar 2007, 8:14
Localisation: Paris - SW2009 SP5.0

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