Un simple SaveAs puis joindre l'Excel dans le mail

Mini post parce que ça m'agace de pas trouver et que je commence à manquer un peu de temps pour finir ce projet...

J'ai automatisé un Excel qui crée un document. Avec un bouton je crée mon mail prédéfinit et j'aimerais que une fenêtre s'ouvre pour enregistrer sous l'Excel (pour pas que l'utilisateur écrase la version vierge du programme) Puis une fois sauvegarder joindre le classeur en pièce jointe dans le mail.

Par avance merci de vos réponses j'espère trouver une solution !

A+

PS: La macro s'active avec le clic image de l'enveloppe

Bonjour,

Pour ne pas que l'utilisateur modifie ta trame vierge, le mieux (à mon humble avis), est de l'enregistrer en tant que modèle. L'utilisateur n'ouvrira donc qu'une copie de ce document, qu'il devra de toute façon obligatoirement enregistrer sous, ou fermer sans enregistrer si au final pas besoin.

Ah ouais ! trop bien je savais pas que l'on pouvais enregistrer Excel avec ce format ça va m'aider sur pleins de choses.

Merci JoyeuxNoel ! Je crois que j'en ait finit pour ce projet

Je ne travaille quasiment plus que comme ça maintenant et je ne le regrette pas franchement.

@JoyeuxNoel je suis obligé de refaire un msg j'ai tjrs un problème :-(

Quand j'ouvre mon modèle Excel, je veux donc envoyer un mail et joindre le classeur Actif

Donc il faut que Avant d'envoyer le mail je sauvegarde mon classeur

Deux option:

• ActiveWorkbook.Save mais du coup j'ai un msg d'erreur que je dois sauvegarder sous le format avec macro blabla c'est nul

• ActiveWorkbook.SaveAs FileFormat:=xlOpenXMLWorkbookMacroEnabled

Pas de msg d'erreur cette fois mais le classeur écrase celui déja éxistant ! je voudrais avoir la boite de dialogue pour choisir mon emplacement... et en bonus pouvoir mettre un nom de classeur prédéfinit (qui reste modifiable par l'utilisateur si besoin)

Help

Re,

Un truc du genre fonctionne bien chez moi.

Sub enregistrement()
Dim W1 As Workbook
Dim chemin as string, chemin_final as String

chemin = "C:\Users\blablabla\Desktop\"
Set W1 = ThisWorkbook

chemin_final = chemin & variable ou cellule que tu veux & "\"
W1.SaveAs Filename:=chemin_final, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

Re merci de la réponse rapide.

Du coup toujours le même problème qu'il faut renseigner un chemin bien précis, on ne peux pas juste avoir la boite de dialogue qui s'ouvre comme si l'on faisait manuellement Ctrl maj s ?.. Comme ca le chemin ne dépend pas du PC de chaq'un puis chaqu'un renomme et place le doc où il veut

Re,

je crois bien que c'est ça :

Application.Dialogs(xlDialogSaveAs).Show

Voila, c'est ce que je cherchais, j'ai trouvé sur internet les arguments pour modifier la boite de dialogue et j'ai parfaitement obtenu ce que je souhaite sauf que maintenant... Mon mail ne contient plus mon classeur en PJ ! Alors que avant ca fonctionnais bien

Bon sang qu-est-ce que ça commence de matière grises Excel

Ton code ressemble à quoi ?

Tu as stocké dans une variable le chemin, pour le remettre dans ton mail ? Si oui, ta variable est accessible par ta sub mail ?

Tout ets dans la même procédure.

Après le saveAs J'utilise dans mon mail .Attachments.Add ActiveWorkbook.FullName donc le ActiveWorkbook devrais être celui que je viens d'enregistrer sous puisqu'il n'y en a que 1 d'ouvert ?

La actuellement dans mon mail est joint la version "vierge" du fichier et non celle que j'ai juste avant sauvegardé

Sub Mail()
Dim i As Integer, s As String
Dim OutApp As Object
Dim OutMail As Object
Dim rng As Object
Dim wdDoc As Object
Dim sPath As String
Dim SigString As String, Signature As String
Dim Texte As String
Dim t As String
t = Range("B36")

