Bonjour !
Je suis en train de travailler sur une macro afin d'entre autre choses d'appliquer mes nouveaux formulaires de propriétés à d'anciens fichiers qui utilisent encore les anciens.
J'aimerais savoir si vous sauriez comment aller cherche les fichier .asmprp, .drwprp et .prtprp et les appliquer à un asm, drw ou prt avec une macro.
Merci d'avance si vous avez une piste.
Bonne journée
Sans vérifier, j'ai trouvé ça:
sub main()
application.sldworks.activedoc.extension.custompropertybuildertemplate(false) = "whatever.prtprp"
end sub
https://help.solidworks.com/2020/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelDocExtension~CustomPropertyBuilderTemplate.html?verRedirect=1
Source:
https://www.cadforum.net/viewtopic.php?t=26
Bonjour,
Merci à vous 2. A Damien pour l'idée et sdadenis pour la solution.
Ci-joint ma macro avec test du type de fichier.
Bonne journée.
appliquer_formulaires_de_proprietes.swp
Merci, pour les pistes !
Je suis arrivé à quelque chose qui semble fonctionner. C'est certainement ni parfait ni optimisé, je débute...
Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
' Contrôle si un document est ouvert dans SolidWorks
If swModel Is Nothing Then
MsgBox "Il faut un document ouvert pour utiliser cette fonction !", vbInformation, "New MasqueMarquage "
' Contrôle si le document ouvert est une pièce
ElseIf Application.SldWorks.ActiveDoc.GetType = swDocPART Then
' Contrôle si le bon masque de marquage est déjà appliqué
If Not Application.SldWorks.ActiveDoc.Extension.CustomPropertyBuilderTemplate(False) = "Masque_marquage_PRT.prtprp" Then
' Applique le bon masque de marquage
Application.SldWorks.ActiveDoc.Extension.CustomPropertyBuilderTemplate(False) = "Masque_marquage_PRT.prtprp"
End If
' Contrôle si le document ouvert est un assemblage
ElseIf Application.SldWorks.ActiveDoc.GetType = swDocASSEMBLY Then
' Contrôle si le bon masque de marquage est déjà appliqué
If Not Application.SldWorks.ActiveDoc.Extension.CustomPropertyBuilderTemplate(False) = "Masque_marquage_ASM.asmprp" Then
' Applique le bon masque de marquage
Application.SldWorks.ActiveDoc.Extension.CustomPropertyBuilderTemplate(False) = "Masque_marquage_ASM.asmprp"
End If
' Contrôle si le document ouvert est une mise en plan
ElseIf Application.SldWorks.ActiveDoc.GetType = swDocDRAWING Then
' Contrôle si le bon masque de marquage est déjà appliqué
If Not Application.SldWorks.ActiveDoc.Extension.CustomPropertyBuilderTemplate(False) = "Masque_marquage_DRW.drwprp" Then
' Applique le bon masque de marquage
Application.SldWorks.ActiveDoc.Extension.CustomPropertyBuilderTemplate(False) = "Masque_marquage_DRW.drwprp"
End If
End If
End Sub
Pour un 1er dev cela me parait plutôt pas mal et plutôt bien optimisé, puisque tu as pris en compte la gestion des erreurs.
Cela devrait effectivement être fonctionnel, plus qu'a tester dans la durée.