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

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 - 26 janv. 2005 à 01:08
 madysse - 8 avril 2014 à 09:19
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29075-script-qui-permet-d-extraire-des-pieces-jointes-outlook-et-de-les-enregistrer

C'est de la balle, ça marche direct. Chapeau bas monsieur !
Merci
Utilisateur anonyme
20 mai 2012 à 22:26
Bonjour,

Merci pour ce code, j'aurais voulu savoir s'il était possible de limiter le script aux pièces jointes portant seulement certaines extensions (ex: .m4r) et de se contenter de les ouvrir plutôt que de les enregistrer?

Merci d'avance!
cs_gradzila Messages postés 2 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 16 mai 2012
16 mai 2012 à 17:18
Bonjour, merci pour ce script qui fonctionne très bien mais je voudrais qu'il puisse traiter plusieurs messages entrants avec des pièces jointes, avec pour seule différence entre les mails,le contenu de l'objet, la cible ou je sauvegarde la pièce jointe accessoirement le nom du fichier.
D avance merci pour votre aide
lucky2529 Messages postés 1 Date d'inscription mardi 26 février 2008 Statut Membre Dernière intervention 3 octobre 2010
3 oct. 2010 à 21:54
Bonjour
Super c'est le code que je recherchais depuis longtemps, encore merci
parc contre il n'arrive pas à enregistrer les PJ des Emails dont l'objet est vide, connais tu la parade?

Merci d'avance
cs_LaurentOcean Messages postés 1 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 16 décembre 2008
16 déc. 2008 à 22:34
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
wiseman911 Messages postés 3 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 21 novembre 2008
21 nov. 2008 à 11:28
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
thorspark Messages postés 15 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 24 août 2009
21 nov. 2008 à 09:08
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
wiseman911 Messages postés 3 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 21 novembre 2008
20 nov. 2008 à 22:28
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
wiseman911 Messages postés 3 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 21 novembre 2008
20 nov. 2008 à 22:15
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
cs_lechris Messages postés 3 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 13 novembre 2008
13 nov. 2008 à 16:22
Bonjour,

Le script marche nickel chrome ^^

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

Merci d'avance
@+
ajarnaud Messages postés 9 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 24 septembre 2008
24 sept. 2008 à 17:17
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
msappdem Messages postés 4 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 6 février 2008
6 févr. 2008 à 09:37
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
lenclos157 Messages postés 1 Date d'inscription lundi 4 février 2008 Statut Membre Dernière intervention 6 février 2008
6 févr. 2008 à 08: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
msappdem Messages postés 4 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 6 février 2008
5 févr. 2008 à 09:36
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 !
uzulst Messages postés 8 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 4 septembre 2007
4 sept. 2007 à 09:26
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.
thorspark Messages postés 15 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 24 août 2009
4 sept. 2007 à 08: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
uzulst Messages postés 8 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 4 septembre 2007
3 sept. 2007 à 20:52
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 !!!!
uzulst Messages postés 8 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 4 septembre 2007
3 sept. 2007 à 18:24
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
thorspark Messages postés 15 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 24 août 2009
3 sept. 2007 à 14:40
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 = ""
uzulst Messages postés 8 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 4 septembre 2007
3 sept. 2007 à 14:33
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
uzulst Messages postés 8 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 4 septembre 2007
3 sept. 2007 à 10:19
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.
thorspark Messages postés 15 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 24 août 2009
3 sept. 2007 à 10:05
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])
uzulst Messages postés 8 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 4 septembre 2007
3 sept. 2007 à 09:52
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.
thorspark Messages postés 15 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 24 août 2009
3 sept. 2007 à 09:14
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
uzulst Messages postés 8 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 4 septembre 2007
3 sept. 2007 à 09:04
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.
thorspark Messages postés 15 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 24 août 2009
3 sept. 2007 à 08:43
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+
uzulst Messages postés 8 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 4 septembre 2007
2 sept. 2007 à 17:24
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...
Marion1594 Messages postés 2 Date d'inscription vendredi 19 janvier 2007 Statut Membre Dernière intervention 8 février 2007
8 févr. 2007 à 16:49
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
cs_counifle Messages postés 1 Date d'inscription jeudi 23 mars 2006 Statut Membre Dernière intervention 8 février 2007
8 févr. 2007 à 16:39
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
Marion1594 Messages postés 2 Date d'inscription vendredi 19 janvier 2007 Statut Membre Dernière intervention 8 février 2007
19 janv. 2007 à 12:03
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.
origout Messages postés 1 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 octobre 2006
20 oct. 2006 à 17:00
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
cs_mat92 Messages postés 1 Date d'inscription mercredi 14 juin 2006 Statut Membre Dernière intervention 14 juin 2006
14 juin 2006 à 16:37
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
ajarnaud Messages postés 9 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 24 septembre 2008
19 mai 2006 à 16:55
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
'---------------------------------
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
19 mai 2006 à 16:06
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.
dj_raph02 Messages postés 3 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 19 mai 2006
19 mai 2006 à 14:47
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!
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
18 mai 2006 à 17:40
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
dj_raph02 Messages postés 3 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 19 mai 2006
18 mai 2006 à 16:57
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.
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
18 mai 2006 à 16:50
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
dj_raph02 Messages postés 3 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 19 mai 2006
18 mai 2006 à 10:31
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.
patacra Messages postés 2 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 12 mai 2006
12 mai 2006 à 11:25
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.
_-=chris=-_ Messages postés 5 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 12 mai 2006
12 mai 2006 à 10:40
Attention car ItemAdd s'applique également aux Drag and Drop !
_-=chris=-_ Messages postés 5 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 12 mai 2006
12 mai 2006 à 10: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 ?!?
patacra Messages postés 2 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 12 mai 2006
9 févr. 2006 à 15:35
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
thorspark Messages postés 15 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 24 août 2009
31 janv. 2006 à 12:22
Désolé pour le double message, un bug s'est produit lors de la validation
thorspark Messages postés 15 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 24 août 2009
31 janv. 2006 à 12:20
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
thorspark Messages postés 15 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 24 août 2009
30 janv. 2006 à 15:29
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 ?
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
30 janv. 2006 à 08:52
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.
ajarnaud Messages postés 9 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 24 septembre 2008
28 janv. 2006 à 09:09
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
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
27 janv. 2006 à 09:41
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
thorspark Messages postés 15 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 24 août 2009
26 janv. 2006 à 17:41
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
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
26 janv. 2006 à 14:43
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'.
thorspark Messages postés 15 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 24 août 2009
25 janv. 2006 à 14:10
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.
cs_eldrad95 Messages postés 1 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 décembre 2005
9 déc. 2005 à 12:59
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 ?
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
28 nov. 2005 à 09:44
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.
cs_fredmj Messages postés 5 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 1 décembre 2008
27 nov. 2005 à 22:16
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
ajarnaud Messages postés 9 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 24 septembre 2008
4 nov. 2005 à 07:16
Merci JUJUDEBUTVB je test ce matin et te tiens au courant