Dim ColisDispo As String
If Range("L67") + Range("L69") + Range("L71") + Range("L73") + Range("L75") + Range("L77") > 1 Then
ColisDispo = "Les colis sont préparés et mis à disposition dans la zone d'envoi."
Else
ColisDispo = "Le colis est préparé et mis à disposition dans la zone d'envoi."
End If

Dim W1 As Workbook
Dim chemin As String

chemin = "C:\Users\blablabla\Desktop\"
Set W1 = ThisWorkbook

Application.DisplayAlerts = False

DoEvents
ActiveSheet.Shapes("Picture 4").Visible = False
With Application.FileDialog(msoFileDialogSaveAs) 'Dialogs(xlDialogSaveAs)
.InitialFileName = CStr(Range("V19")) & " Demande de transport.xlsm"
.FilterIndex = 2
.Show
End With
On Error Resume Next
'Prepare le mail
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
Set wdDoc = OutMail.Getinspector.wordeditor

 ' Récupérer le nom du fichier de signature
  sPath = "C:\Users\gpetit\AppData\Roaming\Microsoft\Signatures\"
  SigString = Dir(sPath & "*.htm")
  If SigString <> "" Then
      Signature = GetBoiler(sPath & SigString)
  Else
      Signature = ""
  End If

With OutMail
.to = "Logistique.GROUPE@plastivaloire.com"
.Subject = Range("D8") & " Demande d'expédition du CEss => " & Range("D42")
Texte = "Bonjour," & "<br><br>" & "Trouvez ci-joint une demande d'expédition vers " & Range("D42") & " " & Range("D47") & " correspondante à la Commande DT Eotp " & Right(t, Len(t) - InStrRev(t, " ")) & "." & "<br><br>" & ColisDispo
.htmlbody = Texte & "<br><br>" & Signature
MsgBox ActiveWorkbook.FullName
.Attachments.Add ActiveWorkbook.FullName
.Display
End With
On Error GoTo 0
OutApp.Session.Logoff
Set OutMail = Nothing
Set OutApp = Nothing
Application.DisplayAlerts = True
ActiveSheet.Shapes("Picture 4").Visible = True
ActiveWorkbook.Save

End Sub

Donc en gros version simplifié du code (j'enleve ce qui sert a rien) :

Sub Mail()

chemin = "C:\Users\blablabla\Desktop\"
Set W1 = ThisWorkbook

With Application.FileDialog(msoFileDialogSaveAs) 'Dialogs(xlDialogSaveAs)
.InitialFileName = CStr(Range("V19")) & " Demande de transport.xlsm"
.FilterIndex = 2
.Show
End With
On Error Resume Next
'Prepare le mail
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
Set wdDoc = OutMail.Getinspector.wordeditor

With OutMail
.to = "Logistique.GROUPE@plastivaloire.com"
.Subject = Range("D8") & " Demande d'expédition du CEss => " & Range("D42")
Texte = "Bonjour," & "<br><br>" & "Trouvez ci-joint une demande d'expédition vers " & Range("D42") & " " & Range("D47") & " correspondante à la Commande DT Eotp " & Right(t, Len(t) - InStrRev(t, " ")) & "." & "<br><br>" & ColisDispo
.htmlbody = Texte & "<br><br>" & Signature
MsgBox ActiveWorkbook.FullName
.Attachments.Add ActiveWorkbook.FullName
.Display
End With
On Error GoTo 0
OutApp.Session.Logoff
Set OutMail = Nothing
Set OutApp = Nothing
Application.DisplayAlerts = True
ActiveWorkbook.Save

End Sub
eurêka !
Après mon .show je devais ajouter .execute pour sauvegarder mon fichier ! En fait la sauvegarde ne se faisait pas malgrès la boite de dialogue et donc logiquement c'était le fichier vierge qui allais en PJ !
Ouf

Cool !

J'allais aussi ajouter qu'il me semble bien qu'on ne peut pas envoyer en pièce jointe un fichier s'il est ouvert.

SI pour le coup on peut envoyer un fichier en PJ même si il est ouvert, cela doit être considéré juste comme un copier coller dans le mail donc on ne touche pas au propriétés du fichier odnc pas grave si il est ouvert !

Bon je suis content ça avance bien j'espère que je vais réussir à tout boucler pour ce soir

Merci énormément de ton aide Joyeux Noel

Rechercher des sujets similaires à "simple saveas puis joindre mail"