Je ne connais rien aux macros et j'aimerais savoir si c'est possible de faire une macro d'export DXF qui exporte tous les feuillets d'un mise en plan dans des fichiers séparés en gardant le nom des feuillets.
Après recherche sur le forum j'ai trouvé ce sujet avec la macro en pièce jointe, qui est ce que je recherche dans le principe, seulement elle fait les PDF et non les DXF:
Est-ce qu'une bonne âme du forum pourrait me modifier cette macro pour remplacer le PDF par le DXF. Est-ce que la macro va garder les options de la fonction "enregistrer sous" de SolidWorks que j'utilise quand je le fais manuellement comme l'utilisation d'un fichier de projection ?
Je ne suis pas certain de comprendre le message précédent.
C'est la macro PDF fait et la macro DXF devrait faire que l'on doit comprendre?
Je n'ai pas ouvert la macro mais s'il y a simplement eu un changement d'extension de fichier sur l'ensemble du code, ça ne fait logiquement qu'enregistrer sous un autre format.
La macro "pdf_page_par_page.swp" crée 1 fichier par feuille de mise en plan et intègre dans le nom du fichier PDF le nom du fichier de mise en plan + le nom de la feuille
Par exemple, si le fichier de la mise en plan s'appelle "TOTO" et possède 2 feuilles, "PLAN" et "Rep A", la macro PDF fait:
1 fichier "TOTO_PLAN" avec uniquement la feuille "PLAN"
1 fichier "TOTO_Rep A" avec uniquement la feuille "Rep A"
Pour ma part, je suis paramétré sur "Exporter toutes les feuilles dans un fichier" et je n'ai aucun problème.
Il n'y a que si le paramétrage est sur "Exporter toutes les feuilles dans des fichiers séparés" où l'export génère 4 fichiers.
Ce que j'ai pu constater également, c'est qu'il faut forcer le changement de paramétrage deux fois pour que ce soit pris en compte correctement (bug probable de SW2020).
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim sPathname As String
Dim vSheetName As Variant
Dim nErrors As Long
Dim nWarnings As Long
Dim i As Long
Dim bRet As Boolean
Dim lParam As Long
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
lParam = swApp.GetUserPreferenceIntegerValue(swDxfMultiSheetOption)
'Changement paramétrage export dxf si différent de feuille active
If lParam <> 0 Then
bRet = swApp.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swDxfMultiSheetOption, swDxfMultisheet_e.swDxfActiveSheetOnly)
End If
sPathname = swModel.GetPathName
sPathname = Left(sPathname, Len(sPathname) - 7)
vSheetName = swDraw.GetSheetNames
For i = 0 To UBound(vSheetName)
bRet = swDraw.ActivateSheet(vSheetName(i))
bRet = swModel.SaveAs4(sPathname & "_" & vSheetName(i) & ".dxf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, nErrors, nWarnings)
Next i
' Retour à la Feuille 1
bRet = swDraw.ActivateSheet(vSheetName(0))
' Remise en place du paramétrage initial
bRet = swApp.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swDxfMultiSheetOption, lParam)
End Sub
Bonjour,
Désolé de dépoussiérer le sujet, mais j’ai essayé cette macro sur SW2025 et cela ne fonctionne pas.
C’est exactement ce que je cherche à faire également, je fais de la mise en plan de pièces à corps soudés multiples.
Merci beaucoup
Manu
Pour pouvoir vous aider il nous faudrait plus d’informations:
Vous dites que la macro ne fonctionne pas sous Sw2025, quel et le message d’erreur ?
Votre version de Solidworks est-elle une version Locale ou 3Dexperience ?
Avez-vous pensé à charger les Références Solidworks dans votre éditeur VBA?
Nota:
La fonction « SaveAs4 » est considérée comme obsolète dans l’aide des API Solidworks.
étrangement elle est remplacée par « SaveAs3 »
et leurs déclaration sont légèrement différente:
value = instance.SaveAs4(Name, Version, Options, Errors, Warnings)
et
value = instance.SaveAs3(Name, Version, Options, ExportData, AdvancedSaveAsOptions, Errors, Warnings)
Ceci dit, une fonction « obsolète » n’est pas forcément inutilisable …
Mais là on attaque un sujet qui dépend de votre niveau en programmation VBA.
Dans votre cas je pense plutôt aux Références VBA à ajouter…
Bonjour,
Merci pour votre retour, en allant vérifier les références, les cases SW étaient déjà toutes cochées. J’ai simplement rajouté Microsoft Scripting Runtime, j’ai relancé la macro pour essayer et cela semble fonctionner parfaitement. Je ne sais pas si c’était cela le problème mais en tout cas je suis satisfait.
Merci beaucoup
Manu
Ce n’est pas étrangement remplacé par SaveAs3, ce n’est juste pas sur les mêmes méthodes, SaveAs4 fait parti des méthodes ModelDoc2 et SaveAs3 de ModelDocExtension.
En réponse @Emmanuel_SERVEL , la référence Microsoft Scripting Runtime n’est normalement pas nécessaire pour le bout de code que j’ai donné. Le bug pouvait provenir de la fonction Left qui des fois n’est pas reconnue, il faut utiliser en remplacement VBA.Left.
Merci @Cyril_f … enrichissement de ma culture personnelle :
(et il n’y à même pas de sarcasme)
ModelDoc2 :
Représente le document principal dans SolidWorks (pièce, assemblage ou mise en plan)
Permet d’accéder aux opérations de base sur le document : ouvrir, enregistrer, reconstruire, obtenir le type de document, accéder aux configurations, gérer les vues, etc
Donc => ModelDoc2:pour toutes les opérations de base sur le document SolidWorks* .
ModelDocExtension :
Est une extension de ModelDoc2, accessible via la propriété .Extension d’un objet ModelDoc2* .
A été créée pour ajouter des méthodes et propriétés supplémentaires lorsque ModelDoc2 a atteint sa limite de capacité en termes de nombre de méthodes .
Permet d’accéder à des fonctionnalités avancées ou moins courantes, telles que : gestion des propriétés personnalisées, calculs de propriétés de masse, gestion des tables de nomenclature (BOM), opérations de conversion, gestion avancée de l’enregistrement (ex : SaveAs2)
Donc : ModelDocExtension :pour les opérations avancées ou spécialisées qui ne sont pas disponibles directement dans ModelDoc2, accessible via la propriété .Extension d’un objet ModelDoc2
En résumé, ModelDocExtension complète ModelDoc2 et permet d’accéder à des fonctionnalités supplémentaires nécessaires pour des macros ou des automatisations avancées dans SolidWorks