Dans une macro qui permet de sauvegarder des fichiers d'import, comment gérer si l'utilisateur clique sur le bouton "Annuler" dans la fenêtre "Enregistrer sous"?
L'API RunCommand permet de lancer des commandes SW mais tu ne peux pas avoir de retour. c'est comme si tu cliquais manuellement sur le bouton manuellement dans SW
Pourquoi tu ne lance pas toi même une boite de dialogue enregistrer-sous et ensuite tu utilise l'api SaveAs Method (IModelDocExtension) pour exporter ton fichier.
Pas assez de connaissances en VBA, du coup je ne vois pas trop comment lancer cette boîte de dialogue tout seul, et en regardant l'aide API SW, je ne suis pas plus avancé.
J'aurai besoin d'en connaître un peu plus sur la méthode à suivre.
Si je regarde dans l'aide de SW, il n'y a pas grand chose : http://help.solidworks.com/SearchEx.aspx?q=dialog+box+vba&sort=&version=2018&lang=English&prod=api&context=LANG%3den%26NRESULTS%3d25
Comme l'a dit prossignol, il faut que tu utilise l'api SaveAs Method (IModelDocExtension) pour exporter ton fichier. Pour la boite de dialogue tu peux juste faire un msgBox avec choix et traiter ce qu'il faut faire suivant le retour de l'utilisateur. Voici en exemple ce que tu peux faire dans ta macro dans l'action pour une pièce
ElseIf (swModel.GetType = swDocPART) Then
swModel.SetTitle2 "$PRP:SW-File Name"
Dim namePRT As String
Dim chemin As String
chemin = "D:\Etude\Commerce\"
namePRT = chemin & swModel.GetTitle & ".sldprt"
If MsgBox("Voulez-vous sauvegarder cette pièce ?", vbYesNo, "Enregistrement") = vbYes Then
swModel.SaveAs namePRT
End If
End If
Merci pour ces réponses, mais je souhaite garder l'ouverture de la fenêtre avec l'explorateur windows car il y a une arborescence dans ce dossier "Commerce" pour y ranger les composants.
Désolé, mais pour le moment, je ne vois pas de meilleure réponse....
Il y a possibilité dans ce cas d'ouvrir un "explorateur" sans utiliser la fenêtre de dialogue de SW. C'est quelque chose de plus générique et qui permet de naviguer dans l'arborescence.
dans ce cas, je suis preneur du bout de code, car même si je suis parvenu à une solution avec des msgbox, une solution générique me conviendrait bien....
Tu peux aussi utiliser un BrowserForFolder pour permettre à l'utilisateur de choisir le dossier de destination :
ElseIf (swModel.GetType = swDocPART) Then swModel.SetTitle2 "$PRP:SW-File Name"
Dim namePRT As String
Dim chemin As String
chemin = "D:\Etude\Commerce\"
If MsgBox("Voulez-vous sauvegarder cette pièce ?", vbYesNo, "Enregistrement") = vbYes Then
Dim objShell As Shell
Dim ssfWINDOWS As Long
Dim objFolder As Folder
Set objShell = New Shell
Set objFolder = objShell.BrowseForFolder(0, "SelectDossiers", 0, chemin)
If (Not objFolder Is Nothing) Then
namePRT = objFolder & "\" & swModel.GetTitle & ".sldprt"
swModel.SaveAs namePRT
End If
End If
End If
Attention, il faut mettre "Microsoft Shell Controls And Automation" dans les références du projet.