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
-
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.