Macro export DXF feuille par feuille

Bonjour,

Merci du retour, désolé je ne suis pas un consommateur de forum, je ne connais pas les règles à respecter. :sweat_smile:

Ci-dessous ma macro :

Option Explicit
Dim swApp       As SldWorks.SldWorks
Dim swModel     As SldWorks.ModelDoc2
Dim swDraw      As SldWorks.DrawingDoc
Dim swCustProp  As CustomPropertyManager
Dim valOut1     As String
Dim resolvedValOut1 As String
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
    
    ' On récupère la date du jour et on la met dans un format pouvant se mettre dans le nom d'un fichier
    Dim dateNow As String
    dateNow = Replace(Date, "/", ".")
    
    ' On récupère les valeurs qui nous intéresse dans les propriétés personnalisées du plan
    Set swCustProp = swModel.Extension.CustomPropertyManager("")
    swCustProp.Get2 "Révision", valOut1, resolvedValOut1

    sPathname = Replace(swModel.GetPathName, ".SLDDRW", "")
    vSheetName = swDraw.GetSheetNames
    For i = 0 To UBound(vSheetName)
        bRet = swDraw.ActivateSheet(vSheetName(i))
        bRet = swModel.SaveAs4(sPathname & " - " & resolvedValOut1 & " - " & dateNow & "_" & 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

En tout cas, je vous remercie tous grandement. :grin:
Manu

Bonjour;

Globalement je ne vois pas trop d’incohérences dans le code, a voir ce qu’en disent des plus professionnels que moi :sweat_smile:.
J’aurai juste utilisé une variable pour la propriété « Révision »
du style :

Dim MyRevision as string
puis
MyRevision = swCustProp.Get2 "Révision", valOut1, resolvedValOut1

et pour ajouter le numero de page, pourquoi ne pas utiliser (i+1) ?
Cela donnerai:

bRet = swModel.SaveAs4(sPathname & " - " & MyRevision & " - " & dateNow & "_" & vSheetName(i) & i+1 & ".dxf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, nErrors, nWarnings)

De plus, je ne suis pas un grand fan de l’utilisation de points « . » dans le nom du fichier,
Donc (mais c’est facultatif) : dateNow = Replace(Date, « / », « _ »)

Et enfin, j’ajouterai un contrôle pour vérifier que MyRevision n’est pas « Vide »:

If MyRevision ="" then
 msgbox ("La propriété Révision n’existe pas.")
exit sub
end if

Pour gagner un peu de temps, il est possible de désactiver les mises à jour graphiques de Solidworks pendant le traitement:

swModel.FeatureManager.EnableFeatureTree = False 'Désactivation de la mise à  jour treeManager
modView.EnableGraphicsUpdate = False 'Désactivation de la mise à  jour graphique
EnableFeatureTreeWindow = False 'Désactivation de la mise à  jour de la fenetre

mais il faudra les réactiver à la fin du traitement:

swModel.FeatureManager.EnableFeatureTree = True 'Activation de la mise à  jour treeManager
modView.EnableGraphicsUpdate = True 'Activation de la mise à  jour graphique
EnableFeatureTreeWindow = True 'Activation de la mise à  jour de la fenetre

Bonjour,
Tout dépend de la « lourdeur » de chaque feuille.
Il est possible que SW rame à ce niveau (j’ai un peu le même comportement sur certaines macro qui ne font qu’un simple export PDF)

En même temps plus de 100 feuilles, pas du tout surpris que ça rame!

Et cela me conforte dans notre façon de faire:
1 pièce = un fichier = 1 plan puis assemblage (hormis construction soudée tubulaire à plusieurs corps)

OK merci pour vos retours.
J’essaie de modifier çà et j’essaie à ma prochaine génération de DXF.

Pour info, je suis en construction soudée pour de la modélisation de mobilier, donc suivant le meuble il peut y avoir beaucoup de pièces à mettre en plan. Et il m’est demandé d’épurer un maximum les feuilles, donc beaucoup de feuilles pour une seule et même pièce.

En tout cas je vous remercie tous grandement pour le temps que vous avez accordé à me répondre.