Comment sortir de la macro?

Bonjour,

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"?

Détails de la macro:

Sub main()

.....

        swApp.SetCurrentWorkingDirectory "D:\Etudes\Commerce" 'chemin
        swApp.RunCommand SwCommands.swCommands_SaveAs, ""

'si bouton "annuler" cliqué par utilisateur, alors exit sub aussi non continuer la macro.

...

end sub

Merci d'avance pour les conseils et réponses
 

Bonjour, 

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.

A+

Philippe 

Merci pour la réponse...

Je manque de compétences VBA pour tout bien comprendre ce que tu me conseilles, mais je vais regarder cela de plus près.

A+

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.

Merci.

Salut,

Poste ton code.

Voilà le code dans un fichier txt.


save_import.txt

Salut,

@ prossignol :

Comment doit don lancer la boite de dialogue ?

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

Bonjour,

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

Tu trouveras sur le lien : https://www.excel-pratique.com/fr/vba/boites_de_dialogue.php des informations complémentaires sur les possibilités des boites de dialogues en VBA.

Cordialement,

1 « J'aime »

Bonjour,

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

Cordialement.

Bonjour,

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.

Bonjour,

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

Cordialement.

Bonjour,

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.

Cordialement,

1 « J'aime »