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 FichierJusqu'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 WithLe 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 SubLe 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"
LoopEt ç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