Désactiver le bouton "annuler" de la fenêtre "saveas"

Bonjour à tous,

Avant de poser ma question je voulais remercier tous les contributeurs du site et du forums qui m'auront (sans le savoir) grandement aidé dans la réalisation de mon fichier.

Avant de poser ma question je vais vous présenter un peu le cadre de mon problème. Mon fichier permet de saisir via plusieurs userform des notes de frais dans une feuille excel. Une fois la saisie réalisée je procède au save as de la feuille en question (dans le répertoire que choisi l'utilisateur), supprime les boutons d'appel de la macro, par les commandes suivantes :

Dim chemin As String, Fichier As String
Sheets("frais").Copy
ActiveSheet.DrawingObjects(Array(1, 2, 3)).Delete
Fichier = Sheets("frais").Range("Nomfichier") & ".xlsx"
Application.Dialogs(xlDialogSaveAs).Show Fichier

Jusqu'ici tout va bien. Le problème c'est que je souhaite ensuite envoyer le fichier ainsi sauvegardé par mail. La encore pas de problème le code fonctionne j'ai tout ce qu'il me faut.

Dim ObjOutlook As New Outlook.Application
        Dim oBjMail
            Set ObjOutlook = New Outlook.Application
            Set oBjMail = ObjOutlook.CreateItem(olMailItem)
            With oBjMail
                .To = "xxxxxx@xxxxx.com"
                .Subject = Range("Nomfichier")
                .Body = "Blabla"
                .Attachments.Add ActiveWorkbook.FullName
                .Display
                .Send
            End With

Le problème est que lors du lancement de la boite de dialogue "saveas" il reste la possibilité pour l'utilisateur d'annuler. Dans un tel cas je plante la macro car le nouveau fichier n'étant pas sauvegardé, ne peut être envoyé.

Est-il possible alors de désactiver la commande "annuler" de la boite de dialogue? ou de faire une boucle/erreur si annuler est choisi?

Si oui comment, et si non, je pense que je contournerais en laissant cette option de sauvegarde "au choix" et en parallèle ferais une sauvegarde "en douce" du fichier pour envoi puis le supprimerait (toujours en douce).

Merci d'avance de vos contributions.

Bonjour,

en supposant que la pièce jointe puisse être au format .pdf le fichier joint pourrait te convenir.

Si la commande "Annuler" est utilisée lors de la sauvegarde il y a un message d'erreur qui s'affiche obligeant l'utilisateur à faire la sauvegarde sinon le mail ne pourra pas être crée.

à te relire

Bonjour,

Merci pour ta réponse,

Grâce à ton fichier j'ai pu effectivement procéder comme je le voulais en testant que le nom du fichier actif était égal au nom que je lui donnait via mon VBA. Le test fonctionne donc comme suit pour moi :

Sub SAVESEND()
Dim chemin As String, Fichier As String
Sheets("frais").Copy
ActiveSheet.DrawingObjects.Delete
Fichier = Sheets("frais").Range("Nomfichier") & ".xlsx"
Application.Dialogs(xlDialogSaveAs).Show Fichier

Dim Comm As String
    If MsgBox("Envoyer la note de frais?", vbYesNo + vbQuestion + vbApplicationModal, "Envoi") = vbYes Then
        Do While Fichier <> ActiveWorkbook.Name
        MsgBox "Il est necessaire de sauvegarder le fichier afin de procéder à l'envoi par mail", vbOKOnly + vbExclamation
        Application.Dialogs(xlDialogSaveAs).Show Fichier
        Loop
            If MsgBox("Ajouter un commentaire?", vbYesNo + vbQuestion + vbApplicationModal, "Commentaire") = vbYes Then
                  Comm = "Il est à noter que :" & Chr(10) & Chr(10) & InputBox("Saisissez votre commentaire", "Commentaire") & Chr(10) & Chr(10)
            End If
        Dim ObjOutlook As New Outlook.Application
        Dim oBjMail
        Set ObjOutlook = New Outlook.Application
        Set oBjMail = ObjOutlook.CreateItem(olMailItem)
            With oBjMail
                  .To = "xxxx@xxxxxxx.com"
                  .Subject = Range("Nomfichier")
                  .Body = "blabla" & comm
                  .Attachments.Add ActiveWorkbook.FullName
                  .Display
                  .Send
             End With
        ActiveWorkbook.Close
    Else
    ActiveWorkbook.Close
    End If
End Sub

Le seul inconvénient est que j'oblige l'utilisateur à utiliser le nom de fichier que j'ai défini. Du coup la moindre différence ne sera pas tolérée. Ce qui en soit est un peu trop restrictif. Du coup je pense que je vais faire comme toi et ne pas "aider" au nommage du fichier.

Merci pour ton aide. Me restera plus qu'a faire les tests complémentaires. Mais je devrais arriver à m'en sortir (pour le moment^^)

Bien cordialement,

Re-Bonjour,

Pour contourner le problème j'ai procédé au test suivant :

Do While Left(ActiveWorkbook.Name, 8) = "Classeur" Or Left(ActiveWorkbook.Name, 8) = "Workbook"
        MsgBox "Il est necessaire de sauvegarder le fichier afin de procéder à l'envoi par mail", vbOKOnly + vbExclamation
        Application.Dialogs(xlDialogSaveAs).Show Sheets("frais").Range("Nomfichier") & ".xlsx"
        Loop

Et ça me donne bien le résultat attendu. Maintenant j'ai un autre problème mais non lié à ce sujet (le dtpicker qui ne marche pas sur les autres utilisateurs...)

Merci encore pour ton aide.

Cordialement

Rechercher des sujets similaires à "desactiver bouton annuler fenetre saveas"