Problème avec une macro VBA pour exporter et ouvrir un fichier STEP avec Bamboo Studio

Bonjour à tous,

Je travaille actuellement sur une macro VBA dans SolidWorks 2017 visant à exporter une pièce au format STEP et à l’ouvrir automatiquement avec Bamboo Studio. Cependant, malgré mes efforts, la macro ne fonctionne pas comme prévu et je rencontre des difficultés avec la fonction d’enregistrement au format STEP.

Voici la version actuelle de ma macro :

Sub ExportAndOpenWithBambooStudio()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim partDoc As SldWorks.partDoc
    Dim stepFileName As String
    Dim bambooStudioPath As String
    
    ' Chemin du fichier STEP exporté
    stepFileName = "mon chemin \Exporte.step"
    
    ' Chemin vers Bamboo Studio
    bambooStudioPath = "C:\Program Files\Bambu Studio.exe"
    
' Initialisation de l'application SolidWorks
    Set swApp = CreateObject("SldWorks.Application")
    
    ' Vérifier si SolidWorks est en cours d'exécution
    If swApp Is Nothing Then
        MsgBox "SolidWorks n'est pas en cours d'exécution. Veuillez démarrer SolidWorks et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Vérifier si un document est ouvert dans SolidWorks
    If swApp.ActiveDoc Is Nothing Then
        MsgBox "Aucun document n'est ouvert dans SolidWorks. Veuillez ouvrir un document et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Récupérer le modèle actif
    Set swModel = swApp.ActiveDoc
    
    ' Vérifier si le document est une pièce (part)
    If swModel.GetType <> swDocPART Then
        MsgBox "Le document actif n'est pas une pièce (part). Veuillez ouvrir une pièce et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Convertir le document en objet de pièce
    Set partDoc = swModel
    
    ' Exporter le modèle au format STEP
    If Not SaveAsSTEP(partDoc, stepFileName) Then
        MsgBox "Erreur lors de l'enregistrement de la pièce au format STEP.", vbExclamation
        Exit Sub
    End If
    
    ' Fermer le modèle sans enregistrer les modifications
    swModel.CloseDoc
    
    ' Ouvrir le fichier STEP avec Bamboo Studio
    OpenWithBambooStudio bambooStudioPath, stepFileName
End Sub

Function SaveAsSTEP(ByVal partDoc As SldWorks.partDoc, ByVal stepFileName As String) As Boolean
    On Error Resume Next
    Dim docExt As SldWorks.ModelDocExtension
    Set docExt = partDoc.Extension
    docExt.SaveAs stepFileName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Empty, Empty, Empty
    SaveAsSTEP = (Err.Number = 0)
    On Error GoTo 0
End Function

Sub OpenWithBambooStudio(ByVal bambooStudioPath As String, ByVal stepFileName As String)
    On Error Resume Next
    Dim objShell As Object
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run """" & bambooStudioPath & """ """ & stepFileName & """", vbNormalFocus
    Set objShell = Nothing
    On Error GoTo 0
End Sub

J’ai déjà essayé plusieurs approches, y compris l’utilisation de différentes méthodes pour l’enregistrement au format STEP, mais sans succès. Je reçois continuellement le message d’erreur « Erreur lors de l’enregistrement de la pièce au format STEP. »

Si quelqu’un a de l’expérience avec les macros SolidWorks ou a des idées sur la manière de résoudre ce problème, je serais très reconnaissant pour toute aide.

PS : J’ai juste des bases en code, et le code a été généré avec l’aide de ChatGPT.

Merci d’avance !

Cordialement,

Bonjour,
Le problème est dans le chemin d’enregistrement du fichier step. La ligne ci-dessous ne peut pas fonctionner car elle ne pointe sur aucun chemin d’accès.

stepFileName = "mon chemin \Exporte.step"

Faut remplacer par un chemin de type C:.…
Si ensuite les fichiers doivent être enregistrés en step avec le nom de fichier ouvert ou des propriétés de celui-ci faut un code un peu plus « complexe » que celui proposé par Chat GPT

2 « J'aime »

Bonjour Cyril,

Merci de votre réponse.
Dans mon code j’ai bien mis le bon chemin que j’ai changer dans le poste ici pour des question de confidentialité.

Re,
Essayez en changeant cette ligne:

    docExt.SaveAs stepFileName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, 0, 0

1 « J'aime »

Bonjour,

Bonne année à vous. J’ai cherché comment résoudre l’erreur « Erreur lors de l’enregistrement de la pièce au format STEP », et voici ce que j’ai trouvé… a tester, et comme toujours, sans garantie que ca marche mais tester quand même :blush:

  • Vérifier les données du fichier STEP : Cette erreur peut être due à des données problématiques dans le fichier STEP. Vous pouvez essayer de désactiver l’option « Interconnexion 3D » dans les options système de SolidWorks pour contourner ce problème
    Voici un lien en anglais pour vous aider: Erreur d'index d'enregistrement invalide lors de l'importation de STEP dans SOLIDWORKS

  • Lors de l’exportation au format STEP, assurez-vous que les options d’export sont correctement définies. Cela peut inclure des paramètres tels que la sortie en tant que géométrie volumique/surfacique ou l’exportation des entités d’esquisse
    Options d'export STEP - 2022 - Aide de SOLIDWORKS

  • Si le problème persiste, vous pouvez utiliser les outils de débogage VBA pour examiner le comportement de la macro. Cela peut vous aider à identifier la source de l’erreur et à apporter les corrections nécessaires.
    VBA Debugger - The CAD Coder

