Macro export DXF feuille par feuille

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:

https://www.lynkoa.com/forum/solidworks/export-diff%C3%A9renci%C3%A9-en-pdf-et-dxf-des-onglets-de-mise-en-plan-par-une-macro

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 ?

 

En vous remerciant


pdf_page_par_page.swp

Salut,

J'ai remplacé ".pdf" par ".dxf" dans la macro

Essaye ça devrait marcher


dxf_page_par_page.swp

Merci,
Mais ça ne fonctionne pas correctement, 

Ma mise en plan à une vue avec cotation pour la fab (onglet "Feuille 1") et un déplié de tôle pour la découpe laser (onglet "Rep A")

La macro PDF fait:

un fichier: "nom du fichier_Feuille 1.PDF"

un fichier "nom du fichier_Rep A.PDF"

La macro DXF fait:

un fichier:" 00_nom du fichier_Feuille1.dxf"

un fichier: "00_nom du fichier_Rep A.dxf"

un fichier: "01_nom du fichier_Feuille1.dxf"

un fichier :"01_nom du fichier_Rep A.dxf"

Bonjour,

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.

 

Tout à fait,

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"

C'est ce que j'aimerais faire avec les DXF.

Avec la macro "dxf_page_par_page.swp" on retrouve 4 fichiers

"00_TOTO_PLAN" avec uniquement la feuille "PLAN"

"00_TOTO_Rep a" avec uniquement la feuille "Rep A"

"01_TOTO_PLAN" avec uniquement la feuille "PLAN"

"01_TOTO_Rep a" avec uniquement la feuille "Rep A"

Bonjour,

Avec la macro utilisée il te faut modifier les options d'export des formats dxf/dwg dans les options de solidworks :

Cordialement,

Bonjour,

Le résultat est le même, j'ai toujours 4 fichiers au lie de 2

Contrairement aux PDF

Bonjour,

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).

SW n'avait pas pris en compte le paramètre "Exporter toutes les feuilles dans un fichier"

J'ai bien 2 fichiers avec la bonne syntaxe mais c'est la même feuille dans les 2, celle qui est "active" à l'écran.

En regardant la macro, il y a plusieurs fois "swExpPdfData" et "SldWorks.ExportPdfData"

et une ligne  outFile = outFile & IIf(INCLUDE_DRAWING_NAME, drawName & "_", "") & sheetName & ".dxf" ou c'est ".pdf" dans la macro PDF qui fonctionne

Est-ce les  .....ExpPdfData qu'il faut remplacer par l'équivalent pour les DXF ?

Oups, je regarde plus en détail, je n'ai pas ouvert les fichiers.

Re,

Normalement le code ci-dessous répond au besoin

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

 

3 « J'aime »

Merci,
Elle fonctionne parfaitement ;-)

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

Bonjour @Emmanuel_SERVEL et bienvenue.

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?
image

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…

Cordialement.

2 « J'aime »

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

1 « J'aime »

Bonjour,

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.

1 « J'aime »

Merci @Cyril_f … enrichissement de ma culture personnelle : :grinning:
(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

.

3 « J'aime »