Sauve PJ d'outlook (boite de réception) sous c:\pj\ via Exce
RésoluPYGOS69 Messages postés 452 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Malgré les différents posts sur le sujet, je n'ai pas trouvé comment sauvegarder automatiquement les pièces jointes sous un répertoire (exemple : C:\pj\, à l'arrivée du mail sous OUTLOOK 2010, puis de classer le mail dans un dossier (Boite de réception\Traité).
Mon problème, c'est de créer une règle en lançant un script (vba). Je ne trouve pas exécuter un script, car une sécurité en entreprise interdit cela.....
Du coup, est-il possible à partir d'excel, de sauvegarder les pièces jointes de la boite de réception d'outlook, sous un répertoire c:\pj\ et ensuite sous outlook de déplacer ces mails avec pièce joint dans le dossier "Traité" ?
Option Explicit
'------------------------------------------------------------------------
'Nécessite d'activer la référence Microsoft Outlook xx.xx Object Library
'------------------------------------------------------------------------
Dim x As Integer
'La boite de réception, la boite des éléments supprimés et tous leurs
'sous dossiers sont pris en compte.
Sub ExportePiecesJointes()
Dim Ol As New Outlook.Application
Dim Ns As Outlook.Namespace
Dim Dossier As Outlook.MAPIFolder
Set Ns = Ol.GetNamespace("MAPI")
Set Dossier = Ns.Folders(1)
SearchFolders Dossier
x = 0
End Sub
Private Sub SearchFolders(ByVal fld As Outlook.MAPIFolder)
Dim y As Integer
Dim olmail 'As Outlook.MailItem
Dim pceJointe As Outlook.Attachment
Dim SousDossier As Outlook.MAPIFolder
For Each SousDossier In fld.Folders
'.Item("Nom_Du_Dossier").Items
If SousDossier.DefaultItemType = 0 Then
For Each olmail In SousDossier.Items
If Not olmail.Attachments.Count = 0 Then
For y = 1 To olmail.Attachments.Count
Set pceJointe = olmail.Attachments(y)
x = x + 1
pceJointe.SaveAsFile "C:\PJ\" & x & "_" & pceJointe
Set pceJointe = Nothing
Next y
End If
Next olmail
End If
SearchFolders SousDossier
Next SousDossier
End Sub
Ce code, balaie tous les dossiers de la boite de réception. Mon souhait serait de ne balayer que la boite de réception..
Comment remplacer :
For Each SousDossier In fld.Folders
....
Next SousDossier
pour lui indiquer, que seule la boite de réception et non les sous dossiers....
Merci d'avance !
Bien cordialement,
Merci pour votre aide !
Bien cordialement,
Windows / Edge 112.0.1722.68
2 réponses
-
Hello,
Voici une macro qui peut faire l'affaire :
Note: il faut, dans l'interface VBA, aller dans Outils > Référence puis chercher et cocher "Microsoft Outlook 14.0 Object Library" avant de pouvoir utiliser cette macro.
Sub EnregistrerLesPiecesJointesEtDeplacerLesEmails() Dim objOL As Outlook.Application Dim objNS As Outlook.Namespace Dim objFolder As Outlook.MAPIFolder Dim objItem As Object Dim objAttachment As Attachment Dim strFolderPath As String Dim strFolderName As String ' Spécifiez le chemin du dossier où les pièces jointes seront enregistrées strFolderPath = "C:\pj\" ' Spécifiez le nom du dossier où les emails traités seront déplacés strFolderName = "Traité" On Error Resume Next ' Instancie un objet application Outlook Set objOL = CreateObject("Outlook.Application") ' Obtient le namespace MAPI Set objNS = objOL.GetNamespace("MAPI") ' Obtient le dossier Boîte de réception Set objFolder = objNS.GetDefaultFolder(olFolderInbox) ' Parcourt chaque élément dans le dossier Boîte de réception For Each objItem In objFolder.Items ' Vérifie si l'élément est un MailItem If objItem.Class = olMail Then ' Parcourt chaque pièce jointe dans le MailItem For Each objAttachment In objItem.Attachments ' Enregistre la pièce jointe dans le chemin du dossier spécifié objAttachment.SaveAsFile strFolderPath & objAttachment.FileName Next objAttachment ' Déplace le MailItem dans le dossier spécifié objItem.Move objFolder.Folders(strFolderName) End If Next objItem Set objAttachment = Nothing Set objItem = Nothing Set objFolder = Nothing Set objNS = Nothing Set objOL = Nothing MsgBox "Les pièces jointes ont été enregistrées et les emails ont été déplacés.", vbInformation End Sub
-
Bonjour et Merci ozone,
Je testerais cela avant de revenir vers toi ! :)
J'ai essayé chez moi de mettre en place la macro, chez moi, mais comme j'ai Excel 365, pas de référence "Microsoft Outlook 14.0 Object Library".
Je tenterais Mardi sous EXCEL 2010 en entreprise.... A ce sujet si je veux indiquer que la bal est une bal générique avec une adresse et non une bal personnelle, comment dois-je faire ?
Je travaille avec plusieurs bals.....
Cdlt
-
Bonjour,
Noter au passage que si la sécurité interdit aussi de mettre en oeuvre des macros ou qu'elles sont difficiles à faire fonctionner, certains logiciels mail (par exemple The Bat!) font ça en 2 clics: le premier pour choisir de séparer les pièces jointes du corps du mail, le deuxième pour choisir le dossier de destination.
Le souci est si le mail n'est pas propre à chaque PC mais centralisé en réseau dans l'entreprise, à titre d'exemple, la licence 50 utilisateurs coûte alors 60$. -
-
Hello,
Peut être en essayant ainsi mais je peux pas tester chez moi :
' Adresse e-mail du compte partagé strSharedEmail = "adresse_email_partagee@domaine.com"
' Créer une nouvelle instance d'Outlook Set objOL = New Outlook.Application ' Obtenir une référence à l'espace de noms MAPI de Outlook Set objNamespace = objOL.GetNamespace("MAPI") ' Obtenir une référence à la boîte de réception partagée Set objFolder = objNamespace.GetSharedDefaultFolder(objNamespace.CreateRecipient(strSharedEmail), olFolderInbox)aultFolder(objNamespace.CreateRecipient(strSharedEmail), olFolderInbox) -
Y'a du mieux alors !
On peut tester un boucle comme celle ci à la place afin de voir si ça change la donne
' Boucle jusqu'à ce qu'il n'y ait plus de messages à traiter Do While objFolder.Items.Count > 0 ' Parcourt chaque élément dans le dossier Boîte de réception For Each objItem In objFolder.Items ' Vérifie si l'élément est un MailItem If objItem.Class = olmail Then ' Parcourt chaque pièce jointe dans le MailItem For Each objAttachment In objItem.Attachments ' Vérifie si l'objet est une pièce jointe If objAttachment.Type = olByValue And objAttachment.IsEmbedded = False Then ' Enregistre la pièce jointe dans le chemin du dossier spécifié objAttachment.SaveAsFile strFolderPath & objAttachment.Filename End If Next objAttachment 'suivant ' Déplace le MailItem dans le dossier spécifié objItem.Move objDestFolder End If Next objItem Loop
-
-
Sub EnregistrerLesPiecesJointesEtDeplacerLesEmails() Dim objOL As Outlook.Application Dim objNS As Outlook.Namespace Dim objFolder As Outlook.MAPIFolder Dim objItem As Object Dim objAttachment As Attachment Dim strFolderPath As String Dim strFolderName As String Dim strSharedEmail As String ' Chemin du dossier spécifié en H1 strFolderPath = Range("h1").Value ' Adresse e-mail du compte partagé (générique) strSharedEmail = Range("h8").Value ' Spécifiez le nom du dossier où les emails traités seront déplacés strFolderName = Range("h4").Value ' "Terminés-traités" On Error Resume Next ' gestion des erreurs ' Instancie un objet application Outlook Set objOL = New Outlook.Application ' Obtient le namespace MAPI Set objNamespace = objOL.GetNamespace("MAPI") ' Obtient le dossier Boîte de réception Set objFolder = objNamespace.GetSharedDefaultFolder(objNamespace.CreateRecipient(strSharedEmail), olFolderInbox) ' Obtenir une référence au dossier "Traité" Set objDestFolder = objNamespace.GetDefaultFolder(olFolderInbox).Folders(strFolderName) ' Parcourt chaque élément dans le dossier Boîte de réception For Each objItem In objFolder.Items ' Vérifie si l'élément est un MailItem If objItem.Class = olmail Then ' Parcourt chaque pièce jointe dans le MailItem For Each objAttachment In objItem.Attachments ' Enregistre la pièce jointe dans le chemin du dossier spécifié objAttachment.SaveAsFile strFolderPath & objAttachment.Filename Next objAttachment 'suivant ' Déplace le MailItem dans le dossier spécifié..........................NE FONCTIONNE PAS le déplacement se fait sur le dossier de ma bal et non sur le dossier de ma bal spécifiée.... objItem.Move objDestFolder End If Next objItem ' suivant Set objAttachment = Nothing Set objItem = Nothing Set objFolder = Nothing Set objNS = Nothing Set objOL = Nothing MsgBox "Les pièces jointes ont été enregistrées et les emails ont été déplacés ! Merci d'avoir patienté ......"", vbInformation" End Sub