Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SCRIPT QUI PERMET D'EXTRAIRE DES PIÈCES JOINTES OUTLOOK ET DE LES ENREGISTRER


Information sur la source

Catégorie :VBScript Classé sous : extraire, outlook, office, pièces, jointes Niveau : Débutant Date de création : 25/01/2005 Vu : 31 131

Note :
8 / 10 - par 5 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (80)
Ajouter un commentaire et/ou une note

Description

... en plus clair: ce script permet d'extraire des pièces jointes d'un email Outlook et de les enregistrer à un emplacement spécifique.

Voici quelques explications:

Il s'agit d'abord de définir dans quelle archive chercher ...
   Outlook_Archive = "Mailbox - Heiz, Philippe"
... on précise encore le répèrtoire de l'archive en question ...
   Outlook_Folder = "Inbox"
... voire dans quel(s) sous-répèrtoire(s).
   Outlook_SubFolder1 = ""
   Outlook_SubFolder2 = ""
   Outlook_SubFolder3 = ""
Ici, on définit une partie du (ou tout le) contenu du sujet du message ...
   Subject_InStr = "BBH MAER DATA FOR BACKTESTING"
... on précise aussi si on veut extraire TOUTES les pièces jointes ...
  Get_All_Files = True
... ou seulement la première ...
... et si le mail sera suprimé le cas échéant.
  Delete_Mail = False
Reste à définir où la pièce jointe devra-t'être enregistrée.
   Target_Folder = "C:\TEMP\VBE\"
   Target_File_Name = "TEST.XLS"
On a aussi l'option d'écrire une entrée de rapport dans un fichier log.
   Log_File_Long_Name = "C:\TEMP\VBE\Outlook.log"

Ce code à été écrit pour être executé en VBS, mais il serait évidemment très facile d'en faire un code VB propre.
 

Source

  • '***********************************************
  • '* This script gets Outlook email attachements *
  • '* and saves them into a specified directory. *
  • '*_____________________________________________*
  • '* By Philippe Heiz, 2003. *
  • '***********************************************
  • '---------------------------------
  • ' CHANGE THE FOLLOWING SETTINGS
  • '---------------------------------
  • Outlook_Archive = "Mailbox - Heiz, Philippe"
  • Outlook_Folder = "Inbox"
  • Outlook_SubFolder1 = ""
  • Outlook_SubFolder2 = ""
  • Outlook_SubFolder3 = ""
  • Subject_InStr = "BBH MAER DATA FOR BACKTESTING"
  • Get_All_Files = True
  • Delete_Mail = False
  • Target_Folder = "C:\TEMP\VBE\"
  • Target_File_Name = "TEST.XLS"
  • Log_File_Long_Name = "C:\TEMP\VBE\Outlook.log"
  • '---------------------------------
  • ' DO NOT CHANGE THE FOLLOWING CODE
  • '---------------------------------
  • Call GetAttachements
  • Sub GetAttachements() '30
  • cpt = 0
  • Set objOutlook = CreateObject("Outlook.Application")
  • Set objFolder = objOutlook.GetNamespace("MAPI").Folders(Outlook_Archive)
  • If Not Log_File_Long_Name = "" Then Set objFSO = CreateObject("Scripting.FileSystemObject")
  • If Not Log_File_Long_Name = "" Then Set objLog = objFSO.CreateTextFile(Log_File_Long_Name)
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine Now()
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
  • On Error Resume Next
  • For i = 0 To 3
  • Select Case i
  • Case 0
  • If Not Outlook_Folder = "" Then
  • Set objFolder = objFolder.Folders(Outlook_Folder)
  • Else
  • Exit For
  • End If
  • Case 1
  • If Not Outlook_SubFolder1 = "" Then
  • Set objFolder = objFolder.Folders(Outlook_SubFolder1)
  • Else
  • Exit For
  • End If
  • Case 2
  • If Not Outlook_SubFolder2 = "" Then
  • Set objFolder = objFolder.Folders(Outlook_SubFolder2)
  • Else
  • Exit For
  • End If
  • Case 3
  • If Not Outlook_SubFolder3 = "" Then
  • Set objFolder = objFolder.Folders(Outlook_SubFolder3)
  • Else
  • Exit For
  • End If
  • End Select
  • Next
  • If Not Err.Number = 0 Then
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Outlook archive path is not valid:"
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Archive =" & Chr(9) & Outlook_Archive
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Folder =" & Chr(9) & Outlook_Folder
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder1 =" & Chr(9) & Outlook_SubFolder1
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder2 =" & Chr(9) & Outlook_SubFolder2
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder3 =" & Chr(9) & Outlook_SubFolder3
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
  • Exit Sub
  • End If
  • On Error GoTo 0
  • Set objItems = objFolder.Items
  • For mailIndex = objItems.Count To 1 Step -1
  • 'On Error Resume Next
  • Set objMailItem = objItems.Item(mailIndex)
  • If objMailItem.Attachments.Count > 0 Then
  • If not InStr(1, objMailItem.Subject, Subject_InStr, 1) = 0 Then
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine objMailItem.Subject
  • On Error Resume Next
  • If Get_All_Files Then
  • For i = 1 To objMailItem.Attachments.Count
  • Set PJ = objMailItem.Attachments.Item(i)
  • PJ.SaveAsFile Target_Folder & PJ.DisplayName
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
  • cpt = cpt + 1
  • Next
  • Else
  • Set PJ = objMailItem.Attachments.Item(1)
  • If Target_File_Name = "" Then Target_File_Name = PJ.DisplayName
  • PJ.SaveAsFile Target_Folder & Target_File_Name
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
  • cpt = cpt + 1
  • End If
  • If Not Err.Number = 0 Then
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Target path is not valid:"
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & Target_Folder
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
  • Exit Sub
  • End If
  • On Error GoTo 0
  • If Delete_Mail Then objMailItem.Delete
  • End If
  • End If
  • Next
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
  • If Not Log_File_Long_Name = "" Then objLog.WriteLine cpt & " attachment(s) treated"
  • End Sub
  • '---------------------------------
'***********************************************
'* This script gets Outlook email attachements *
'* and saves them into a specified directory.  *
'*_____________________________________________*
'*          By Philippe Heiz, 2003.           *
'***********************************************

'---------------------------------
' CHANGE THE FOLLOWING SETTINGS
'---------------------------------
Outlook_Archive =    "Mailbox - Heiz, Philippe"
Outlook_Folder =    "Inbox"
Outlook_SubFolder1 =    ""
Outlook_SubFolder2 =    ""
Outlook_SubFolder3 =    ""

Subject_InStr =        "BBH MAER DATA FOR BACKTESTING"
Get_All_Files =        True
Delete_Mail =        False

Target_Folder =        "C:\TEMP\VBE\"
Target_File_Name =    "TEST.XLS"

Log_File_Long_Name =    "C:\TEMP\VBE\Outlook.log"

'---------------------------------
' DO NOT CHANGE THE FOLLOWING CODE
'---------------------------------
Call GetAttachements
Sub GetAttachements()    '30
    cpt = 0                                   
    Set objOutlook = CreateObject("Outlook.Application")
    Set objFolder = objOutlook.GetNamespace("MAPI").Folders(Outlook_Archive)
 
    If Not Log_File_Long_Name = "" Then Set objFSO = CreateObject("Scripting.FileSystemObject")
    If Not Log_File_Long_Name = "" Then Set objLog = objFSO.CreateTextFile(Log_File_Long_Name)
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Now()
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"

    On Error Resume Next
    For i = 0 To 3
    Select Case i
    Case 0
        If Not Outlook_Folder = "" Then
            Set objFolder = objFolder.Folders(Outlook_Folder)           
        Else
            Exit For
        End If
    Case 1
        If Not Outlook_SubFolder1 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder1)
        Else
            Exit For
        End If
    Case 2                                   
        If Not Outlook_SubFolder2 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder2)
        Else
            Exit For
        End If
    Case 3
        If Not Outlook_SubFolder3 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder3)
        Else
            Exit For                               
        End If
    End Select
    Next

    If Not Err.Number = 0 Then
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Outlook archive path is not valid:"
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Archive =" & Chr(9) & Outlook_Archive
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Folder =" & Chr(9) & Outlook_Folder
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder1 =" & Chr(9) & Outlook_SubFolder1
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder2 =" & Chr(9) & Outlook_SubFolder2
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder3 =" & Chr(9) & Outlook_SubFolder3
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
    Exit Sub
    End If
    On Error GoTo 0
   
    Set objItems = objFolder.Items                                           
    For mailIndex = objItems.Count To 1 Step -1
        'On Error Resume Next
        Set objMailItem = objItems.Item(mailIndex)
        If objMailItem.Attachments.Count > 0 Then
            If not InStr(1, objMailItem.Subject, Subject_InStr, 1) = 0 Then           
                If Not Log_File_Long_Name = "" Then objLog.WriteLine objMailItem.Subject
       
        On Error Resume Next
                If Get_All_Files Then
                    For i = 1 To objMailItem.Attachments.Count
                        Set PJ = objMailItem.Attachments.Item(i)
                        PJ.SaveAsFile Target_Folder & PJ.DisplayName
                        If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
                        cpt = cpt + 1
                    Next
                Else
                    Set PJ = objMailItem.Attachments.Item(1)
                    If Target_File_Name = "" Then Target_File_Name = PJ.DisplayName
                    PJ.SaveAsFile Target_Folder & Target_File_Name
                    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
                    cpt = cpt + 1
                End If
                If Not Err.Number = 0 Then
            If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Target path is not valid:"
            If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & Target_Folder
            If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
                Exit Sub
        End If
        On Error GoTo 0

                If Delete_Mail Then objMailItem.Delete
            End If
        End If
    Next
   
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
    If Not Log_File_Long_Name = "" Then objLog.WriteLine cpt & " attachment(s) treated"
