Avec une macro, à partir d'une MEP, je voudrais récupérer la propriété de la PRT ou ASM référencé

J'ai fait une macro pour générer un PDF et un DWG de la MEP ouverte dans SW.

J'en profite pour renommer le fichier généré avec nom, n° et indice.

Pour les propriétés dans la MEP, j'utilise Revision = swModel.CustomInfo("Revision"), mais quelle syntaxe dois-je utiliser pour récupérer une propriété de la PRT ou ASM qui est référencé dans la MEP.

La macro me permet de générer les fichiers à l'unité, ou de l'appeler avec l'utilitaire Intégration pour traiter un lot de fichier

 

merci d'avance de vos réponses

Bonjour,

Je ne suis pas sûr que tu puisses le faire en direct à partir de la MEP par contre tu peux retrouver le nom du modèle 3D référencé avec la fonction "GetReferencedModelName()", ouvrir ce modèle 3D, relever les propriétés qui t'intérressent, refermer le modèle 3D puis continuer ton traitement sur la MEP, tout ça par macro bien sûr.

Cordialement,

2 « J'aime »

Sinon autre proposition, je vois que tu as les outils Mycad, et Intégration devrait te permettre de réaliser l'ensemble de ces fonction sans avoir besoin de créeer de macro.

1 « J'aime »

Merci pour vos réponses.

Je ne maitrise pas assez les macros pour me lancer avec la proposition de d.roger.

Avec Intégration, je n'ai pas vu comment générer de pdf ou dwg. Avec Batch Converter, ça marche, et je peux récupérer les infos de la pièce !

Mais c'est un peu lourd : il me faut lancer Intégration puis Batch Converter, et à chaque fois faire glisser la liste des fichiers (pas possible d'enregistrer une liste de fichiers par ex.) dans chaque utilitaire

 

Merci à vous deux, et bonne journée

Bonjour,

Grosso-modo:

Dim sModelName                  As String
Dim ValOut                      As String
Dim ResolvedValOut              As String
Dim sConfigName                 As String
Dim WasResolved                 As Boolean
Dim swModelDocExt               As ModelDocExtension
Dim swCustProp                  As CustomPropertyManager

Sub main()
    
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
    MsgBox ("Pas de document ouvert")
    Else
        If swModel.GetType <> 3 Then
            MsgBox ("Il ne s'agît pas d'une mise en plan")
        Else
            Set swDraw = swModel
                vSheetName = swDraw.GetSheetNames
                vSheetNameArr = swDraw.GetSheetNames

                For Each vSheetName In vSheetNameArr
        
                    bRet = swDraw.ActivateSheet(vSheetName): Debug.Assert bRet
                    Set swView = swDraw.GetFirstView 'Sélectionne le fond de plan
                    Set swView = swView.GetNextView  'Passe à la vue suivante pour exclure le fond de plan
                    'Debug.Print swView.GetName2
                
                    While Not swView Is Nothing
           
                    ' Determine if this is a view of a part or assembly

                        sModelName = swView.GetReferencedModelName

                        sModelName = LCase(sModelName)
                        
                        sConfigName = swView.ReferencedConfiguration
        
                        FileConnu = False
        
                        If InStr(sModelName, "sldprt") > 0 Then
                            nDocType = swDocPART
                        ElseIf InStr(sModelName, "slasm") > 0 Then
                            nDocType = swDocASSEMBLY
                        Else
                            nDocType = swDocNONE
                            Exit Sub
                        End If
                       
                       If nDocType = 1 Or nDocType = 2 Then
                            Call Export
                       End If
        
                        Set swView = swView.GetNextView
    Wend

Next vSheetName
End If
End If
End Sub

Sub Export()
Set swModel = swApp.OpenDoc6(sModelName, nDocType, swOpenDocOptions_Silent, "", nErrors, nWarnings)
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager(sConfigName)
boolstatus = swCustProp.Get5("Revision", False, ValOut, ResolvedValOut, WasResolved)
End Sub

 

A la suite du boolstatus, il faut récupérer la valeur ValOut ou ResolvedValout (en fonction du champs rappatrié, la seconde correspondant à la valeur inscrite dans la colonne "Valeur évaluée") dans uen variable de type string puis la concatenr avec le nom d'enrgeistrement.

Je n'ai pas mis toute les variables, il suffit que tu ajoutes ce qui te manque à ta macro.

1 « J'aime »

Super !

Il va falloir que je trouve un peu de temps pour essayer et mettre ça au point...

Par contre, je ne comprends pas bien cette partie du code :

vSheetName = swDraw.GetSheetNames
vSheetNameArr = swDraw.GetSheetNames
                For Each vSheetName In vSheetNameArr
..

Next vSheetName

Est-ce que cette boucle compte les différentes vues de la feuille de mise en plan ou les feuilles de mise en plan ? (Sheetname me fait penser au nom de la feuille (comme dans Excel), mais il serait logique de "compter" plutôt les vues de mise en plan)

 

Bonjour,

For Each vSheetName In vSheetNameArr : toutes les feuilles de la mise en plan.

While Not swView Is Nothing : toutes les vues de la feuille en cours d'analyse.

Donc toutes les vues de toutes les feuilles....

Cordialement,

Merci

Oui, par contre j'ai un traitement pour également ne pas boucler pour rien sur le même fichier.