Probleme macro sw 2018 et 2020

Bonjour,

 

J'ai cree une macro simple en 2018 qui fonctionne tres bien et avec la nouvelle version 2020 ca ne fonctionne plus.

La fonction renvoie la valeur nothing et rine ne se passe

 

merci de votre aide

 

'creation de l'échelle
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.Extension.SelectByID2("Surface-Importée1", "REFSURFACE", 0, 0, 0, True, 0, Nothing, 0)
Dim fonction_echelle As Object
Set fonction_echelle = Part.FeatureManager.InsertScale(0, True, 1.5, 1.5, 1.5)
 

Bonjour,

En déclarant les variables plutôt que de les laisser en type object (fonction_echelle as SldWorks.Feature par exemple) je pense que ça passera mieux.

Après je suppose qu'il nous manque une partie du code donc faudrait la dérouler en pas à pas pour voir où ça bloque (ça peut provenir de la sélection d'entité qui est vide par exemple).

Après, faudrait vérifier au niveau des références de la macro si SW2020 est bien listé.

3 « J'aime »

Même avis et

Dim myModelView As SldWorks.View
1 « J'aime »

Bonjour,

suite a vos reponses ca ne fonctionne toujours pas.

avez vous d'autres pistes ?

merci

 

 

 

Bonjour,

D'après la documentation, la fonction InsertScale ne fonctionne que sur les Corps Volumique ou Surfaciques. Or "REFSURFACE" pointe sur la fonction qui a créée le corps, pas le corps lui même. Le fait que le corps surfacique à le même nom que la fonction, pourrait expliquer que ca fonctionnait quand même avec 2016.

Ceci fonctionne pour moi sur 2020:

Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim boolstatus As Boolean
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
boolstatus = swModel.Extension.SelectByID2("Surface-Importée1", "SURFACEBODY", 0, 0, 0, False, 0, Nothing, 0)
Set swFeat = swModel.FeatureManager.InsertScale(swScaleType_e.swScaleAboutCentroid, True, 1.5, 0, 0)
End Sub

Note: les deux dernier termes de la fonction InsertScale ne sont pas pris en compte lorsque le deuxième terme est "True" (échelle uniforme)

3 « J'aime »

Bonjour,

non ca ne fonctionne toujours pas sur 2020

 

Peut tu joindre le fichier ou un fichier de test

Bonjour,

Je confirme que le code de JeromeP fonctionne sur SW2019 donc devrait fonctionner sur SW2020.

1 « J'aime »

Bonjour, ci joint mon code et ma piece que j'ouvre est une surface importée.

format xt

 

Sub main()

Set swApp = Application.SldWorks

Set ModelDoc = swApp.ActiveDoc

Set Part = swApp.ActiveDoc


line100:
'--------------------------------------------------------------------------------------------------------------------
Dim choix_matiere As String
Dim coef_echelle As Double
choix_matiere = InputBox("Quelle est la matiere ? 1-APET  2-PS  3-PP")
If choix_matiere = "1" Then coef_echelle = 1.004
If choix_matiere = "2" Then coef_echelle = 1.006
If choix_matiere = "3" Then coef_echelle = 1.015
If choix_matiere <> "1" And choix_matiere <> "2" And choix_matiere <> "3" Then
    MsgBox ("Entrer soit 1, 2 ou 3 seulement")
    GoTo line100
End If

'creation de l'échelle
Dim myModelView As Object

boolstatus = Part.Extension.SelectByID2("Surface-Importée1", "SURFACEBODY", 0, 0, 0, False, 0, Nothing, 0)
Dim fonction_echelle As SldWorks.Feature
Set fonction_echelle = Part.FeatureManager.InsertScale(swScaleType_e.swScaleAboutCentroid, True, coef_echelle, coef_echelle, coef_echelle)

En utilisant ton code tel quel, ca fonctionne très bien pour moi.

Peut être vérifier que la surface est bien sélectionnée avec:

MsgBox "Sélection: " & boolstatus

 

1 « J'aime »

Bonsoir,

Alors ce que j'ai testé et constaté, si la surface importée est une surface complexe (i.e.: quasi fermée) la macro ne fonctionne pas (Set fonction_echelle  retourne Nothing).

En enregistrant la macro et en faisant la manipulation, il m'enregistre bien un code équivalent mais ne fonctionne pas plus et retourne Nothing également.

Edit: ça fonctionne sur une surface décalée à partir d'un modèle volumique, ça ne fonctionne pas sur des surfaces importées. Probablement une régression si ça fonctionnait avant.