End Sub
'---------------------------------

Commentaires et avis

signaler à un administrateur
Commentaire de ScSami le 26/01/2005 01:08:40

A quoi ça sert ???

signaler à un administrateur
Commentaire de philheiz le 26/01/2005 09:11:57

OK... mettons que je t'envoie un mail avec la photo de mon fils en pièce jointe. Avec ce script tu vas pouvoir extraire la photo (un fichier jpeg) et l'enregistrer sur ton disque dur.

Exposé comme ca, c'est evidemment débile... mais si par exemple tu recois tous les jours un mail avec en pièce jointe un fichier contenant des données que tu veux extraire, ce script peux être utile, car tu va pouvoir t'économiser la peine d'aller tous les matins dans Outlook, de chercher le mail en question, de l'ouvrir et d'enregistrer la pièce jointe sous C:\xxx\yyy\...

signaler à un administrateur
Commentaire de lapinblanc le 26/01/2005 09:12:50

bonjour tout le monde...

script sympa...

quelqu'un serait comment retirer l'habituel message qui dit "une application tente ..." dès qu'on touche à outlook ?

merci.

signaler à un administrateur
Commentaire de philheiz le 26/01/2005 09:24:59

tu dois pouvoir configurer ca dans Outlook.

Si tu as Norton, tu dois probablement désactiver la sécurité anti-script.

signaler à un administrateur
Commentaire de philheiz le 26/01/2005 09:27:41

va voir :
http://www.vbfrance.com/code.aspx?ID=29079

tu risques te trouver ta réponse.

signaler à un administrateur
Commentaire de jmlucienvb le 26/01/2005 13:34:38

Qq'un a-t-il une idée pour faire la même chose sur Lotus Notes ?

signaler à un administrateur
Commentaire de ScSami le 27/01/2005 00:20:46

Maintenant c'est plus clair :), merci pour ce code utile.

8/10

signaler à un administrateur
Commentaire de tetrium le 15/03/2005 15:15:00

Bonjour

merci pour ce script cependant je suis nouveau la dedans et je ne trouve pas l'information pour remplir la variable "Outlook_Archive"
ou peut-on trouver l'information dans outlook ?

j'ai configuré un outlook 2000 avec  le nom "test" et le prénom "test" mais je ne trouve nul part dans les barres ou les aides la description exacte

je vous remercie d'avance
un simple novice

Tetrium

signaler à un administrateur
Commentaire de philheiz le 16/03/2005 20:08:58

"Boîte de réception" p.ex.

signaler à un administrateur
Commentaire de zzj le 17/03/2005 00:48:06

très utile!!

j'ai des milliers des fichiers dans la base, je veux  extraitre tous les p.j. en donnant une sort de nom-clé par sa origine et date-time, comment faire?





signaler à un administrateur
Commentaire de tetrium le 17/03/2005 09:23:19

Bonjour

Merci philheiz pour l'explication
en fait j'avais du mal a trouver le nom de la boite dans outlook.
Cela viens du fait que j'en utilise un en francais. La boite s'appelais " outlook aujourd'hui : dossiers personnels". Un simple renomage avec le nom d'utilisateur et ca marche.

Merci encore pour ce tres bons cript

Tetrium

signaler à un administrateur
Commentaire de ajarnaud le 11/05/2005 16:37:13

bonjour PhilHeiz,

comment fais tu pour automatiser se script à partir d'outlook ??

il marche bien à partir de "macro - executer" mais comment faire pour l'inclure dans une regle de message

merci d'avance

aj

signaler à un administrateur
Commentaire de philheiz le 11/05/2005 19:14:19

à ma connaissance il n'y a pas moyen d'exécuter un script pas le biaas d'une règle Outlook.

En ce qui me concerne, j'exécute le script une fois par jour de manière programmée.

signaler à un administrateur
Commentaire de ajarnaud le 12/05/2005 10:25:30

merci Philheiz pour ta réponse,

si j'utilise ton scrip tel quel en modifiant juste les paramêtres au niveau déclaration, il ne marche pas, je doit alors enlever le call et passer le sub en tête du script. une fois ceci fait, à partir d'outlook dans l'assistant gestion des messages je créé une régle à l'arrivée d'un message particulier qui éxécute un script, mais la le script n'est plus visible alors qu'il l'était avant la modif, mais si je ne fait pas la modif le script ne marche pas - je tourne en rond !!

aj

signaler à un administrateur
Commentaire de ajarnaud le 12/05/2005 10:25:34

merci Philheiz pour ta réponse,

si j'utilise ton scrip tel quel en modifiant juste les paramêtres au niveau déclaration, il ne marche pas, je doit alors enlever le call et passer le sub en tête du script. une fois ceci fait, à partir d'outlook dans l'assistant gestion des messages je créé une régle à l'arrivée d'un message particulier qui éxécute un script, mais la le script n'est plus visible alors qu'il l'était avant la modif, mais si je ne fait pas la modif le script ne marche pas - je tourne en rond !!

aj

signaler à un administrateur
Commentaire de mehdi2 le 16/06/2005 17:27:53

Bravo, simple efficace

signaler à un administrateur
Commentaire de chris9124 le 06/07/2005 01:04:59

Bonjour,

comment faire si je veux récupérer le message est non la pièce jointe ? Je souhaite pouvoir faire ça pour par exemple programmer le declenchement d'un enregistrmeent sur mon HTPC !

Merci

signaler à un administrateur
Commentaire de philheiz le 06/07/2005 11:20:00

utilise la propriété Body de l'objet MailItem

signaler à un administrateur
Commentaire de chris9124 le 06/07/2005 12:24:21

Merci :-D

signaler à un administrateur
Commentaire de hibougarou le 02/08/2005 11:52:42

Bonjour,
moi j'aimerais ouvrir outlook avec un script. J'arrive à le fermer, mais je n'arrive pas à l'ouvrir. Merci de votre aide.

signaler à un administrateur
Commentaire de jujudebutvb le 18/10/2005 13:52:31

Bonjour, je fais mes 1er pas sur VB car justement j'avais besoin de récupérer les pièces jointes automatiquement pour pouvoir les traiter dans une appli interne. Je ne connais rien en VB. J'ai réussi à faire fonctionner ce script, mais je voudrais savoir si c'est possible de fusionner toutes les pièces jointes en un seul fichier nommé par le target_file_name. Merci beaucoup.

signaler à un administrateur
Commentaire de philheiz le 18/10/2005 20:04:31


jujudebutvb: ca dépend du type de fichiers. si c'est du texte, pas de problème, sinon ca risque d'être dur, voire impossible.

signaler à un administrateur
Commentaire de jujudebutvb le 20/10/2005 08:44:02

Philheiz: oui ce sont des fichiers textes ayant la même structure que je dois fusionner. Savez-vous comment faire ? Merci d'avance

signaler à un administrateur
Commentaire de jujudebutvb le 20/10/2005 09:05:16

J'ai encore une autre question : comment faire pour ne pas écraser le fichier log à chaque exécution du script. Je souhaiterais que le rapport s'écrive à la suite pour chaque mail traité. Encore merci.

signaler à un administrateur
Commentaire de philheiz le 20/10/2005 19:31:40

voilà déjà pour le fichier log:

la ligne suivante est à remplacer par le paragraphe suivant:

If Not Log_File_Long_Name = "" Then Set objLog = objFSO.CreateTextFile(Log_File_Long_Name)

If Not Log_File_Long_Name = "" Then
   Set objFSO = CreateObject("Scripting.FileSystemObject")
   If Not objFSO.FileExists(Log_File_Long_Name) Then
       Set objLog = objFSO.CreateTextFile(Log_File_Long_Name)
   Else
       Set objLog = objFSO.OpenTextFile(Log_File_Long_Name, 8, 0)
   End If
End If

  

signaler à un administrateur
Commentaire de philheiz le 20/10/2005 19:51:56

et pour la concaténation de fichiers texte, voilà:

----------------------------------------
Dim FichierTotal
Dim Fichier1
Dim Fichier2
Dim Fichier3
Dim fso, oFileTot, oFile

FichierTotal = "C:/ToutEnsemble.txt"
Fichier1 = "C:/Fichier1.txt"
Fichier2 = "C:/Fichier2.txt"
Fichier3 = "C:/Fichier3.txt"

