Bonjour à tous,
Je recherche depuis un moment un bout de code VBA pour solidworks 2024 qui réalise l’opération suivante :
clique sur « outils » → « équations » → « ok » dans la fenêtre des équations, le but étant de forcer l’exécution de mes équations qui ne s’actualise pas correctement avec le rebuild mais bien avec cette méthode, c’est pour l’intégrer dans un code plus vaste déclenché depuis un assemblage de plus au niveau.
D’avance merci si vous avez l’info.
Guillaume.
J’ai ce code qui corespond à une reconstruction profonde (Shift + CTR + Q).
Reconstruction qui n’est pas identique si on lance une fonction VBA traditionnel (vu avec Visiativ).
Là sur SW 2023 cela fonctionnait très bien.
'Lance l'ID pour le racourcis CTRL+SHIFT+Q = reconstruction profonde
Sub ForceRebuildSD()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox "Aucun document ouvert.", vbExclamation
Exit Sub
End If
' Ctrl+Shift+Q via ID de commande exact (SolidWorks 2023)
swApp.RunCommand 3311, ""
End Sub
Si non fonctionnel possibilité de chercher l’ID de commande exact pour équation puis valider.
Bonjour ;
Les API de Solidworks proposent ceci :
'-----------------------------------------------------
' Preconditions:
' 1. Verify that the specified part to open exists.
' 2. Open the Immediate window.
'
' Postconditions:
' 1. Sets the equation's Automatic solve order option
' to true, which results in the model's
' independent equations executing before
' dependent equations, if any.
' 2. Examine the Immediate window.
'
' NOTE: Because this model is used elsewhere,
' do save changes.
'-----------------------------------------------------
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swEquationMgr As SldWorks.EquationMgr
Dim fileName As String
Dim errors As Long, warnings As Long
Sub main()
Set swApp = Application.SldWorks
fileName = "C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2018\samples\tutorial\api\partEquations.sldprt"
Set swModel = swApp.OpenDoc6(fileName, swDocumentTypes_e.swDocPART, swOpenDocOptions_e.swOpenDocOptions_Silent, "", errors, warnings)
Set swEquationMgr = swModel.GetEquationMgr
'Make sure that this model includes equations
'by getting the number of equations
Debug.Print "Number of equations: " & swEquationMgr.GetCount
If swEquationMgr.GetCount >= 1 Then
'Get whether equations are automatically
'solved in sequence
Debug.Print " Are equations automatically solved in sequence? " & swEquationMgr.AutomaticSolveOrder
If swEquationMgr.AutomaticSolveOrder Then
Exit Sub
Else
'Automatically solve equations in sequence
swEquationMgr.AutomaticSolveOrder = True
Debug.Print " Are equations automatically solved in sequence? " & swEquationMgr.AutomaticSolveOrder
End If
Else
Debug.Print "No equations included with this model."
End If
End Sub
1 « J'aime »
Merci ! Pour les rebuild j’ai tout tenté mais ça ne fonctionne pas comme je veux. Je reconstruit depuis un assemblage de tête et à un certain niveau d’arborescence ça ne se comporte pas comme je veux. Par contre dès que j’ouvre le module équation de l’élément concerné et valide tout devient correct. Et je cherche a ce que cette opération en soit pas réalisée comme ça mais par un opérateur qui doit utiliser mon configurateur sans ce poser ce genre de questions. Il ne saura même pas forcément identifier les pièces non recalculées. Et quand j’essaie avec l’enregistrement de macro il ne me sort aucun code de mes opérations…
Merci ! je suis en effet tombé sur cette page aussi. Ce n’est pas forcément ce que je recherche mais je réfléchis si je peux utiliser ça de manière détournée. Est-ce que en l’utilisant il va forcément faire exécuter les équations qu’il trouve ? Je n’arrive pas à être sûr.
Sinon voici ci-joint une macro pour connaitre l’ID d’une commande. (Merci CodeStack)
Capturing commands.swp (39,5 Ko)
Il suffit de lancer le main dans Capturing_commands1.
Puis appuyer sur ton menu équation pour découvrir l’ID caché de la fonction ici l’ID=51 pour ton menu (sw2023).
Ensuite tu lances le code pour lancer l’ID dans LancerCommande:
Sub LancerCommande()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox "Aucun document ouvert.", vbExclamation
Exit Sub
End If
' Ctrl+Shift+Q via ID de commande exact (SolidWorks 2023)
swApp.RunCommand 51, ""
End Sub
Testé sur SW2023, la fenêtre équation s’ouvre et se ferme.
Merci beaucoup pour ton outil. J’avoue ne pas être expert dans le domaine ni être sûr de comprendre ce que je dois faire.
J’ai exécuté ta macro dans ma pièce, ça ouvre bien la fenêtre équation mais cela ne la ferme pas. Et je n’arrive pas récupérer du coup l’ID de l’opération qui clique sur OK.
Effectivement je viens d’essayer de nouveau et la fenêtre n’est pas validé.
Et pas de commande existante pour faire ok…
Tu peux tester cela, en ajoutant:
swApp.RunCommand 961, "" 'A la suite de swApp.RunCommand 51...
Cela fait un ESC (peut-être suffisant pour ton cas car il suffit en général d’ouvrir cette fenêtre pour résoudre ce bug connu des équations (même en faisant annulé, comme ici)
Si c’est pas fonctionnel, teste avec :
DoEvents
SendKeys "~" ' ENTER = OK
Ne pas tester depuis l’éditeur sinon le enter se fait dans l’éditeur et pas dans la fenêtre SW… Attention solution très moyenne pour la 2nde (mais probablement fonctionnel)
Attention, je ne sais pas si ça le fait chez-vous, mais, pour moi, la commande « SendKeys », en vba, à la fâcheuse habitude de me désactiver la touche Verr-Num (et donc plus de pavé numérique …