Bonjour ,
J'ai trouvé une macro qui me convient à un détail près j'aimerai qu'elle enregistre uniquement la feuille active ou qu'on puisse sélectionner quel feuille enregistrer.
pour la partie feuille active , j'ai du mal à intégrer swExportPDFData.SetSheets swExportData_ExportCurrentSheet, ""
Cela ne fonctionne pas comme j'essaie.
Voici la macro en question
pdf.swp
Pour ceux qui n'ont pas forcément Solidworks sous la main il est préférable de mettre directement le code que voici (insérer un extrait de code puis vbscript puis coller):
Dim swApp As Object
Dim Part As SldWorks.ModelDoc2
Dim swView As SldWorks.View
Dim swModExt As SldWorks.ModelDocExtension
Dim Prop As SldWorks.CustomPropertyManager
Dim swExportPDFData As SldWorks.ExportPdfData
Dim boolstatus As Boolean
Dim swModel As SldWorks.ModelDoc2
Dim swPathName As String
Dim swPath As String
Dim swName As String
Dim ValOut As String
Dim Att As String
Dim OldAtt As String
Dim iAtt As Integer
Dim Errors As Long
Dim Warnings As Long
Dim oFSO As Scripting.FileSystemObject
Dim oFld As Folder
Const swDocDRAWING = 3
Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc 'associe part au document en cours
Set oFSO = New Scripting.FileSystemObject
If Part.GetType = swDocDRAWING Then 'verif type document
'reconstruction de la mise ne plan
Part.ForceRebuild3 True
'récupération du chemin complet
swPathName = Part.GetPathName
If swPathName = "" Then
swApp.SendMsgToUser ("Le fichier de mise en plan n'est pas enregistré, veuillez le faire et recommencer")
Exit Sub
End If
'affectation de l'emplacement du dossier
swPath = Left(swPathName, InStrRev(swPathName, "à envoyé", , 1))
swPath = swPath & "U:\à envoyé\"
'récupération du nom
swName = Right(swPathName, Len(swPathName) - InStrRev(swPathName, "\"))
swName = Left(swName, InStrRev(swName, ".") - 1)
swPathName = swPath + swName
suite:
swPathName = swPathName + ".pdf" ' ajoute .pdf"
Set swModExt = Part.Extension
Part.ViewZoomtofit2
boolstatus = swModExt.SaveAs(swPathName, 0, 0, swExportPDFData, Errors, Warnings) 'sauvegarde en pdf
Else: swApp.SendMsgToUser ("Cette macro fonctionne uniquement avec une mise en plan")
End If
Fin:
End Sub
Ce code devrait fonctionner:
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExportPDFData As SldWorks.ExportPdfData
Dim sFilename As String
Dim nErrors As Long
Dim nWarnings As Long
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swExportPDFData = swApp.GetExportFileData(1)
sFilename = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, ".") - 1)
swExportPDFData.SetSheets swExportData_ExportCurrentSheet, ""
swExportPDFData.ViewPdfAfterSaving = False
swModel.Extension.SaveAs sFilename & ".PDF", 0, 0, swExportPDFData, nErrors, nWarnings
End Sub
1 « J'aime »
Bonjour ,
merci sur ton code si je veux rajouter l'emplacement de dossier j'essaie de rajouter :
swPath = Left(swPathName, InStrRev(swPathName, "à envoyé", , 1))
swPath = swPath & "U:\à envoyé\"
Mais ça ne fonctionne pas y a d'autre variable à prendre en compte ?
Sur le 1er code ou le 2ème?
Dans la 2ème macro c'est la ligne sFilName qu'il faut modifier
'on ajoute 'à la ligne ci-dessous afin de l'ignorer (passe la ligne en commentaire)
'sFilename = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, ".") - 1)
'On ajoute le chemin et le nom du fichier ci-dessous
sFilename = "C:\Temp\Essai1\" & swModel.GetTitle
Debug.Print sFilename
2 « J'aime »
Parfait merci , j'aimerai juste garder le renommage de ta première macro , parce que la elle m'a ajoute le nom de la feuille.
Ou c'est que je peux trouver des exemple de code pour sfilename ?
SFilname est une variable de type string en gros c'est du texte, pour créer son contenu je récupère le nom de la feuille (swModel.GetTitle) et on lui concatène du texte avec un & tout ce qui est texte est entre "" et les variable sans les ""
soit "C:\Temp\Essai1\".swModel.GetTitle
Si tu affiche dans l'éditeur VBA la fenêtre execution (https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/use-the-immediate-window)
Et debug.print swModel.GetTitle tu verra le retour de ta variable. (Pièce1 - Feuille1) par exemple
Pour garder le nom il faut manipuler la variable pour garder que le nom de la pièce sans la variable pour cela voir cette page:
https://silkyroad.developpez.com/VBA/ManipulerChainesCaracteres/
En utilisant split on recherche la position du - de "pièce1 - feuille1"
En utilisant left avec la position-1 trouvé avec split on récupère uniquement la partie nom de la variable
Il faut donc remplacer la ligne sFilename précédente par:
sFilename = "C:\Temp\Essai1\" & Left(swModel.GetTitle, (InStr(swModel.GetTitle, "-")) - 1)
Je te remercie , elle fonctionne parfaitement