Set fso = CreateObject("Scripting.FileSystemObject")
Set oFileTot = fso.CreateTextFile(FichierTotal)

' lit le contenu du fichier 1 et l'écrit dans FichierTotal
Set oFile = fso.OpenTextFile(Fichier1, 1, -2)
oFileTot.Write oFile.ReadAll & vbCrLf

' lit le contenu du fichier 2 et l'écrit dans FichierTotal
Set oFile = fso.OpenTextFile(Fichier2, 1, -2)
oFileTot.Write oFile.ReadAll & vbCrLf

' lit le contenu du fichier 3 et l'écrit dans FichierTotal
Set oFile = fso.OpenTextFile(Fichier3, 1, -2)
oFileTot.Write oFile.ReadAll & vbCrLf

oFile.Close
oFileTot.Close
----------------------------------------

il serait évidemment plus élégant de faire une boucle plutôt que d'énumérer les fichiers à concaténer, mais l'exemple ci-dessus est plus facile à comprendre tel quel.

signaler à un administrateur
Commentaire de jujudebutvb le 21/10/2005 09:22:28

Bonjour,
Merci beaucoup Philheiz. Cela m'aide beaucoup. Pour la concaténation, je ne peux pas faire avec ton script car je reçois les fichiers en pièces jointes et je ne connais pas leur nom. Ils commencent par le même suffixe mais après c'est un numéro aléatoire genre TO7895.txt. J'exécute du coup un .bat pour faire ma fusion. J'ai le même problème que Ajarnaud, à savoir que je voulais intégrer cette macro dans une règle Outlook, mais il ne trouve pas mon script. Dois-je acheter un Visual Basic pour avoir un programme compilé à part entière ? Encore merci beaucoup.

signaler à un administrateur
Commentaire de jujudebutvb le 03/11/2005 08:42:34

Pour Ajarnaud. Je pense avoir trouvé comment intégré un script dans une règle OUtlook. Au niveau du nom de la routine, il faut mettre entre () un lien que reconnait Outlook et du coup le script est accessible dans les règles.
Exemple : sub toto(item as outlook.mailitem)
et ça marche.

signaler à un administrateur
Commentaire de ajarnaud le 04/11/2005 07:16:50

Merci JUJUDEBUTVB je test ce matin et te tiens au courant

AJ

signaler à un administrateur
Commentaire de fredmj le 27/11/2005 22:16:58

Bonjour,

Je débute (radicalement, ie 3-4h) sous VBS et lorsque j'essaye de lancer ce script (qui me semble très interessant) j'obtien le message :

C:\devel\vbs>cscript outlook_test1.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

C:\devel\vbs\outlook_test1.vbs(33, 5) Microsoft Outlook: Array index out of bounds.



Que fais-je mal? Si quelque pouvai m'aider...
Merci

signaler à un administrateur
Commentaire de philheiz le 28/11/2005 09:44:08

Ligne 33:
Set objFolder = objOutlook.GetNamespace("MAPI").Folders(Outlook_Archive)

J'imagine que ta variable 'Outlook_Archive' contient un nom de dossier qui n'existe pas dans Outlook.

signaler à un administrateur
Commentaire de eldrad95 le 09/12/2005 12:59:30

Bonjour,

J'avoue que ce script va surement m'être super utile par contre j'aimerais savoir si il est possible de faire un tri préalable des pièces jointe.
Il faudrai que je ne récupère que des documet .doc uniquement, les autres pourraient être supprimés.

Quelqu'un pourrait m'aider ?

signaler à un administrateur
Commentaire de thorspark le 25/01/2006 14:10:22

Bonjour,

Autant vous dire que je ne m'y connais pas du tout en VBS ou VB, je programme sous un autre langage.

Un de nos clients souhaite nous envoyer ses commandes en pièce jointe à une adresse mail prédéfinie. Jusque là, pas de soucis, l'adresse mail est facilement créable sur notre serveur exchange.

Là où ça se corse, c'est que j'aimerais que les pièces jointes des mails soient automatiquement enregistrées sur un répertoire du réseau afin d'être traitées par un robot.

Je n'ai pas trouvé cette option dans exchange aussi je suis venu voir ce qu'on pouvait faire sur outlook.

Après plusieurs tentatives avec ce script, je n'arrive à rien. J'aurais donc quelqes questions.

1- Je suppose qu'il faut une boite outlook ouverte en permanence pour que le traitement se fasse. Peut on s'en passer ?

2- Quelle que soit la méthode, lorsque je souhaite créer une règle sous outlook, la sub VBS n'apparait pas (J'ai été dans outlook, Outils, Assistant gestion des messages, nouvelle règle, vérifier les messages à leur arrivée qui contiennent un pièce jointe, effectuer une action personnalisée, et là ma liste est vide). Comment la faire apparaître pour tester ?
J'ai essayé d'inclure les déclarations dans la sub getattachements pour ne plus avoir à faire un call, et j'ai, comme précisé plus haut, défini getattachements comme suit :

Sub GetAttachements(item As Outlook.MailItem)

Mais rien n'y fait, je ne la vois pas (je ne la vois plus dans les macros d'ailleurs). Pouvez vous m'aider ?

3- J'aurais sûrement d'autres questions si je franchis les premières étapes, merci d'avance en tous cas.

signaler à un administrateur
Commentaire de philheiz le 26/01/2006 14:43:32

1 - Oui et non: la personne à qui le mail est envoyé, ou un owner de la shared-mailbox auquel le mail est adressé doit être logué sur le PC où le script sera exécuté (la mailbox en question doit être mappée dans Outlook). Mais Outlook ne doit pas être 'ouvert' à proprement parler.

2 - Outlook ne permet d'exécuter des scripts sur la base d'une régle. Le script doit être lancé manuellement ou programmé à intervals réguliers.

Je ne comprends pas ce que vous entendez par: 'J'ai essayé d'inclure les déclarations dans la sub getattachements pour ne plus avoir à faire un call'.

signaler à un administrateur
Commentaire de thorspark le 26/01/2006 17:41:39

Merci de votre réponse rapide.

1 - Ok, il suffit donc que la session de l'utilisateur soit ouverte sur le pc en question. Merci.

2 - Alors je ne sais pas comment faire pour que le script s'éxécute à intervalles réguliers, je vais chercher. Par ailleurs, il faudra alors qu'il parcourre l'ensemble des mails arrivés pendant la période.

3 - Celà veut dire que les variables déclarées dans votre exemple avant le call getattachements ont été placées dans le corps même de la routine getattachements.

Merci de me faire savoir si vous avez d'autres éléments pour me guider

signaler à un administrateur
Commentaire de philheiz le 27/01/2006 09:41:08

pour ce qui est de l'execution automatique du script, il existe une variété considérable de solutions. le Plannificateur de Tâches de MS est une (mais sûrement pas la meilleure) possiblité.

les variables sont décrarées hors de la proc GetAttachements, dans la partie du script intitulée CHANGE THE FOLLOWING SETTINGS

signaler à un administrateur
Commentaire de ajarnaud le 28/01/2006 09:09:21

Bonjour THORSPARK,

je veux faire exactement la même chose que toi, enregistrement des pieces jointes (fichiers de commandes) dès leur arrivée, la planification n'est pas envisageable pour déclancher le script car l'heure d'arrivée des fichiers n'est pas fixe, et que nous traitons des produits pharmaceutiques (urgents pour certains).

la solution que j'ai adoptée est d'affecter le script à un bouton sur la barre des taches Outlook + une régle à l'arrivée du mail. Il est automatiquement envoyé vers un repertoire et copie dans un repertoire bis, un popup apparait sur mon écran m'indiquant son arrivée "fichier labo XXX arrivé", je clic sur mon bouton macro qui enregistre les pieces jointes du mail présent dans repertoire bis et le supprime.

voilà ça vaut ce que ça vaut, mais en attendant d'avoir mieux !!

si tu arrives à l'automatiser, je suis preneur

aj

signaler à un administrateur
Commentaire de philheiz le 30/01/2006 08:52:48

En combinaison avec une règle Outlook (qui déplace un nouveau mail dans un répertoir), l'exécution programmée d'un script est tout à fait envisageable. Il suffit qu'il soit exécuté régulièrement (une fois chaque quart d'heure p.ex.). Que le mail en question soit déjà dans le répertoir ou non n'a ancune importance, tant que le script efface (ou archive) les mails qu'il traite.

signaler à un administrateur
Commentaire de thorspark le 30/01/2006 15:29:43

Ce qui m'intrigue, c'est l'execution d'une action personnalisée. Il existe en effet sous outlook cette possibilité alors je me dis qu'on doit pouvoir programmer cette action presonnalisée avec le code donné par philheiz.

Quand j'installe microsoft visual studio et que je vais sur l'aide msdn library, ils ne font référence à ces actions personnalisée que lors des installations d'applications et jamais sous outlook.
Cette fonction serait elle inutilisable sous outlook ?

signaler à un administrateur
Commentaire de thorspark le 31/01/2006 12:20:33

