Bonjour à tous,
Je suis à la recherche d'une macro qui me permettrais d'exporter en masse plusieurs Draft en PDF.
Je précise tout de suite que je ne possède que la version basique à mon bureau donc je n'ai pas la possibilité de planifier ce type de taches.
Merci
Tu peux apparemment le faire avec le Task sheduler:
https://www.youtube.com/watch?v=WgjajdK6CEc
Sinon avec des outils spécifique comme Cad+ (non testé):
https://cadplus.xarial.com/
Pour ma part j'utilise les utilitaires MyCADservices et plus particulièrement Intégration ou BatchConverters (très vite amortis pour des besoins récurant):
Intégration:https://help.visiativ.com/mycadtools/2020/fr/Integration.html
BatchConverter: https://help.visiativ.com/mycadtools/2020/fr/BatchConverter.html
1 « J'aime »
Bonjour;
Sinon je propose cette macro.
Ouvre tous les fichiers *.slddrw d'un répertoire et les sauvegarde sous le même nom en PDF.
Option Explicit
Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_DONTGOBELOWDOMAIN As Long = &H2
Private Const BIF_RETURNFSANCESTORS As Long = &H8
Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000
Private Const BIF_BROWSEFORPRINTER As Long = &H2000
Private Const BIF_BROWSEINCLUDEFILES As Long = &H4000
Private Const MAX_PATH As Long = 260
Function BrowseFolder(Optional Caption As String, Optional InitialFolder As String) As String
Dim SH As Shell32.Shell
Dim F As Shell32.Folder
Set SH = New Shell32.Shell
Set F = SH.BrowseforFolder(0&, Caption, BIF_RETURNONLYFSDIRS, InitialFolder)
If Not F Is Nothing Then
If F = "Desktop" Then
BrowseFolder = Environ("USERPROFILE") & "\Desktop"
Else
BrowseFolder = F.Items.Item.Path
End If
End If
End Function
Sub Main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc
Dim sFileName As String
Dim Path As String
Dim nErrors As Long
Dim nWarnings As Long
Dim swDraw As SldWorks.DrawingDoc
Dim PartNoDes As String
Dim swExportPDFData As SldWorks.ExportPdfData
Set swApp = Application.SldWorks
Set swExportPDFData = swApp.GetExportFileData(1)
swExportPDFData.ViewPdfAfterSaving = False
Path = BrowseFolder("Selectionner le Repertoire à Traiter.")
If Path = "" Then
MsgBox "Erreur, Selectionnez le repertoire à nouveau."
End
Else
Path = Path + "\"
End If
sFileName = Dir(Path & "*.slddrw")
Do Until sFileName = ""
Set swModel = swApp.OpenDoc6(Path + sFileName, swDocDRAWING, swOpenDocOptions_Silent, "", nErrors, nWarnings)
Set swModel = swApp.ActiveDoc
Set swDraw = swApp.ActiveDoc
PartNoDes = Mid(swDraw.GetPathName, InStrRev(swDraw.GetPathName, "\") + 1)
PartNoDes = Left(PartNoDes, Len(PartNoDes) - 7)
swDraw.SaveAs3 Path & PartNoDes & ".PDF", 0, 0
swApp.QuitDoc swDraw.GetPathName
Set swDraw = Nothing
Set swModel = Nothing
sFileName = Dir
Loop
MsgBox "Le Traitement est terminé."
End Sub
Cordialement.
2 « J'aime »
Merci,
comment doit on exécuter cette macro? Il faut ouvrir en amont tous les draft?
Bonjour;
Ben non, vous avez demandé un traitement en Batch....
Le plus simple est de vous créer un bouton/macro directement dans Solidworks.
Voir : https://www.lynkoa.com/forum/2d/creer-un-bouton-macro
A son lancement, ma macro va vous demander de sélectionner le répertoire contenant les Mises en plan à traiter, puis les ouvrira unes à unes pour les sauvegarder en pdf.
Cordialement.
Ok,
alors en exécutant la macro j'ai un message qui me dit:
Erreur de compilation:
Type défini par l'utilisateur non défini.
Bonjour;
Vous pourriez me donner encore moins d'informations ? (Bebug = Sur quelle ligne s'arrête le programme ?)
Je soupçonne que vous n'avez pas chargé les Références Nécessaire dans l'interface :
Depuis l'éditeur de Macro, allez dans Option puis cliquez sur Références...
Recherchez dans la liste : (Et cochez les cases)
- Visual Basic For Application
- Solidworks 20xx Exensibility Type Library (20xx=votre version de Solidworks, si plusieurs choisissez la plus récente)
- Ole Automation
- sldWorks 20xx Type Library (20xx=votre version de Solidworks, si plusieurs choisissez la plus récente)
- SOLIDWORKS 20xx Constant type library (20xx=votre version de Solidworks, si plusieurs choisissez la plus récente)
- SOLIDWORKS 20xx Comands type library (20xx=votre version de Solidworks, si plusieurs choisissez la plus récente)
- Microsoft Exel 16.0 Object Library
- Microsoft Shell Microsoft Shell controls and Application.
puis validez votre sélection. (Je vous fait charger volontairement plus de Libraires que nécessaires à cette macro, mais elles vous seront utiles un jour ou l'autre)
Relancez la Macro.
Note : La prochaine fois que vous demandez une Macro, veuillez préciser la version (l'année) de votre Solidworks ainsi que votre niveau en Macro....
Cordialement.
1 « J'aime »
Sorry je suis novice niveau Macro donc pas facile d'expliquer clairement où ça beug.
Je vais essayer la manip' et je vous retiens au courant.
Merci
Désolé pour cette réponse tardive mais voici le nom de la ligne où la macro stop:
Function BrowseFolder(Optional Caption As String, Optional InitialFolder As String) As String
et je précise que tout est bien coché.
Bonjour,
Pour les fonctions type Shell, il faut également la référence "Microsoft Shell controls and Application" sinon la compilation du code est en erreur.
Je pense que le problème vient de là (vérifié sur mon poste).
1 « J'aime »
Bonjour;
En effet, cette référence est nécessaire, merci Cyril.f pour cette correction.
Je corrige la liste sur mon post précédent.
Cordialement.