Augmenter votre productivité avec outlook

Des macros et automatismes pour augmenter votre productivité avec Outlook et exchange

Introduction


Cette macro est issue d'un constat que j'imagine pouvoir partager assez facilement : nous recevons trop de mails, ces mails sont (trop) souvent envoyés à tort et à travers dans l'entreprise sans que vous soyez vraiment concernés, ils sont souvent associés de gros fichiers attachés qui ont la fâcheuse habitude de vous saturer votre boîte exchange, bref tout cela devient difficilement gérable.
Il y a quelque temps déjà, j'ai donc décidé d'écrire une ou deux macros dans outlook pour m'aider à gérer tout cela. Au fil du temps, c'est devenu un ensemble de fonctionnalités et de petits outils qui pourront vous aider tous les jours, je l'espère.

Crédits et Remerciements


Ces macros utilisent quelques outils glanés sur internet ou réalisés sur mesure, merci donc à :

Merci également aux "beta testeurs" qui ont bien voulu risquer leur config outlook  depuis le début : Patrick, Sylvain-Pierre, Cham, Benoît, Marc...

Fonctionnalités et pré-requis

Les fonctionnalités actuellement gérées par la macro sont :

Ces macros fonctionnent tous les jours sur mon PC sous windows XP PRO+Outlook 2003+Exchange
Elle a fonctionné (mais je n'ai pas testé depuis longtemps) sur Windows 2000 et outlook 2000 et 2002.
Pour réaliser l'installation, il faut être administrateur local du poste.

Toutes ces macros manipulent des objets 'mails', mais ne touchent pas aux autres objets d'outlook (rendez-vous, notes..) et par conséquent ne zippent pas les attachs de ces éléments là.

Comment j'ai organisé mon outlook

L'utilisation de ces macros est adaptée à ma façon de m'organiser avec outlook. Ainsi si vous êtes organisé diféremment, il est possible que l'utilisation de ces macros ne soient pas optimale :

J'utilise donc outlook au travail, en connexion avec un serveur exchange (exchange, sa version, etc.. ne sont pas déterminants).
J'utilise en priorité (et uniquement) ma boîte de réception exchange.
Je ne stocke pas à long terme mes mails le répertoire principal d'arrivée des mails : seuls les mails non encore lus et à traiter (même s'ils sont lus) sont laissés dans la boîte principale => target 0 mails dans la boîte de réception.
J'utilise les petits drapeux de rappels et la notion lu/non lu dans cette inbox pour gérer les priorités de traitement/lecture.
Dès que j'ai lu et/ou traité un mail, je le déplace dans un des répertoires et sous répertoires de ma boîte de réception exchange : j'utilise des dizaines de répertoires (organisés par thèmes) pour ranger mes mails.
Chacun de ces répertoire dispose d'une règle d'autoarchivage (souvent celle que j'ai définie par défaut) qui archive les vieux mails (traités donc : il n'y a pas de règle d'archivage dans ma inbox) dans des pst.
Quand un .pst devient trop gros (quelques gigas) je le grave et j'en démarre un nouveau.

La macro s'applique donc principalement (en tout cas elle est testée dessus) sur un environnement outlook-exchange avec une utilisation de la boite stockée sur exhange et des .pst uniquement utilisés en archivage (lecture seule pour la consultation / écriture via des règles d'autoarchivage).

Installation et Configuration

Configuration


La configuration s'effectue en éditant un certain nombre de variables globales situées dans le début du code source de la macro. Ainsi si ce n'est pas encore présent, ouvrez outlook, ouvrez l'éditeur visual basic et double cliquez sur 'ThisOutlookSession'

Descendez dans le code jusqu'à trouver la zone suivante :

 

'=====================================================================================================================

' == Fonctionnalités (et activations / Désactivations des fonctionnalités)

'=====================================================================================================================

 