Après quelques recherches, je suis enfin arrivé à une solution finale qui fonctionne parfaitement.

L'idée est donc de créer une macro qui s'exécute au démarrage de outlook et qui gère l'évènement NewMail de outlook.

Dans la partie déclarations générales, je définis mes variables, dont l'une étant évènementielle

Dim WithEvents objInboxItems As Outlook.Items
Dim objDestinationFolder As Outlook.MAPIFolder

On crée ensuite la routine à effectuer au démarrage de outlook. Le tout étant d'activer ma variable évenementielle objInboxItems

Sub Demarrage()
   Dim objNameSpace As Outlook.NameSpace
   Dim objInboxFolder As Outlook.MAPIFolder
   Set objNameSpace = Application.Session
   Set objInboxFolder = objNameSpace.GetDefaultFolder(olFolderInbox)
   Set objInboxItems = objInboxFolder.Items
End Sub

Et voici la règle de philheiz légèrement modifiée pour s'adapter à mes besoins. J'ai supprimé tout le code afférant au fichier de log que je ne souhaite pas gérer. Vous pouvez évidemment le garder.
Cette routine s'exécute à chaque ItemAdd de la mailbox

Private Sub objInboxItems_ItemAdd(ByVal Item As Object)
Outlook_Archive = "Boîte aux lettres - Yves LAURENT"
Outlook_Folder = "Boîte de réception"
Outlook_SubFolder1 = ""
Outlook_SubFolder2 = ""
Outlook_SubFolder3 = ""
  
Subject_InStr = "test"
Get_All_Files = True
Delete_Mail = True
  
Target_Folder = "D:\"
Target_File_Name = ""
    cpt = 0
    Set objOutlook = CreateObject("Outlook.Application")
    Set objFolder = objOutlook.GetNamespace("MAPI").Folders(Outlook_Archive)
  
    On Error Resume Next
    For i = 0 To 3
    Select Case i
    Case 0
        If Not Outlook_Folder = "" Then
            Set objFolder = objFolder.Folders(Outlook_Folder)
        Else
            Exit For
        End If
    Case 1
        If Not Outlook_SubFolder1 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder1)
        Else
            Exit For
        End If
    Case 2
        If Not Outlook_SubFolder2 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder2)
        Else
            Exit For
        End If
    Case 3
        If Not Outlook_SubFolder3 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder3)
        Else
            Exit For
        End If
    End Select
    Next
  
    If Not Err.Number = 0 Then
    Exit Sub
    End If
    On Error GoTo 0
    
    Set objItems = objFolder.Items
    For mailIndex = objItems.Count To 1 Step -1
        Set objMailItem = objItems.Item(mailIndex)
        If objMailItem.Attachments.Count > 0 Then
            If Not InStr(1, objMailItem.Subject, Subject_InStr, 1) = 0 Then
        On Error Resume Next
                If Get_All_Files Then
                    For i = 1 To objMailItem.Attachments.Count
                        Set PJ = objMailItem.Attachments.Item(i)
                        PJ.SaveAsFile Target_Folder & PJ.DisplayName
                        cpt = cpt + 1
                    Next
                Else
                    Set PJ = objMailItem.Attachments.Item(1)
                    If Target_File_Name = "" Then Target_File_Name = PJ.DisplayName
                    PJ.SaveAsFile Target_Folder & Target_File_Name
                    cpt = cpt + 1
                End If
                If Not Err.Number = 0 Then
                Exit Sub
        End If
        On Error GoTo 0
  
                If Delete_Mail Then objMailItem.Delete
            End If
        End If
    Next
End Sub

Enfin, on gère l'évènement Sartup de outlook afin qu'il lance la macro lorsqu'il démarre

Private Sub Application_Startup()
Demarrage
End Sub

Voilà, ça règle complètement mon problème, j'espere que ça vous sera utile

Thorspark

signaler à un administrateur
Commentaire de thorspark le 31/01/2006 12:22:19

Désolé pour le double message, un bug s'est produit lors de la validation

signaler à un administrateur
Commentaire de patacra le 09/02/2006 15:35:29

Oh oui! ça c'est une jolie solution! J'en ai profité pour la simplifier un peu en épurant ce qui est inutile et surtout en ajoutant la déclaration obligatoire des variables et des commentaires. Que ce code profite à tous les adeptes de la prog :

----------------------------------------------------------------------------
Option Explicit

' La collection d'éléments se trouvant dans la boîte de réception.
Dim WithEvents objInboxItems As Outlook.Items

' Permet de faire "pointer" notre objet sur la boîte de réception afin de réagir
' à l'événement ItemAdd qui correspond à l'ajout d'un élément dans la boîte.
Private Sub initialiser()
  Dim objInboxFolder As Outlook.MAPIFolder
  Set objInboxFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
  Set objInboxItems = objInboxFolder.Items
End Sub

' Démarrage d'Outlook
Private Sub Application_Startup()
  initialiser
End Sub