D’autre part, vous pouvez également tenter avec les solutions suivantes:

  • D’abord, vérifiez si vous avez les autorisations nécessaires pour enregistrer des fichiers dans le répertoire spécifié. Parfois, des restrictions de sécurité peuvent empêcher l’enregistrement des fichiers.

  • ChatGPT utilise On Error Resume Next dans votre fonction SaveAsSTEP, ce qui signifie que si une erreur se produit, le code continue d’exécuter la ligne suivante. Cela peut rendre difficile la détermination de l’endroit exact où l’erreur se produit. Vous pourriez envisager d’utiliser On Error GoTo pour diriger le flux d’exécution vers une étiquette spécifique en cas d’erreur, où vous pouvez afficher des informations détaillées sur l’erreur.

  • La méthode SaveAs renvoie un booléen indiquant si l’opération a réussi ou non. Vous pouvez utiliser cette valeur de retour pour déterminer si l’opération a réussi et afficher un message d’erreur approprié.
    

Voici un exemple de la façon dont vous pourriez modifier votre fonction SaveAsSTEP pour inclure certaines de ces suggestions :
Function SaveAsSTEP(ByVal partDoc As SldWorks.partDoc, ByVal stepFileName As String) As Boolean
On Error GoTo ErrorHandler
Dim docExt As SldWorks.ModelDocExtension
Set docExt = partDoc.Extension
SaveAsSTEP = docExt.SaveAs(stepFileName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Empty, Empty, Empty)
Exit Function
ErrorHandler:
MsgBox "Erreur lors de l’enregistrement de la pièce au format STEP. Détails de l’erreur : " & Err.Description, vbExclamation
SaveAsSTEP = False
End Function

En espérant vous avoir aidé à avancer
Bien à vous

Re,

Merci pour vos réponses, il y a du mieux !

Quand je lance la macro, je n’ai plus de message d’erreur grâce au code de @Cyril.f , et elle crée un fichier STEP au bon endroit, mais ne l’ouvre pas.

Je n’ai pas bambu studio donc je ne peux pas aider. A voir si ce n’est pas la commande Shell qui pose problème.

A essayer sans ouvrir une pièce voir si BombuStudio s’ouvre ou pas, pour commencer.
Pour info dans ton code tu écris bamboo et le logiciel s’appelle bambuStudio (internet) pour les variables c’est pas grave mais dans le chemin du fichier cela peut-être problématique.

Merci beaucoup pour vos retours.

Ça marche en effet. J’avais fait une petite erreur au niveau du chemin du logiciel.

bambooStudioPath = "C:\Program Files\Bambu Studio.exe"

au lieu de :
bambooStudioPath = "C:\Program Files\Bambu Studio\bambu-studio.exe"

Merci a tous !

1 « J'aime »

Je vous partage le code final si il y a des intéressé :


Sub ExportAndOpenWithBambooStudio()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim partDoc As SldWorks.partDoc
    Dim stepFileName As String
    Dim bambooStudioPath As String
    
    ' Chemin du fichier STEP exporté
    stepFileName = "C:\**CHEMIN ICI**\Exporte.step"
    
    ' Chemin vers Bamboo Studio
    bambooStudioPath = "C:\Program Files\Bambu Studio\bambu-studio.exe"
    
' Initialisation de l'application SolidWorks
    Set swApp = CreateObject("SldWorks.Application")
    
    ' Vérifier si SolidWorks est en cours d'exécution
    If swApp Is Nothing Then
        MsgBox "SolidWorks n'est pas en cours d'exécution. Veuillez démarrer SolidWorks et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Vérifier si un document est ouvert dans SolidWorks
    If swApp.ActiveDoc Is Nothing Then
        MsgBox "Aucun document n'est ouvert dans SolidWorks. Veuillez ouvrir un document et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Récupérer le modèle actif
    Set swModel = swApp.ActiveDoc
    
    ' Vérifier si le document est une pièce (part)
    If swModel.GetType <> swDocPART Then
        MsgBox "Le document actif n'est pas une pièce (part). Veuillez ouvrir une pièce et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Convertir le document en objet de pièce
    Set partDoc = swModel
    
    ' Exporter le modèle au format STEP
    If Not SaveAsSTEP(partDoc, stepFileName) Then
        MsgBox "Erreur lors de l'enregistrement de la pièce au format STEP.", vbExclamation
        Exit Sub
    End If
    
    ' Ouvrir le fichier STEP avec Bamboo Studio
    OpenWithBambooStudio bambooStudioPath, stepFileName
End Sub

Function SaveAsSTEP(ByVal partDoc As SldWorks.partDoc, ByVal stepFileName As String) As Boolean
    On Error Resume Next
    Dim docExt As SldWorks.ModelDocExtension
    Set docExt = partDoc.Extension
    docExt.SaveAs stepFileName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, 0, 0
    SaveAsSTEP = (Err.Number = 0)
    On Error GoTo 0
End Function

Sub OpenWithBambooStudio(ByVal bambooStudioPath As String, ByVal stepFileName As String)
    On Error Resume Next
    Dim objShell As Object
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run """" & bambooStudioPath & """ """ & stepFileName & """", vbNormalFocus
    Set objShell = Nothing
    On Error GoTo 0
End Sub
1 « J'aime »

Bonsoir,
Je n’avais pas fait la remarque mais j’avais un doute sur ce point.