Le premier bloc concerne les fonctionnalités que vous souhaitez activer ou désactiver. Par défaut, toutes les fonctionnalités qui fonctionnent sont activées (la fonctionnalité 6 ne fonctionne pas et donc est inutile).
ex : Pour autoriser le zip automatique des attachs des mails entrants, placez à 1 la variable mi_FUNC01, pour le désactiver, placez la variable à 0

Faites de même avec les autres fonctionnalités : la correspondance des fonctionnalité est dans le source, mais en voici un tableau récapitulatif :

N° Fonction Fonctionnalité
mi_FUNC01 Zip auto mails entrants
mi_FUNC02 Zip auto mails sortants
mi_FUNC03 Déplace mails non destinataire
mi_FUNC04 Gestion des Quotas
mi_FUNC05 Rattapage auto dans la inbox des mails non traités par la macro
mi_FUNC06 <NON FONCTIONNEL>
mi_FUNC07 refuse les mails entrants trop volumineux

Les paramètres suivants sont situés juste en dessous dans la zone 'Constantes / paramètres' :

Fin de l'installation

Niveau de sécurité des macros et signature de la macro

Depuis outlook 2002, microsoft est plus 'difficile' dans sa gestion de la sécurité et particulièrement autours des macros. Si vous utilisez un outlook 2002 ou supérieur, vous allez certainement avoir un message d'avertissement qui vous demande d'exécuter ou non la macro. Ou pire, certains niveaux de sécurités interdisent complètement l'exécution des macros.
Si vous le sentez bien, vous pouvez soit :
- baisser le niveaux de sécurité d'outlook pour autoriser le lancement de cette macro
- laisser le niveau de sécurité comme il est, mais signer le code : cela permet en gros de dire à outlook que ce code est un code de confiance et qu'il peut l'exécuter. Pour signer le code, il faut suivre une procédure qui est décrite ici par microsoft.

Détail et revue des fonctions

Zipper les fichiers attachés