' L'événement ItemAdd qui se produit lorsqu'on ajout un élément dans la boîte de réception.
Private Sub objInboxItems_ItemAdd(ByVal Item As Object)
  ' Le chemin de destination.
  Const PATH = "D:\Fichiers_reçus"
  ' Pour avoir le listing des méthodes disponibles sur un élément mail. (plus précit qu'Object)
  Dim objMail As MailItem
  ' Le message à afficher.
  Dim message As String
  ' L'attaché mail, utilisé pour le parcour des attachés.
  Dim objAttachment As Outlook.Attachment
  
  ' Au cas où on ne reçoit pas un mail, mais un autre type d'élément.
  On Error GoTo ExceptionHandler
  ' Casting en élément mail, afin d'avoir le listing des méthodes disponibles.
  Set objMail = Item
  
  ' S'il y a des fichiers attachés.
  If objMail.Attachments.Count > 0 Then
    message = "Vous avez reçu des fichiers attachés. Détail :" & vbCrLf & vbCrLf
    ' Parcourir tous les fichiers attachés.
    For Each objAttachment In objMail.Attachments
      message = message & objAttachment.FileName & vbCrLf
      ' Enregister le fichier attaché.
      objAttachment.SaveAsFile PATH & objAttachment.FileName
    Next objAttachment
    message = message & vbCrLf & "Voulez-vous voir les fichiers ?"
    ' Afficher le message à l'utilisateur et demander s'il veut aller voir les fichiers.
    If MsgBox(message, vbInformation + vbYesNo, "Outlook") = vbYes Then
      ' Aller dans le répertoire en question.
      Shell "explorer """ & PATH & """", vbNormalFocus
    End If
  End If
  
  Exit Sub
  
ExceptionHandler:
  MsgBox "Erreur n° " & Err.Number & vbCrLf & _
         "Description : " & Err.Description, _
         vbCritical, "Erreur dans VBA objInboxItems_ItemAdd"
  
End Sub
----------------------------------------------------------------------------

Ciao

Patacra

signaler à un administrateur
Commentaire de _-=chris=-_ le 12/05/2006 10:38:38

C'est pas mal effectivement, cependant si vous voulez executer des script à l'arrivée d'un message en passant par une regle de message, pour cela, if suffit de déclarer la Sub avec un MailItem en entrée, après vous faitse ce que vous voulez dans la Sub :

Private Sub objInbox_ItemAdd(Item As Outlook.MailItem)
      If Item.Attachments.Count > 0 Then
         Dim objAttachments As Outlook.Attachments
         Set objAttachments = Item.Attachments
         For Each objAttach In objAttachments
            ' Does not handle duplicate filename scenarios
            objAttach.SaveAsFile "C:\Test\" & objAttach.FileName
         Next
         Set objAttachments = Nothing
      End If
End Sub


Et ensuite vous créez votre regle : A l'arrivée d'un message, Executer un script, et vous choisissez votre Sub.

Quant-aux Actions personnélisées, il s'agit à priori de code écrit en C ajouté par d'autre applis ?!?

signaler à un administrateur
Commentaire de _-=chris=-_ le 12/05/2006 10:40:45

Attention car ItemAdd s'applique également aux Drag and Drop !

signaler à un administrateur
Commentaire de patacra le 12/05/2006 11:25:32

Bonne idée!

Malheureusement, je n'ai pas trouvé l'option "Exécuter un script". Peut-être parce que je bosse encore sur Outlook 2000.

signaler à un administrateur
Commentaire de dj_raph02 le 18/05/2006 10:31:28

Bonjour lorsque je copie la version qui m'interesse la première celle de  philheiz, j'ai remplacer par mes infos les premières ligne et il me met compile error: invalid outside procedure. voici le code chez moi:

'***********************************************
'* This script gets Outlook email attachements *
'* and saves them into a specified directory. *
'*_____________________________________________*
'* By Philippe Heiz, 2003. *
'***********************************************
  
'---------------------------------
' CHANGE THE FOLLOWING SETTINGS
'---------------------------------
Outlook_Archive = "Mailbox - Amaury  Raphaël"
Outlook_Folder = "Inbox"
Outlook_SubFolder1 = ""
Outlook_SubFolder2 = ""
Outlook_SubFolder3 = ""
  
Subject_InStr = "TEST"
Get_All_Files = True
Delete_Mail = False
  
Target_Folder = "C:\fichiers_recu"
Target_File_Name = ""
  
Log_File_Long_Name = "C:\TEMP\VBE\Outlook.log"
  
'---------------------------------
' DO NOT CHANGE THE FOLLOWING CODE
'---------------------------------
Call GetAttachements
Sub GetAttachements() '30
    cpt = 0
    Set objOutlook = CreateObject("Outlook.Application")
    Set objFolder = objOutlook.GetNamespace("MAPI").Folders(Outlook_Archive)
  
    If Not Log_File_Long_Name = "" Then Set objFSO = CreateObject("Scripting.FileSystemObject")
    If Not Log_File_Long_Name = "" Then Set objLog = objFSO.CreateTextFile(Log_File_Long_Name)
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Now()
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
  
    On Error Resume Next
    For i = 0 To 3
    Select Case i
    Case 0
        If Not Outlook_Folder = "" Then
            Set objFolder = objFolder.Folders(Outlook_Folder)
        Else
            Exit For
        End If
    Case 1
        If Not Outlook_SubFolder1 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder1)
        Else
            Exit For
        End If
    Case 2
        If Not Outlook_SubFolder2 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder2)
        Else
            Exit For
        End If
    Case 3
        If Not Outlook_SubFolder3 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder3)
        Else
            Exit For
        End If
    End Select
    Next
  
    If Not Err.Number = 0 Then
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Outlook archive path is not valid:"
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Archive =" & Chr(9) & Outlook_Archive
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Folder =" & Chr(9) & Outlook_Folder
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder1 =" & Chr(9) & Outlook_SubFolder1
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder2 =" & Chr(9) & Outlook_SubFolder2
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder3 =" & Chr(9) & Outlook_SubFolder3
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
    Exit Sub
    End If
    On Error GoTo 0
    
    Set objItems = objFolder.Items
    For mailIndex = objItems.Count To 1 Step -1
        'On Error Resume Next
        Set objMailItem = objItems.Item(mailIndex)
        If objMailItem.Attachments.Count > 0 Then
            If Not InStr(1, objMailItem.Subject, Subject_InStr, 1) = 0 Then
                If Not Log_File_Long_Name = "" Then objLog.WriteLine objMailItem.Subject
        
        On Error Resume Next
                If Get_All_Files Then
                    For i = 1 To objMailItem.Attachments.Count
                        Set PJ = objMailItem.Attachments.Item(i)
                        PJ.SaveAsFile Target_Folder & PJ.DisplayName
                        If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
                        cpt = cpt + 1
                    Next
                Else
                    Set PJ = objMailItem.Attachments.Item(1)
                    If Target_File_Name = "" Then Target_File_Name = PJ.DisplayName
                    PJ.SaveAsFile Target_Folder & Target_File_Name
                    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
                    cpt = cpt + 1
                End If
                If Not Err.Number = 0 Then
            If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Target path is not valid:"
            If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & Target_Folder
            If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
                Exit Sub
        End If
        On Error GoTo 0
  
                If Delete_Mail Then objMailItem.Delete
            End If
        End If
    Next
    
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
    If Not Log_File_Long_Name = "" Then objLog.WriteLine cpt & " attachment(s) treated"
End Sub


merci de m'aider.

signaler à un administrateur
Commentaire de philheiz le 18/05/2006 16:50:48

dans les environnements vba ou vb6 (par opposition à vbs) tu dois placer ton code dans une procédure:

sub Main
   Outlook_Archive = "Mailbox - Amaury  Raphaël"
   ...
   Call GetAttachements
end sub

signaler à un administrateur
Commentaire de dj_raph02 le 18/05/2006 16:57:20

merci, mais j'avais deja ajouté cela et ca me met : array index out of bounds

Merci d'avoir réagis si vite a mon commentaire.

signaler à un administrateur
Commentaire de philheiz le 18/05/2006 17:40:46

2 solutions:

1) tu mets TOUT le code dans la même procédure, ou
2) tu déclares les 11 premières variables au niveau du module

signaler à un administrateur
Commentaire de dj_raph02 le 19/05/2006 14:47:24

hello,

CA fonctionne, sauf que pour les sous répertoire ca va pas lire:

J'ai ceci comme mailbox.

Mailbox - Amaury Raphaël
Inbox
- R3
    + ANSWER

comment aller lire dans le repertoire answer?

Merci.

Chez moi les subfolder ne fonctionne pas!

signaler à un administrateur
Commentaire de philheiz le 19/05/2006 16:06:47

Outlook_Archive = "Mailbox - Amaury  Raphaël"
Outlook_Folder = "Inbox"
Outlook_SubFolder1 = "R3"

pour plus de couches dans les sous-répertoires, il faut modifier le code.

signaler à un administrateur
Commentaire de ajarnaud le 19/05/2006 16:55:47

salut à tous

merci CHRIS pour ta procédure, mais je l'applique comment et ou dans mon code :

Sub XXXXXX()   '30

'---------------------------------
' CHANGE THE FOLLOWING SETTINGS
'---------------------------------
Outlook_Archive = "Mailbox - arnaud julien"
Outlook_Folder = "Boîte de réception"
Outlook_SubFolder1 = "XXXXXX"
Outlook_SubFolder2 = "XXXXXX"
Outlook_SubFolder3 = ""

'Subject_InStr = "TEST AJ"
Get_All_Files = True
Delete_Mail = True

Target_Folder = "T:\"
Target_File_Name = "*.*"

Log_File_Long_Name = "C:\TEMP\VBE\Outlook.log"

'---------------------------------
' DO NOT CHANGE THE FOLLOWING CODE
'---------------------------------
'Call XXXXXXX
    cpt = 0
    Set objOutlook = CreateObject("Outlook.Application")
    Set objFolder = objOutlook.GetNamespace("MAPI").Folders(Outlook_Archive)

    If Not Log_File_Long_Name = "" Then Set objFSO = CreateObject("Scripting.FileSystemObject")
    If Not Log_File_Long_Name = "" Then Set objLog = objFSO.CreateTextFile(Log_File_Long_Name)
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Now()
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"

    On Error Resume Next
    For i = 0 To 3
    Select Case i
    Case 0
        If Not Outlook_Folder = "" Then
            Set objFolder = objFolder.Folders(Outlook_Folder)
        Else
            Exit For
        End If
    Case 1
        If Not Outlook_SubFolder1 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder1)
        Else
            Exit For
        End If
    Case 2
        If Not Outlook_SubFolder2 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder2)
        Else
            Exit For
        End If
    Case 3
        If Not Outlook_SubFolder3 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder3)
        Else
            Exit For
        End If
    End Select
    Next

    If Not Err.Number = 0 Then
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Outlook archive path is not valid:"
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Archive =" & Chr(9) & Outlook_Archive
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Folder =" & Chr(9) & Outlook_Folder
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder1 =" & Chr(9) & Outlook_SubFolder1
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder2 =" & Chr(9) & Outlook_SubFolder2
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder3 =" & Chr(9) & Outlook_SubFolder3
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
    Exit Sub
    End If
    On Error GoTo 0
    
    Set objItems = objFolder.Items
    For mailIndex = objItems.Count To 1 Step -1
        'On Error Resume Next
        Set objMailItem = objItems.Item(mailIndex)
        If objMailItem.Attachments.Count > 0 Then
            If Not InStr(1, objMailItem.Subject, Subject_InStr, 1) = 0 Then
                If Not Log_File_Long_Name = "" Then objLog.WriteLine objMailItem.Subject
        
        On Error Resume Next
                If Get_All_Files Then
                    For i = 1 To objMailItem.Attachments.Count
                        Set PJ = objMailItem.Attachments.Item(i)
                        PJ.SaveAsFile Target_Folder & PJ.DisplayName
                        If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
                        cpt = cpt + 1
                    Next
                Else
                    Set PJ = objMailItem.Attachments.Item(1)
                    If Target_File_Name = "" Then Target_File_Name = PJ.DisplayName
                    PJ.SaveAsFile Target_Folder & Target_File_Name
                    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
                    cpt = cpt + 1
                End If
                If Not Err.Number = 0 Then
            If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Target path is not valid:"
            If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & Target_Folder
            If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
                Exit Sub
        End If
        On Error GoTo 0

                If Delete_Mail Then objMailItem.Delete
            End If
        End If
    Next
    
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
    If Not Log_File_Long_Name = "" Then objLog.WriteLine cpt & " attachment(s) treated"
End Sub
'---------------------------------

signaler à un administrateur
Commentaire de mat92 le 14/06/2006 16:37:44

Merci pour ce script qui me rend déja service mais je rencontre une erreur sur celui ci et je ne trouve pas de solution. J'en appel a vous ! Voila j'essaye d'extraire une pièce jointe d'un mail qui est un mail qui lui meme contient une piece joite:  mail(mail+PJ)
Losque que le script passe il n'arrive pas a extraire le mail contenu en piece jointe et me genere un fichier de 0 ko.
Mon but finale étant d'obtenir directement les pieces jointes final dans mon répertoire. Merci d'avance

signaler à un administrateur
Commentaire de origout le 20/10/2006 17:00:48

Bonjour à tous,

merci pour ce script génial !

mon souci :
je cherche à l'utiliser sur un serveur qui n'a pas outlook mais outlookExpress
et là ca plante "Can't create object Outlook.Application"

pouvez-vous m'aider à traduire le script pour OutlookExpress... si toutefois c'est possible !

merci

signaler à un administrateur
Commentaire de Marion1594 le 19/01/2007 12:03:30

Bonjour,

Et merci pour ce script ! Mais bien sûr, ce serait encore mieux s'il fonctionnait chez moi (ultra débutante, soyez indulgents svp :-)
Alors pouvez-vous m'aider svp ?

Quand je lance la macro dans Outlook, j'obtiens le message d'erreur suivant :
"Index de la matrice en dehors des limites"

avec la ligne de code suivante surlignée :
Set objFolder = objOutlook.GetNamespace("MAPI").Folders(Outlook_Archive)

Je précise que j'ai appliqué le conseil de PHILHEIZ du 18/05/2006, à savoir :
dans les environnements vba ou vb6 (par opposition à vbs) tu dois placer ton code dans une procédure:

sub Main
   Outlook_Archive = "Mailbox - Amaury  Raphaël"
   ...
   Call GetAttachements
end sub

Merci d'avance pour votre aide !

Marion.

signaler à un administrateur
Commentaire de counifle le 08/02/2007 16:39:11

Bonjour tout le monde, et marion,

J'ai exactement le même problème que toi...
Si des experts ont une petite idée, je suis preneur.

Merci d'avance pour votre aide.
A bientot
Benoit

signaler à un administrateur
Commentaire de Marion1594 le 08/02/2007 16:49:35

COUNIFLE,

En fait il faut suivre le conseil de PHILHEIZ du 18/05, c'est-à-dire mettre tout le code dans la même procédure, ainsi :


'***********************************************
'* This script gets Outlook email attachements *
'* and saves them into a specified directory.  *
'*_____________________________________________*
'*          By Philippe Heiz, 2003.           *
'***********************************************

'---------------------------------
' CHANGE THE FOLLOWING SETTINGS
'---------------------------------
Sub Extraction()

Outlook_Archive = "XXXX"
Outlook_Folder = "XXXX"
Outlook_SubFolder1 = "XXXXX"
Outlook_SubFolder2 = ""
Outlook_SubFolder3 = ""

Subject_InStr = "XXXX"
Get_All_Files = True
Delete_Mail = False

Target_Folder = "XXXXX"
Target_File_Name = "TEST.XLS"

Log_File_Long_Name = "XXXXX"

'---------------------------------
' DO NOT CHANGE THE FOLLOWING CODE
'---------------------------------

    cpt = 0
    Set objOutlook = CreateObject("Outlook.Application")
    Set objFolder = objOutlook.GetNamespace("MAPI").Folders(Outlook_Archive)

    If Not Log_File_Long_Name = "" Then Set objFSO = CreateObject("Scripting.FileSystemObject")
    If Not Log_File_Long_Name = "" Then Set objLog = objFSO.CreateTextFile(Log_File_Long_Name)
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Now()
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"

    On Error Resume Next
    For i = 0 To 3
    Select Case i
    Case 0
        If Not Outlook_Folder = "" Then
            Set objFolder = objFolder.Folders(Outlook_Folder)
        Else
            Exit For
        End If
    Case 1
        If Not Outlook_SubFolder1 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder1)
        Else
            Exit For
        End If
    Case 2
        If Not Outlook_SubFolder2 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder2)
        Else
            Exit For
        End If
    Case 3
        If Not Outlook_SubFolder3 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder3)
        Else
            Exit For
        End If
    End Select
    Next

    If Not Err.Number = 0 Then
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Outlook archive path is not valid:"
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Archive =" & Chr(9) & Outlook_Archive
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Folder =" & Chr(9) & Outlook_Folder
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder1 =" & Chr(9) & Outlook_SubFolder1
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder2 =" & Chr(9) & Outlook_SubFolder2
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder3 =" & Chr(9) & Outlook_SubFolder3
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
    Exit Sub
    End If
    On Error GoTo 0
  
    Set objItems = objFolder.Items
    For mailIndex = objItems.Count To 1 Step -1
        'On Error Resume Next
        Set objMailItem = objItems.Item(mailIndex)
        If objMailItem.Attachments.Count > 0 Then
            If Not InStr(1, objMailItem.Subject, Subject_InStr, 1) = 0 Then
                If Not Log_File_Long_Name = "" Then objLog.WriteLine objMailItem.Subject
      
        On Error Resume Next
                If Get_All_Files Then
                    For i = 1 To objMailItem.Attachments.Count
                        Set PJ = objMailItem.Attachments.Item(i)
                        PJ.SaveAsFile Target_Folder & PJ.DisplayName
                        If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
                        cpt = cpt + 1
                    Next
                Else
                    Set PJ = objMailItem.Attachments.Item(1)
                    If Target_File_Name = "" Then Target_File_Name = PJ.DisplayName
                    PJ.SaveAsFile Target_Folder & Target_File_Name
                    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
                    cpt = cpt + 1
                End If
                If Not Err.Number = 0 Then
            If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Target path is not valid:"
            If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & Target_Folder
            If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
                Exit Sub
        End If
        On Error GoTo 0

                If Delete_Mail Then objMailItem.Delete
            End If
        End If
    Next
  
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
    If Not Log_File_Long_Name = "" Then objLog.WriteLine cpt & " attachment(s) treated"
End Sub

signaler à un administrateur
Commentaire de uzulst le 02/09/2007 17:24:31

Bonjour,

je suis encore plus que débutant.

Je vais donc poster plusieurs questions  sans svoir dans quel ordre les mettre.

1) comment et ou puis-je enregistrer ce script?
2) cela fonctionne t-il avec outlook 2003
3) quel(s)paramètre(s) dois-je modifier pour l'adapter à ma(es) messagerie(s).

Merci pour deux choses : vos réponses et votre indulgence...

signaler à un administrateur
Commentaire de thorspark le 03/09/2007 08:43:26

Bonjour :

1) Dans outlook, tu cliques sur 'Outils',puis 'Macros' puis 'Visual Basic Editor'
tu colles le script ci-dessus, tu modifies les paramètres nécessaires et tu enregistres (tu peux laisser les options par défaut). Le script est ensuite accessible. Ne pas oublier d'autoriser les scripts au niveau de Outlook dans le cas du script qui se lance à chaque arrivée de mail pour ne pas avoir de message 'Autoriser le script ?'.
2) A priori ça fonctionne avec toutes les versions après 2000.
3) Là c quand même pas dur, dans le code de philheiz ya une partie 'settings' que tu peux changer et une autre partie 'do not change the following code' ... qui veut dire ce qu'elle veut dire.

A+

signaler à un administrateur
Commentaire de uzulst le 03/09/2007 09:04:14

Merci Thorspark. Je me doutais que sans explication je ne serais pas compris ;)
En fait, j'ai copié le script qui est le plus haut dans cette page, et je reçois une erreur au niveau de cette ligne :
Outlook_Archive =    "Mailbox - Heiz, Philippe"
Je ne me rappelle plus quel est le message d'erruru ( oh le débutant hé!!) En tout cas cela empêche le script de se dérouler. D'ou mon message sur les paramètres à modifier.

Je vais essayé avec le script juste au dessus de mon post, chercher encore, et si je ne trouve rien, je vous redemanderai de l'aide.

Merci encore.

signaler à un administrateur
Commentaire de thorspark le 03/09/2007 09:14:09

Alors, pour commencer, ne copie pas le tout premier script mais le dernier en date, qui est 4 posts au dessus.
De même, si tu regardes un peu les commentaires, tu verras que le problème a déjà été posé et résolu.

Tu ne t'appelles évidemment pas 'Heiz, Philippe' et ton Outlook n'est donc pas configuré avec ce nom.

Donc, si on reprend le code de la partie à modifier :

Sub Extraction()

Outlook_Archive = "XXXX"
Outlook_Folder = "XXXX"
Outlook_SubFolder1 = "XXXXX"
Outlook_SubFolder2 = ""
Outlook_SubFolder3 = ""

Subject_InStr = "XXXX"
Get_All_Files = True
Delete_Mail = False

Target_Folder = "XXXXX"
Target_File_Name = "TEST.XLS"

Log_File_Long_Name = "XXXXX"

toutes les parties contenant XXXXX sont à modifier avec tes valeurs propres.
Par exemple, pour moi, ces valeurs sont :

Outlook_Archive = "Boîte aux lettres - Yves LAURENT"
Outlook_Folder = "Boîte de réception"
Outlook_SubFolder1 = ""
Outlook_SubFolder2 = ""
Outlook_SubFolder3 = ""

Subject_InStr = "test" <-- les messages doivent avoir le mot "test" dans le sujet pour être traités
Get_All_Files = True <-- on prend tous les fichiers en pièce jointe
Delete_Mail = True <-- on supprime le mail en fin de traitement
  
Target_Folder = "D:\" <-- j'enregistre les pièces jointes à la racine du disque D:
Target_File_Name = "" <-- le fichier garde le même nom que la pièce jointe

signaler à un administrateur
Commentaire de uzulst le 03/09/2007 09:52:39

Merci pour ce complément d'information bien utile.

Maintenant, lors de l'execution j'ai un message plein de gros mots à cette ligne :
Set objFolder = objOutlook.GetNamespace("MAPI").Folders(Outlook_Archive)
le message :
errue d'execution -2147221233 (80004010f)
Impossible d'executer l'opéraiotn. Impossible de trouver un objet.

signaler à un administrateur
Commentaire de thorspark le 03/09/2007 10:05:00

Il n'arrive pas à trouver ton "Outlook_Archive", vérifie bien l'orthographe de ton paramètre pour qu'il corresponde exactement à ce que tu as sous Outlook (accents et espaces).
Sous outlook, tu trouveras cette valeur dans le menu de gauche 'liste des dossiers', à la racine, entre crochets (ex : Outlook Aujourd'hui - [Boîte aux lettres - Yves LAURENT])

signaler à un administrateur
Commentaire de uzulst le 03/09/2007 10:19:03

Merci !! après quelques modifications, grâce à tes conseils, j'ai réussi à dérouler le script en entier, mais rien n'est sauvegardé dans le dossier cible.

signaler à un administrateur
Commentaire de uzulst le 03/09/2007 14:33:07

A Y EST !! je n'ai pas de rouleau de papier toilette comme dans une vieille publicité ;) mais j'ai réussi à faire fonctionner les script sur ma messagerie. Subsiste tout de même deux problèmes :

1) la sauvegarde se fait à la racine de d:\ alors que j'ai spécifié le chemin d:\test

2) cette sauvegarde ne se fait pas sur un dossier personnel de ma messagerie, juste sur ma boite de réception. j'ai essayé de modifier les paramètres de recherche et d'indiquer d'autres dossiers, mais rien n'y fait.

Merci de votre aide

signaler à un administrateur
Commentaire de thorspark le 03/09/2007 14:40:34

1) spécifie bien d:\test\ en n'oubliant pas le dernier "\"

2)change les paramètres :

Outlook_Folder = "Boîte de réception"
Outlook_SubFolder1 = "nom de mon sous dossier dans la boite de réception"
Outlook_SubFolder2 = ""
Outlook_SubFolder3 = ""

signaler à un administrateur
Commentaire de uzulst le 03/09/2007 18:24:47

J'ai bien essayé, mais le dossier dont j'ai besoin ne fait pas partie de la boite de réception, c'est un autre dossier personnel que j'alimente par une règle de message. Pour l'instant j'ai contourné cela en désactivant la règle, mais s'il y a un autre moyen je suis preneur.

Autre question : je cherche un moyen pour manipuler des fichiers excel suite à la récupération des pièces jointes:

1) concaténer deux fichiers dans un seul
2) le nom des fichers est modifié chaque jour

Merci (une fois de plus) de votre aide

signaler à un administrateur
Commentaire de uzulst le 03/09/2007 20:52:45

Encore une question  !!

Comment puis-je donner plusieurs mots à cet endroit :
Subject_InStr = "XXXX"

Merci

P.S : je pose beaucoup de question, mais je cherche quand même !!!!

signaler à un administrateur
Commentaire de thorspark le 04/09/2007 08:55:55

Si ce dossier ne fait pas partie de la boite de réception, alors c'est qu'il faut que tu modifies la variable Outlook_Folder avec autre chose que "Boîte de réception" ...

Pour concaténer 2 fichiers, ça peut effectivement marcher de manière simple sur des fichiers textes, mais je doute que ce soit aussi simple sur des fichiers excel.

La seule méthode qui me vient à l'esprit serait effectivement d'ouvrir les 2 fichiers excel en tant qu'objets excel et de parcourir le second fichier pour ajouter les valeurs au premier.

Le mieux serait de poster un nouveau sujet, car celà n'a pas de rapport avec celui-ci.

Pour un peu de doc sur les objets excel, avec méthodes et propriétés : http://msdn2.microsoft.com/fr-fr/library/wss56bz7(VS.80).aspx

signaler à un administrateur
Commentaire de uzulst le 04/09/2007 09:26:41

Merci pour tous ces indices de recherche. Concernant la modification de la variable Outlook_Folder, j'ai essayé mais je n'ai pour l'instant pas réussi à le faire fonctionner...l'espoir faisant vivre je continue à essayer et je vous ferais part de mes avancées.

Merci encore.

signaler à un administrateur
Commentaire de msappdem le 05/02/2008 09:36:26

Bonjour,

Ce code fonctionne parfaitement O2k2 et O2k3, j'essaie tout de même d'y apporter quelques modifications mais je peine.
Je souhaiterais qu'à la place de supprimer le mail complet lorsque Delete_Mail = True qu'il remplace la pièce jointe d'origine par un fichier texte ou un autre type 1 voir 2 ko pas plus, portant le même nom que la pièce jointe d'origine (sauf extension) ce qui permet de garder une traçabilité du mail en cas de recherche. Je souhaiterais aussi qu'un contrôle sur l'existence du fichier soit fait avant la copie car si un fichier porte le même nom il est tout simplement écrasé.

Auriez-vous des pistes me permettant d'avancer ?

D'avance merci et merci pour ce code !

signaler à un administrateur
Commentaire de lenclos157 le 06/02/2008 08:59:59

Bonjour,

J ai testé ce script et il fonctionne impeccable chez moi.

Il est super mais j'ai un petit problème lorsqu il doit traiter des emails cryptés.

Il n'arrive pas à enregistrer les fichiers attachés

Etant débutant dans ce domaine quelqu un aurait il une piste?

Merci à tous

signaler à un administrateur
Commentaire de msappdem le 06/02/2008 09:37:55

Bonjour,

Après quelques recherches j'ai apporté des modifications selon mon fonctionnement mais je ne suis pas dev, cette macro fonctionne avec une règle automatique en tête de liste. J'ai utilisé la partie Delete_Mail pour supprimer la pièce jointe et modifier le sujet (pour garder le mail et avoir une trace de la pièce jointe) d'ailleur j'aurrais preféré ajouter le nom des pièces jointes dans le contenu du mail mais je n'ai pas trouvé. Voila le code si les pro VB pouvais me dire ce qu'ils en penssent :

Dim NBAleatoire As Integer

'---------------------------------
' CHANGE THE FOLLOWING SETTINGS
'---------------------------------
Sub Extraction_PJ(item As Outlook.MailItem)

Outlook_Archive = "Dossiers personnels"
Outlook_Folder = "Boîte de réception"
Outlook_SubFolder1 = ""
Outlook_SubFolder2 = ""
Outlook_SubFolder3 = ""

Subject_InStr = ""
Get_All_Files = True
Delete_Mail = True

Target_Folder = "D:\test\"
Target_File_Name = ""

Log_File_Long_Name = "D:\test\log_O2K3.log"

'---------------------------------
' DO NOT CHANGE THE FOLLOWING CODE
'---------------------------------

    cpt = 0
    Set objOutlook = CreateObject("Outlook.Application")
    Set objFolder = objOutlook.GetNamespace("MAPI").Folders(Outlook_Archive)

    If Not Log_File_Long_Name = "" Then Set objFSO = CreateObject("Scripting.FileSystemObject")
    'If Not Log_File_Long_Name = "" Then Set objLog = objFSO.CreateTextFile(Log_File_Long_Name)
    
    If Not Log_File_Long_Name = "" Then
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If Not objFSO.FileExists(Log_File_Long_Name) Then
       Set objLog = objFSO.CreateTextFile(Log_File_Long_Name)
    Else
       Set objLog = objFSO.OpenTextFile(Log_File_Long_Name, 8, 0)
        End If
    End If

    If Not Log_File_Long_Name = "" Then objLog.WriteLine Now()
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"

    On Error Resume Next
    For i = 0 To 3
    Select Case i
    Case 0
        If Not Outlook_Folder = "" Then
            Set objFolder = objFolder.Folders(Outlook_Folder)
        Else
            Exit For
        End If
    Case 1
        If Not Outlook_SubFolder1 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder1)
        Else
            Exit For
        End If
    Case 2
        If Not Outlook_SubFolder2 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder2)
        Else
            Exit For
        End If
    Case 3
        If Not Outlook_SubFolder3 = "" Then
            Set objFolder = objFolder.Folders(Outlook_SubFolder3)
        Else
            Exit For
        End If
    End Select
    Next

    If Not Err.Number = 0 Then
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Outlook archive path is not valid:"
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Archive =" & Chr(9) & Outlook_Archive
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_Folder =" & Chr(9) & Outlook_Folder
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder1 =" & Chr(9) & Outlook_SubFolder1
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder2 =" & Chr(9) & Outlook_SubFolder2
    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & "Outlook_SubFolder3 =" & Chr(9) & Outlook_SubFolder3
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
    Exit Sub
    End If
    On Error GoTo 0
  
    Set objItems = objFolder.Items
    For mailIndex = objItems.Count To 1 Step -1
        'On Error Resume Next
        Set objMailItem = objItems.item(mailIndex)
        If objMailItem.Attachments.Count > 0 Then
            If Not InStr(1, objMailItem.Subject, Subject_InStr, 1) = 0 Then
                If Not Log_File_Long_Name = "" Then objLog.WriteLine objMailItem.Subject
      
        On Error Resume Next
                If Get_All_Files Then
                    For i = 1 To objMailItem.Attachments.Count
                        Set PJ = objMailItem.Attachments.item(i)
                        
                        File = Target_Folder & PJ.DisplayName
                                                
                        If Dir(File, vbNormal Or vbReadOnly Or vbHidden Or vbSystem Or vbArchive) = "" Then
                            PJ.SaveAsFile Target_Folder & PJ.DisplayName ' Copie du fichier
                        Else
                            File = Split(File, ".") ' Découpe selon le .
                            Randomize   ' Initialise le générateur de nombre aléatoire.
                            NBAleatoire = CInt(Int((200 * Rnd()) + 1)) ' Génère un nombre aléatoire
                            PJ.SaveAsFile File(0) & "_" & NBAleatoire & "." & File(1) ' Copie du fichier renommé
                        End If
                                                
                        If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
                        cpt = cpt + 1
                    Next
                Else
                    Set PJ = objMailItem.Attachments.item(1)
                    If Target_File_Name = "" Then Target_File_Name = PJ.DisplayName
                    PJ.SaveAsFile Target_Folder & Target_File_Name
                                                        
                    If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & PJ.DisplayName
                    cpt = cpt + 1
                End If
                If Not Err.Number = 0 Then
            If Not Log_File_Long_Name = "" Then objLog.WriteLine "ERROR: Target path is not valid:"
            If Not Log_File_Long_Name = "" Then objLog.WriteLine Chr(9) & Target_Folder
            If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
                Exit Sub
        End If
        On Error GoTo 0
If Delete_Mail Then
SBase = objMailItem.Subject 'Sujet de Base
SModi = SBase & " | PJ : " & File 'Sujet Modifié
objMailItem.Subject = SModi 'Modification du sujet
PJ.Delete ' Suppression du fichier
End If
            End If
        End If
    Next
  
    If Not Log_File_Long_Name = "" Then objLog.WriteLine "-------------------------"
    If Not Log_File_Long_Name = "" Then objLog.WriteLine cpt & " attachment(s) treated"
End Sub

Merci

signaler à un administrateur
Commentaire de ajarnaud le 24/09/2008 17:17:04

bonjour,

je reviens faire partager ma dernière trouvaille, en fait je bosse pas souvent dessus faute de temps

voila, précédement je disais qu'en ajoutant "item As Outlook.MailItem" pour qu'il soit visible en script à partir des regles Outlook faisait qu'il ne fonctionnait plus

en fait, le script fonctionne toujours, mais le problème vient qu'il est éxécuté avant qu'il ne soit déplacé dans les sous répertoires de ma boite de réception (je ne veux pas scruter le contenu de ma boite entière)

donc mon problème maintenant et de faire exetuter ce script en dernier, dans les regles il est bien en dernier mais s'execute dès l'arrivée du mail

si quelqu'un à une idée

merci d'avance

aj

signaler à un administrateur
Commentaire de lechris le 13/11/2008 16:22:09

Bonjour,

Le script marche nickel chrome ^^

Comment placer plusieurs mots dans la variable : Subject_InStr
avoir plusieurs OBJET donc !

Merci d'avance
@+

signaler à un administrateur
Commentaire de wiseman911 le 20/11/2008 22:15:07

Bonjour je viens d'essayer le code et il bloque au niveau de Outlook_Archive

J'ai installer Outlook en francais et ensuite modifier la langue en Anglais .
Donc tou mon outlook est en Anglais mais j'ai encore mes dossier en francais style "Dossiers personnels", " boite de reception", etc

j'ai modifier le code ainsi

Outlook_Archive = "Dossiers personnels"
Outlook_Folder = "Boîte de réception"
Outlook_SubFolder1 = "XXX"

mais cela me renvoi l'erreur

Compile error
Invalide outside procedure

Une autre question au niveau de Subfolder 2, 3 est-ce les sous-sous-dossier dont il s'agit ?



Je debute en VB et j'ai tout un projet de tri automatique de fichier attacher a creez pouvez m'aider ?

Merci d'avance

signaler à un administrateur
Commentaire de wiseman911 le 20/11/2008 22:28:09

bonjour je reviens ma demande ci dessus, j'ai oublier de signaler que j'ai mis mon code VB dans le Visual Basic de Outlook sans etre sur qu'il peut etre placer la .

Merci d'avance

signaler à un administrateur
Commentaire de thorspark le 21/11/2008 09:08:51

Bonjour Wiseman

Alors, tout d'abord, inutile de mettre outlook en anglais, le script fonctionne quelle que soit la langue, c'est juste le langage de programmation VB qui est en anglais.

Ton Outlook_Archive doit correspondre à ton premier niveau dans l'arborescence.
Dans ton outlook, si tu as l'onglet "Tous les dossiers" qui est affiché à gauche, tu dois voir l'arborescence de tes répertoires outlook. Ca ressemble à qque chose comme ça :

- Boîte aux lettres - Jean Dupont  <--- Outlook_Archive
   - Boîte de réception  <--- Outlook_folder
      - dossier perso 1  <--- Outlook_SubFolder1
      - dossier perso 2  <--- Outlook_SubFolder1
      - ...
   - Boîte d'envoi       <--- Outlook_folder
   - Brouillons
   - Courrier indésirable
   - ...

Assure toi donc de bien mettre la bonne valeur, qui correspond au premier niveau de ton arborescence de répertoires

signaler à un administrateur
Commentaire de wiseman911 le 21/11/2008 11:28:09

Bonjour merci pour votre réponse hélas je ne vois pas le dossier boite aux lettres peut etre parce que je possède office pro 2007 .

Mon plus au niveau à mon avis est - Dossiers personnels
                                      - Boite de reception
Merci d'avance

signaler à un administrateur
Commentaire de LaurentOcean le 16/12/2008 22:34:04

Bonjour,
Comment faire pour déplacer le mail dans un folder dédié après avoir enregistré la pièce jointe? (plutot qu'un delete du mail)

Merci d'avance

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Comment récupérer les pièces jointes sur outlook pour les stockées dans un new répertoire [ par caro95 ] je n'arrive pas à récupérer les pièces jointes sur outlook pour les mettre dans un autre répertoire sur le disque qql pourrait il m'aider ? merci d'av Pièces jointes dans Outlook [ par Missquina ] Bonjour, Je cherche une solution afin de rajouter une commande dans le menu contextuel qui apparait lorsque l'on s&#233;lectionne une pi&#232;ce joint Enregistrer toutes les pièces jointes d'une BAL outlook dans un dossier spécifié [ par Nosunwillshine ] Bonjour,tout est dans le titre : je cherche un script .vbs qui permettrait de récupérer toutes les pièces jointes contenues dans la boite de réception Macro Word et Outlook [ par juju91650 ] Bonjour à tous,Voila je vous explique mon petit soucis :(J'ai une macro qui fonctionne parfaitement sur outlook 2000 mais dessus il y a deux compte ma Ouvrir un mail sous outlook avec vb.net 2008 [ par whitelegend ] Bonjour,Je code sous visual studio 2008 et je souhaiterai pourvoir ouvrir un mail sous outlook ( le code devient assez restreint en utilisation certai Impression d'une sélection de mail contenant des pièces jointes [ par halphorg ] Bonjour, Je recherche une macro vba pour Outlook 2007 me permettant via un bouton d'imprimer les mails sélectionnés et leurs pièces jointes. Cette fon Microsoft Outlook 2003 [ par nanuhka ] Tout à l'heure j'ai posé une question sans beaucoup de détails. Voici le message qui s'affiche lorsque je souhaite démarrerce sacré Outlook 2003:Impos Messagerie - Pièces jointes [ par foofur ] Bonjour, Je cherche comment faire pour me connecter sur une adresse de messagerie sachant que je voudrais entrer le mot de passe de cette dernière en Sauver messages et pièces jointes pour un nul [ par bryanfl ] bonjour,avec les différents scripts trouvé sur ce site, j'ai essayé de faire un 'merge' pour obtenir un outil afin de sauver en une fois tous les mess Effacement de pièces jointes à un e-mail [ par gepipg ] Bonjour,J'ai b&#226;ti un petit code qui me permet d'envoyer plusieurs messages avec des pi&#232;ces jointes &#224; diff&#233;rents destinataires.Malh


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


HTC Magic

Entre 429€ et 429€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.