Bonjour à tous,
J'ai besoin, à reception d'un mail ou à son envoi, de pouvoir sauvegarder le mail ET dans des répertoires Outlook, ET sur un répertoire Windows.
J'ai récupérer des macros sur Developpez qui me permettent de faire cela, il n'y a aucun soucis.
La ou ca se corse pour moi, c'est que j'ai créé un formulaire qui récupère certaines informations:
- sauver le mail: Oui / Non
- Sujet du mail
- Destinataire
- Emplacement de sauvegarde du mail
Mon problème est que je n'arrive pas à transmettre les données récupérées. J'ai bien essayé de définir les variable comme Public dans le Userform, puis dans la macro de départ, mais j'ai le message "Invalid attribute in Sub or function".
Est ce que quelqun pourrai m'aiguiller sur la bonne méthode à suivre?
Mes variable Sauvegarde et RepSauvegarde son les variables que je cherche à transmettre dans un premier temps...
Voici mon code dans ThisOutlookSession:
Et le code du module:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 Public WithEvents maBoiteEnvoi As Outlook.Items Private Sub Application_Startup() Set maBoiteEnvoi = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail).Items End Sub Private Sub Application_ItemSend(ByVal item As Object, Cancel As Boolean) Dim prompt As String Dim taille, pieces Dim objNS As NameSpace Dim objFolder As MAPIFolder Public Sauvegarde As String Public RepSauvegarde As String 'On verifie que c'est un mail If Not item.Class = olMail Then GoTo fin TriMail.Show 'Lancement du formulaire fin: Set item = Nothing End Sub Private Sub maBoiteEnvoi_ItemAdd(ByVal item As Object) Dim oDossier As MAPIFolder Set oNS = Application.GetNamespace("MAPI") Set oDossier = Application.GetNamespace("MAPI").PickFolder On Error Resume Next If Not oDossier Is Nothing Then item.Move oDossier End If Set oDossier = Nothing End Sub
Et pour les crack du VBA, j'ai une autre colle:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Sub sav_mail_as_msg(Optional objCurrentMessage As Object) If objCurrentMessage Is Nothing Then Set objCurrentMessage = ActiveInspector.CurrentItem 'Ici on défini le répertoire où l'enregistrer repertoire = BrowseForFolder("Choisissez la destination") 'Ici on construit le nom du fichier qui sera créé NomExport = objCurrentMessage.Subject & objCurrentMessage.CreationTime NomExport = "Email " & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _ NomExport, "\", ""), "/", ""), ":", ""), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160) 'Choix de l'emplacement de sauvegarde du mail et de son nom NomExport = InputBox("Choisissez le nom", "Enregistrer-sous", NomExport) 'Ici on supprime les caractères non autorisé dans les noms de fichiers PathNomExport = repertoire & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace( _ NomExport, "\", ""), "/", ""), ":", ""), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160) & ".msg" 'Ici on vérifie que le fichier n'existe pas déjà sinon il serait écrasé n = 1 MemPath = PathNomExport While Dir(PathNomExport) <> "" MsgBox "Le fichier " & vbCr & PathNomExport & vbCr & "existe déjà", vbInformation PathNomExport = Left(MemPath, Len(MemPath) - 4) & "(" & n & ")" & ".msg" n = n + 1 Wend objCurrentMessage.SaveAs PathNomExport, OlSaveAsType.olMSG End Sub
Est il possible de donner un répertoire par défaut au PickFolder: Set oDossier = Application.GetNamespace("MAPI").PickFolder
J'ai pas mal cherché en pensant ne pas etre loin de la solution, mais qui ne fonctionne réellement...
Merci d'avance pour vos propositions qui seront accueillies à bras ouverts
Partager