Le principe est le suivant :
Vous pouvez empêcher qu'un email soit traité par cette fonction en ajoutant [NOZIP] au début de l'objet de votre message. Cette fonctionnalité marche aussi bien pour un émetteur qui vous envoie un mail (et met [NOZIP] dans l'objet) que pour vous qui envoyez un mail dont vous ne souhaitez pas zipper les attachs. Cette entête [NOZIP] sera supprimé de l'objet du mail une fois traité par la macro.

Déplacement des mails non destinataire

Il est nécessaire de détailler ce que j'appelle "non destinataire" et pourquoi je n'ai pas utilisé les règles standard de routage d'outlook qui permettent de déplacer les mails 'où je suis en copie' :
La grosse différence est précisément que la règle outlook route les mails où je suis explicitement en copie, alors que la macro destinataire 'rejette' tous les mails ou le nom recherché n'est pas explicitement dans les destinataires.

Par exemple, si je m'appelle Dupont : un mail envoyé à une liste 'Tous les interlocuteurs' ne sera pas traitée par la règle outlook mais sera déplacée par la fonction 'non destinataire', car le mot 'Dupont' n'est pas présent dans le champ destinataire.

Attention toutefois, même si c'est une fonction que j'ai voulu et que j'ai choisi de mettre en place, elle peut vous faire rater un certain nombre de mails importants si vous ne vérifiez pas votre répertoire de copie et si vous êtes régulièrement dans des listes ou des alias.

Gestion des Quotas

Le principe est, une fois tous les filtrages et déplacement réalisés, de compter les mails que l'on reçoit chaque jour dans la boîte de réception et de réaliser une action une fois un 'nombre raisonnable de mails à traiter par jour' est dépassé.

Au départ, je souhaitais rejeter tout mail au delà du quota (en le renvoyant à l'expéditeur par exemple, avec un message particulier expliquant le principe), mais je n'ai pas osé pousser le modèle : le monde de l'entreprise n'est pas encore prêt... (imaginez que le 1er mail au delà de votre quota est un mail de votre directeur général et qu'il est seulement 14h : votre mail automatique de rejet sera-t-il bien reçu et compris ? Je n'en suis pas certain ; il faut au moins une politique des mails un peu évoluée dans votre entreprise pour y arriver...et peut être une gestion de quota plus 'fine' (white-lists, black-list, détermination auto des 'collègues spammeurs'...)

En attendant, j'ai opté pour une solution 'passive' : tout mail qui dépasse le quota devient un mail de faible importance, cela permet de roder la solution.

Regardez un coup de temps en temps votre répertoire de comptage, cela vous permettra d'avoir une idée de la quantité de mails que vous recevez, vous serez surpris je pense.

Rattrapage des mails non traités (fonction 05)

Le principe de cette fonction n'est pas clair à comprendre en lisant le titre...j'en ai conscience, mais je n'ai pas trouvé de titre clair.
Le sujet est assez simple finalement : toutes ces macros sont résolument des programmes qui s'exécutent du côté client (dans votre outlook), donc si vous fermez outlook, recevez des mails pendant qu'outlook est fermé et que vous réouvrez outlook, alors vous allez avoir un tas de mails dont les attachs ne sont pas zippées, dont les  envois en copie ne sont pas déplacés, etc...
Cette fonction sert à rattraper le retard : au prochain mail que vous recevrez, il sera traité normalement par la macro, puis la fonction de rattrapage s'enclenchera et scannera toute la inbox à le recherche de mails qui n'ont pas été traités et va les traiter.

Vous pouvez également lancer manuellement ce traitement à tout moment en exécutant directement la macro 'ScanneInbox' : dans outlook / Outils / Macro / Macros : choisissez 'scanneInbox' puis exécuter.

Refuser les mails trop volumineux

Contrairement à la gestion des quotas où je ne suis pas allé au bout de la démarche, j'ai voulu forcer un changement de comportement déviant dans l'utilisation des mails qui consiste à mettre n'importe quoi en attach sans vérifier, et de balancer les mails à 150 personnes en destinataires et 300 en copie...
Cette fonction va donc décider qu'un mail est définitivement trop gros et va purement et simplement le supprimer, l'annihiler définitivement. Un mail sera envoyé au destinataire pour lui suggérer de chercher une autre solution plus efficace qu'un mail pour partager ses données.

Bien sûr avant de rejeter on aura déjà zippé les attachs pour essayer de réduire la taille.

Le texte de réponse est pour l'instant directement dans le code de la fonction et dit ceci (en cas de mail avec des attachs) :
Objet : Message dépassant la taille maximale
Texte :
[Ceci est un message généré automatiquement]
Votre message : [objet du message] n'a pas été délivré au destinataire.
Même après avoir compressé les fichiers attachés, ce mail a encore une taille de : xxx ko

Le destinataire n'a pas été informé de ce message.
Le Message n'a pas été délivré ; il a été supprimé directement.

Avant de réémettre ce message, merci de vérifier la taille et la pertinence des fichiers attachés.
Si le ou les fichiers que vous voulez faire parvenir au destinataire sont toujours trop gros, envisagez l'utilisation des répertoires partagés !

[Paramétrage actuel de la taille maximale autorisée : yyyy ko

Export de la taille des boîtes au lettres

Encore une fois, j'ai préféré créer une petite macro plutôt qu'utiliser la fonction classique d'outlook pour connaitre la taille des répertoires de ma inbox. En effet, la fonction de base est certes très rapide, mais elle ne permet aucune interactivité : il n'y pas moyen par exemple de trier par ordre décroissant de taille des répertoires ou de taille de la somme des sous-répertoires.
L'export Excell permet de faire toutes les analyses et les tris que l'on souhaite et c'est pratique de temps en temps pour déterminer ce qui réellement prends trop de place dans notre Boîte de réception.

Pour utiliser cette macro, vous devez la déclencher manuellement : menu outils / Macro / Macros. Choisissez 'MailBoxSize' et executez. Choississez ensuite le répertoire racine de ce que vous souhaitez calculer et attendez (la fonction n'est pas très rapide pour l'instant). Excel s'ouvrira automatiquement.

Notes pour les développeurs

Je ne vais pas rentrer ici dans un détail poussé de chaque fonction, mais expliquer les quelques 'trucs' que j'ai utilisé pour faire marcher ces macros

Le champ 'kilométrage'

J'ai piqué l'idée quelque part sur le net et je l'ai détournée pour servir mon utilisation.
A la base, je ne sais pas trop a quoi sert le kilométrage dans un objet 'mail', en tout cas je ne l'ai jamais vu rempli a part via ces macros. C'est un champ texte complètement utilisable.
Je m'en sert donc pour stocker dans chaque mail le passage à travers les différentes fonctions. Pour cela j'utilise une chaîne de caractère ou chaque caractère est un 'bit' (0 ou 1) indiquant si on est passée par la fonction xx ou non.
xx est la position du bit dans la chaîne.
Cela permet d'eviter de rezipper des attachs déjà zippée, de revérifier si on est destinataire ou non, etc..
C'est donc avant tout un système pour améliorer les performances.
Affichez le kilométrage dans les champs de votre inbox, c'est pratique pour savoir si vous avez des mails non traités ou non.

Commentaires, bugs et amélioration

N'hésitez pas à me laisser un maximum d'input dans les commentaires ci-dessous sur les pb rencontrés, sur des suggestions d'amélioration ou sur des améliorations que vous avez réalisé.

Télécharger l'archive

FilenameFilesizeDate
. outlook_Macros_v1.97.zip 743.05 kB 2008-08-11



Ecrivez un commentaire

  • Les champs obligatoires sont marques d'une *.

Si vous avez du mal a lire le code, cliquez sur l'image du code pour en generer une nouvelle.
Code de securite:
 
Thomas
Posts: 4
Comment
Macro - twitter
Reply #9 on : Mon July 16, 2007, 23:41:30
Salut Patrick,

Non je n'ai pas sa en catalogue directement, mais ça ne doit pas être trop compliqué dans l'absolu, il faut que VBA autorise les requêtes http et c'est bon. Je checkerais à l'occasion
PATHUCH
Posts: 3
Comment
Re: Augmenter votre productivité avec outlook
Reply #8 on : Mon July 16, 2007, 14:29:57
Salut Thomas,
Tu n'aurais pas une macro pour être appelée par une règle/alerte outlook et qui enverrait un mail vers mail2twitter ? (objectif : notification/alerte via Twitter)
Thomas
Posts: 4
Comment
Pour Richard
Reply #7 on : Wed May 02, 2007, 10:14:38
Je ne suis pas bien certain de comprendre la question, mais si le but est de transférer automatiquement des mails de la boite de réception vers des pst, alors, non je n'ai rien prévu de tel, mais d'un autre côté, c'est le boulot de l'autoarchivage : dans les règles d'autoarchivage, on définit un pst de destination, puis dans les paramètres de chaque dossier, on définit quel est l'autoarchivage à appliquer.
Thomas
Posts: 4
Comment
Pour Lionel :
Reply #6 on : Wed May 02, 2007, 10:12:41
Lionel, désolé de la réponse tardive.

Pour signer ton code, il suffit de suivre la procédure décrite ici chez microsoft :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dn out2k/html/oldigitalsignature.asp

Si je me souviens bien à partir de 2002, l'outil de signature est même directement installé dans office.
Thomas.
Richard
Posts: 3
Comment
export dossier vers PST
Reply #5 on : Sun April 08, 2007, 11:09:56
Bonjour,

Avez-vous réaliser un code pour exporter vos sous-dossiers de la boite de réception vers les PST correspondant?
Merci d evotre réponse
Lionel
Posts: 3
Comment
Re: Augmenter votre productivité avec outlook
Reply #4 on : Thu March 22, 2007, 05:53:18
Bonjour
Ton code a l'air très interessant mais j'arrive pas a avoir un certificat de confiance pour valider les macros sous outlook 2002. Pourrais tu m'aider ?
Cordialment
Thomas
Posts: 4
Comment
Re: Augmenter votre productivité avec outlook
Reply #3 on : Sat December 30, 2006, 02:03:35
Merci Arnaud pour cette MAJ. Je le mettrais en paramètre dans la prochaine version.
Thomas.
Last Edit: December 30, 2006, 02:06:07 by Thomas  
admin
Posts: 2
Comment
Erreur Macro lors de rappel de message
Reply #2 on : Sat December 30, 2006, 02:03:01
la macro provoque des erreurs lorsqu'un expéditeur tente de rappeler son message:

erreur dans: ScanneInbox: Incompatibilité de type valeur li_i:1;Valeur actuelle count:21

mo_olInboxItems_ItemAdd: La méthode 'Class' de l'objet 'MailItem' a échoué

Arnaud
admin
Posts: 2
Comment
Problème de nommage des .zip
Reply #1 on : Sat December 30, 2006, 02:02:27
Salut Thomas,

J'intègre ton équipe il fallait bien que je reprenne ta macro :)

En fait en la testant je me suis aperçu que lorsque tu zippais les pièces jointes tu prennais le nom du fichier tel quel. Cela aboutit à des zip nommés .extension.zip (.xls.zip)
Ce n'est pas grand chose mais cela m'a posé problème quand j'ai dézippé ==> ca crée un répertoire "nom".extension du fichier et que j'ai voulu déplacé le fichier contenu dans le zip dans le dossier parent.
impossible car il avait le même nom !

du coup j'ai modifié ta fonction ZippeUnItem pour passer un autre nom en paramêtre au moment de la création du .zip. En fait j'enleve l'extension existante:

Function ZippeUnItem(po_Item As Outlook.MailItem, ByVal pi_i As Integer) As Boolean
' == Catching des erreurs
On Error GoTo ZippeUnItem_Error

' == Déclarations
Dim lb_Ok As Boolean
Dim ls_NomFichier As String
Dim ls_NomFichier2 As String
Dim lo_MyZip As Object
Dim lo_Fso As Object
Dim Adecouper As Integer

' == Initialisations

lb_Ok = True

Set lo_Fso = CreateObject("Scripting.FileSystemObject")
Set lo_MyZip = CreateObject("SE_SmartJustZip.SmartJustZip")
Call lo_MyZip.Init
' == Code
po_Item.Save
ls_NomFichier = po_Item.Attachments(pi_i).FileName

' on contruit le nom du fichier de telle sorte que le .zip ne soit pas précédé d'un .extension document
Adecouper = InStrRev(ls_NomFichier, ".") - 1
ls_NomFichier2 = Mid(ls_NomFichier, 1, Adecouper)

po_Item.Attachments(pi_i).SaveAsFile ms_REPERTOIRETEMPIN & ls_NomFichier

With lo_MyZip.Zip

.Encrypt = False
.ZipFile = ms_REPERTOIRETEMPOUT & ls_NomFichier2 & ".zip"
.StoreFolderNames = False
.RecurseSubDirs = False
.ClearFileSpecs
.AddFileSpec ms_REPERTOIRETEMPIN & ls_NomFichier
.Zip

If (.Success) Then
po_Item.Attachments(pi_i).Delete
po_Item.Attachments.Add ms_REPERTOIRETEMPOUT & ls_NomFichier2 & ".zip"
Else
lb_Ok = False
End If

End With

' on efface les fichiers temporaires
lo_Fso.DeleteFile ms_REPERTOIRETEMPIN & ls_NomFichier
lo_Fso.DeleteFile ms_REPERTOIRETEMPOUT & ls_NomFichier2 & ".zip"

po_Item.Save

Set lo_MyZip = Nothing

' == Gestion des erreurs
ZippeUnItem_Resume:
ZippeUnItem = lb_Ok
Exit Function

ZippeUnItem_Error:
MsgBox ("Erreur dans : ZippeUnItem : " & Err.Description)
lb_Ok = False
Resume ZippeUnItem_Resume

End Function

@+

Arnaud
Last Edit: January 03, 2007, 00:38:43 by admin