Macro Equation

Rebonjour à tous,

désolé de publier sans tester, donc je donne suite

 

 

Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

 

 

Sub Gestion()

  AffectationPrincipauxObjets

'Gestion de la Hauteur du fond

  If Test("D1@Esq1", "500") Then

    boolstatus = swModel.EditRebuild3()

  Else

    MsgBox " Problème"

  End If

 

'Largeur...

'Profondeur...

'Epaisseur...

 

End Sub

 

Sub AffectationPrincipauxObjets() 'Peut être placé dans un autre module sans PB

  Set swApp = Application.SldWorks

  Set swModel = swApp.ActiveDoc

 'Set= .....

End Sub

 

Function Test(NomVar As String, ValVar As String) As Boolean 'Peut être placé dans un autre module sans PB

  Dim swEquationMgr As SldWorks.EquationMgr

  Dim vSplit As Variant

  Set swEquationMgr = swModel.GetEquationMgr

  Test = False

  For i = 0 To swEquationMgr.GetCount - 1

    vSplit = Split(swEquationMgr.equation(i), "=")

    vSplit(0) = Replace(vSplit(0), Chr(34), Empty)

    vSplit(0) = Replace(vSplit(0), Chr(32), Empty)

    If vSplit(0) = NomVar Then

      swEquationMgr.equation(i) = Replace(swEquationMgr.equation(i), vSplit(1), ValVar)

      Test = True

      Exit Function

    End If

  Next i

End Function

 

Je viens de tester et retravailler vite fait ce code à toi JB de le 'mettre à ta sauce'.

Faire appel à des functions (ici Test)  avec passage d'arguments ( ici NomVar et ValVar) te permet de ranger tes affaires dans plusieurs modules. Concernant la sub intitulée Gestion, je l'a vois bien dans un module de ta UserForm, à voir.

 

Cordialement MC

Bonsoir à tous,

 

Je reviens sur la phrase "Concernant la sub intitulée Gestion, je l'a vois bien dans un module de ta UserForm, à voir." de mon dernier mot. Il faut savoir que ta [UserForm1.TextBox2.Value] ( la valeur du contrôle de Nom 'TextBox2' de ta boite de dialogue personnalisée de Nom 'Userform1') n'a pas une grande portée (voir portée de l'aide API). Elle ne sera pas connue si tu l'appelles à partir d'un code placé dans un autre module que celui associé à ta [UserForm1]. Bon maintenant c'est le cas pour une macro dans Word mais je n'ai pas vérifié avec SW. Pour finir [UserForm1] et [TextBox2] sont des noms par défaut, il serait judicieux quand tu crées une boite de dialogue de les renommer de suite, par exemple [UserForm1] renommer en [BDChoisirFond] et [TextBox2] renommer en [HauteurFond]. Je sais c'est titiller mais ton code n'en sera que plus claire.

 

Bonne Prog

 

A+

 

MC

Maxime,

 

Est-ce normale que cette macro ne fonctionne que dans un fichier pièce et pas dans une pièce édité d'un assemblage?

 

La boucle ne se fait pas dans une pièce édité:

For i = 0 To swEquationMgr.GetCount - 1
    vSplit = Split(swEquationMgr.Equation(i), "=")
    vSplit(0) = Replace(vSplit(0), Chr(34), Empty)
    vSplit(0) = Replace(vSplit(0), Chr(32), Empty)
    If vSplit(0) = NomVar Then
        swEquationMgr.Equation(i) = Replace(swEquationMgr.Equation(i), vSplit(1), ValVar)
        Modif_equation = True
        Exit Function
    End If
Next i

 

merci,