Modification de la valeur d'une variable globale via une macro sur solidworks

bonjour,

J'utilise une boite de dialogue  de type inputbox pour demander la hauteur d'un élément (valeur enregistrée sous Hauteur)

J'aimerai que ma variable globlale qui s'appelle également Hauteur prenne cette valeur via une macro. Quelle ligne de code permet cela ? 

merci de votre retour

Bonjour, 

Ce Code devrait t'aider. 

Bonjour,

je suis désolée mais je tourne en rond. Je n'y arrive pas. J'ai épluché le code, mais je n'y comprends pas grand chose... j'avoue qu'un coup de main serait appréciable.

Dim Hauteur_Value As Integer

Dim Hauteur As Double

Hauteur_Value = InputBox("Merci d'indiquer la Hauteur .... ")

J'ai donc une variable globale qui s'appelle "Hauteur". Et je souhaite juste que cette variable prenne la nouvelle valeur (Hauteur_Value).

Merci de vos lumières

Bonjour, 

Ci joint une approche, (pour introduire des décimal il faut utiliser la vergule non pas le point), 

Par contre la fonction sélectionnée semble fonctionner qu'avec les entiers !? . 

 


img_20210915_164115.jpg
1 « J'aime »

Bonjour,

EDIT : suppression du code car doublon avec la réponse de @Lynk

Cordialement,

Bonjour,

Après quelques cafouillements dans ma réponse précédente voici un code fonctionnel sur la base de celui de Lynk mais qui permet de mettre une valeur décimale, valeur qui peut être saisie dans le InputBox soit avec un point soit avec une virgule :

Dim Variable As String
Dim Hauteur_Value As String
Dim ValeurText As String

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2

Sub main()
    Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc
    
    Variable = "hauteur"

    Hauteur_Value = InputBox("Merci d'indiquer la Hauteur .... ")
    Hauteur_Value = Replace(Hauteur_Value, ".", ",")
    If IsNumeric(Hauteur_Value) Then
        ValeurText = Replace(Hauteur_Value, ",", ".")
    Else
        MsgBox "Valeur invalide"
        Exit Sub
    End If
    
    If Not swModel Is Nothing Then
        Dim swEqMgr As SldWorks.EquationMgr
        Set swEqMgr = swModel.GetEquationMgr
        If SetEquationValue(swEqMgr, Variable, ValeurText) Then
            swModel.ForceRebuild3 True
        Else
            MsgBox "Failed to find the equation " & name
        End If
    Else
        MsgBox "Please open the model"
    End If

End Sub

Function SetEquationValue(eqMgr As SldWorks.EquationMgr, name As String, value As String) As Boolean
    Dim index As Integer
    index = GetEquationIndexByName(eqMgr, name)
    If index <> -1 Then
        eqMgr.Equation(index) = """" & name & """=" & """" & ValeurText & """"
        SetEquationValue = True
    Else
        SetEquationValue = False
    End If
End Function

Function GetEquationIndexByName(eqMgr As SldWorks.EquationMgr, name As String) As Integer
    Dim i As Integer
    GetEquationIndexByName = -1
    For i = 0 To eqMgr.GetCount - 1
        Dim eqName As String
        eqName = Trim(Split(eqMgr.Equation(i), "=")(0))
        eqName = Mid(eqName, 2, Len(eqName) - 2)
        If UCase(eqName) = UCase(Variable) Then
            GetEquationIndexByName = i
            Exit Function
        End If
    Next
End Function

Cordialement,

1 « J'aime »

Un grand merci à vous 2 de votre retour.

Roger, c'est top ce que tu m'as envoyé. Juste 2 correctifs à apporter :

If UCase(eqName) = UCase(name) Then  '********************** au lieu de Variable

eqMgr.Equation(index) = """" & name & """=" & """" & Value & """"                    '***************************au lieu de ValeurText

 

core merci !