Macro : reconstruire en boucle (toutes les 5 secondes)

Bonjour,

Je suis à la recherche d'une macro afin de reconstruire une pièce automatiquement toutes les 5 secondes.

Pour l'instant j'ai une macro qui me permet de reconstruire une pièce, mais impossible d'ajouter une boucle identique à VBA.

Voici le code pour reconstruire:

Dim swApp As Object
               Dim Part As Object
               Dim boolstatus As Boolean
               Dim longstatus As Long, longwarnings As Long
Sub main()
               Set swApp = _
               Application.SldWorks
               Set Part = swApp.ActiveDoc
               boolstatus = Part.EditRebuild3()
End Sub

 

Voici ma boucle (type VBA):

Sub time()

Application.OnTime Now + TimeValue("00:00:0"), "main"

Application.OnTime Now + TimeValue("00:00:05"), "time"

End Sub

 

Comment puis-je adapter cette boucle à Solidworks, ou bien est-ce qu'il existe un autre moyen ?

 

Merci pour votre aide

Bonjour,

Je ne pense pas que je serai le seul à me poser cette question, mais qu'elle est l'intérêt de reconstruire toutes les 5sec?? par ce que ca ne laisse aucune place / temps pour travailler sur la pièce.

Perso je préfère utiliser la touche B (alt+B par défaut) et le Ctrl + Q qui est plus complet.

3 « J'aime »

Je me sers de Solidworks comme écran de contrôle afin de télécommander une machine qui est n'est pas "visible".

Je veux connaître la position et les mouvements de cette machine. Pour cela j'ai créé une cinématique pilotée par des équations qui me permet de visualiser tous les mouvements. Ma cinématique est mise à jour toutes les 5 secondes, mais je dois cliquer à chaque fois sur reconstruire pour visualiser les mouvements et j'aimerais que cela soit automatique.

Ok s'est un détournement du logiciel en quelque sorte vu que SW n'est pas fait pour être un HMI à la base, mais pourquoi pas tant que vous arrivez à récupérer les positions réels. 

D'ailleur comment faite vous, via raison sur l'automate machine par exemple?

Désolé pour ces question mais s'est plus pour comprendre le pourquoi du comment et ceux qui passeront par la suite sur votre post.

Est-ce normal que ligne " Application.OnTime Now + TimeValue("00:00:05"), "time" " soit situé entre " Sub time()" et " End Sub" ?

Du peu que je pratique le VBA, j'ai l'impression que la fonction "time" s'appelle elle-même.

FUZ3D, des codeurs me permettent de récupérer les données. désolé je ne peux pas aller plus en détail, soucis de confidentialité.

stefbeno, cela me permet justement de tournée en boucle

Bonjour @ f.michaud

je fais un petit HS

[HS On]

Attention à ne pas saturer la mémoire car risque de plantage. Lorsque l'on utilise trop longtemps SW avec de la cinématique et des reconstructions fréquentes, SW fini par planté et souvent aussi au passage de corrompre le fichier ASM. Tu a intérêt à avoir un double de ton ASM. ;-)

A l'occasion dis nous si cela fait sur ta machine ce que je décris.

[HS /Off]

Cordialement

Bonjour, 

pour faire une boucle toutes les 5 secondes je vous propose ce code:

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Dim oldTime As Date
Dim newTime As Date

Sub main()
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    
    oldTime = Time
    newTime = Time
    
    Do While 1 = 1:
        If newTime > oldTime + "0:00:05" Then
            boolstatus = Part.EditRebuild3()
            oldTime = Time
            
        Else: newTime = Time
        
        End If
        
    Loop
        
End Sub

 

Néanmoins je ne pense pas qu'il est possible d'intéragir avec solidworks lorsqu'une macro tourne en boucle.

En espérant que ça puisse vous dépanner.

 

Gauthik

1 « J'aime »

Bonjour,

Vous penser qu'avec un gros fichier ca peut remplacer le chauffage ?

Ok je sort :-)

2 « J'aime »

Bonjour,

Sur un petit fichier il y a ça qui doit pouvoir fonctionner :

Dim swApp As Object
Dim Part As ModelDoc2
Dim boolstatus As Boolean
Dim PauseTime, Start

Sub main()
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    If Part Is Nothing Then
        MsgBox "Aucun fichier n'est chargé dans SW."
        Exit Sub
    End If
    Do While Part.GetTitle <> ""
        PauseTime = 5
        Start = Timer
        Do While Timer < Start + PauseTime
            DoEvents
        Loop
        Set Part = swApp.ActiveDoc
        If Part Is Nothing Then
            MsgBox "Traitement terminé."
            Exit Sub
        Else
            boolstatus = Part.EditRebuild3()
        End If
    Loop
End Sub

Mais je n'ai pas essayé sur un gros fichier qui met plus de 5 secondes de reconstruction ...

Cordialement,

2 « J'aime »

 d.roger, merci beaucoup ça marche parfaitement !!!

Gauthik67, merci mais lorsque je lance la macro, solidworks plante instantanément.

Zozo_mp, je pends note merci, cependant ma pièce est seulement constituée d'une seule esquisse donc assez légère.

Bien vu d.roger, c'est le "DoEvents" qui manquait à mon code ! Je ne savais pas que ça existait, on en apprend tous les jours ! :)

2 « J'aime »

Bonjour,

Il ne reste donc plus qu'à valider la réponse t'ayant le plus aidé à résoudre ton problème.

Cordialement,

1 « J'aime »