AJ
jujudebutvb Messages postés 5 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 3 novembre 2005
3 nov. 2005 à 08:42
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.
jujudebutvb Messages postés 5 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 3 novembre 2005
21 oct. 2005 à 09:22
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.
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
20 oct. 2005 à 19:51
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.
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
20 oct. 2005 à 19:31
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
jujudebutvb Messages postés 5 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 3 novembre 2005
20 oct. 2005 à 09:05
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.
jujudebutvb Messages postés 5 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 3 novembre 2005
20 oct. 2005 à 08:44
Philheiz: oui ce sont des fichiers textes ayant la même structure que je dois fusionner. Savez-vous comment faire ? Merci d'avance
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
18 oct. 2005 à 20:04
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.
jujudebutvb Messages postés 5 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 3 novembre 2005
18 oct. 2005 à 13:52
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.
hibougarou Messages postés 1 Date d'inscription dimanche 19 juin 2005 Statut Membre Dernière intervention 2 août 2005
2 août 2005 à 11:52
Bonjour,
moi j'aimerais ouvrir outlook avec un script. J'arrive à le fermer, mais je n'arrive pas à l'ouvrir. Merci de votre aide.
chris9124 Messages postés 10 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 19 août 2005
6 juil. 2005 à 12:24
Merci :-D
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
6 juil. 2005 à 11:20
utilise la propriété Body de l'objet MailItem
chris9124 Messages postés 10 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 19 août 2005
6 juil. 2005 à 01:04
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
cs_mehdi2 Messages postés 1 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 16 juin 2005
16 juin 2005 à 17:27
Bravo, simple efficace
ajarnaud Messages postés 9 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 24 septembre 2008
12 mai 2005 à 10:25
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
ajarnaud Messages postés 9 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 24 septembre 2008
12 mai 2005 à 10:25
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
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
11 mai 2005 à 19:14
à 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.
ajarnaud Messages postés 9 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 24 septembre 2008
11 mai 2005 à 16:37
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
tetrium Messages postés 2 Date d'inscription mardi 15 mars 2005 Statut Membre Dernière intervention 17 mars 2005
17 mars 2005 à 09:23
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
zzj Messages postés 2 Date d'inscription mercredi 16 mars 2005 Statut Membre Dernière intervention 17 mars 2005
17 mars 2005 à 00:48
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?
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
16 mars 2005 à 20:08
"Boîte de réception" p.ex.
tetrium Messages postés 2 Date d'inscription mardi 15 mars 2005 Statut Membre Dernière intervention 17 mars 2005
15 mars 2005 à 15:15
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
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
27 janv. 2005 à 00:20
Maintenant c'est plus clair :), merci pour ce code utile.

8/10
jmlucienvb Messages postés 129 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 12 février 2009
26 janv. 2005 à 13:34
Qq'un a-t-il une idée pour faire la même chose sur Lotus Notes ?
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
26 janv. 2005 à 09:27
va voir :
http://www.vbfrance.com/code.aspx?ID=29079

tu risques te trouver ta réponse.
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
26 janv. 2005 à 09:24
tu dois pouvoir configurer ca dans Outlook.

Si tu as Norton, tu dois probablement désactiver la sécurité anti-script.
cs_lapinblanc Messages postés 30 Date d'inscription mardi 28 janvier 2003 Statut Membre Dernière intervention 28 décembre 2006
26 janv. 2005 à 09:12
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.
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
26 janv. 2005 à 09:11
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\...
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
26 janv. 2005 à 01:08
A quoi ça sert ???
Rejoignez-nous