Clean duplicates in Outlook

This little VBA programme removes duplicate mails, or contacts, or appointments in Microsoft Outlook.
Great for pop3 servers going awry, or PDA synch that screws up.
This removes duplicates in the current folder, if it contains either e-mails, contacts (and distributionlists) or appointments.
The user can choose to either simulate (no deletion), send to deleted items or a subfolder, or permanently remove.
He can also choose to process only unread items.
The way the app does items comparison is explained in the comments of the ItemsSimilar procedure.

Please note that I recently discovered Anti-Dupe that seems to do the same job in a fine manner too. Give it a try!

Latest version from now on available at

Ce petit programme en VBA supprime les doublons de mails, contacts ou rendez-vous dans Microsoft Outlook.
Parfait pour des cas de serveurs pop3 qui partent en vrille, ou des synchros de PDA qui flanchent.
Ce programme élimine les doublons dans le dossier en cours, s’il contient des e-mails, des contacts (et listes de distribution) ou des rendez-vous.
L’utilisateur peut choisir soit de simuler (pas de destruction), d’envoyer dans les éléments supprimés ou un sous-dossier, ou de supprimer définitivement.
Il peut aussi choisir de traiter seulement les éléments non lus.
La manière dont l’appli compare les éléments est expliquée en détails dans les commentaires de la procédure ItemsSimilar.

Notez aussi que j’ai récemment découvert Anti-Dupe qui semble faire la même chose de belle manière aussi. A essayer, donc.

Dernière version à présent disponible à

Changelog:
‘V1.18 2010-09-21
‘- Par MLL’
‘- Assouplissement du critère de définition d’un doublon pour les contacts

‘V1.17 2008-03-13
‘- by OLIV’
‘- Add DOEVENTS for the progress bar display
‘- more verbose confirmation message
‘- create dupes subfolder only if necessary
‘V1.16 2006-02-14
‘- “only unread items” checked by default only if active folder is a mail foder
‘- user may chose to avoid comparing company names for contact items

‘V1.15 2006-02-03
‘- new function “relocate item to subfolder”

‘V1.14 2006-01-31
‘- algorithm enhancements to detect even more duplicate contacts
‘- cosmetic changes

‘V1.13 2005-09-15
‘- In case of dupe appointments, we keep the heaviest one

40 thoughts on “Clean duplicates in Outlook

  1. EXCELLENT PROGRAM.

    Just need the module to be renamed to vork properly 😉
    you can’t have a module and a function/sub withe the same name. Else all is perfect 😀

  2. Oh, yes, you’re right. And this is surely the cause of the pains i describe there !!! Thank you so much for the hint. 🙂

    This is the opportunity to upload version 1.12 with the correction to what you describe, together with some algorithm enhancements.

  3. Ce coup ci en français…

    Un affichage du temps en h m s si >60s ferait joli.

    Je l’avais fait sur la v1.11, mais j’ai tout viré, donc je ne peux pas te filer le code, mais c’est pas ce qu’il y a de plus dur 😉

    peut être dans la v1.13 😉

    Bravo pour ce bout de code, je cherchais quelque chose de comme ça depuis un bon moment 😀

  4. Hi, the macro is great, but it gets hung on this area according to debugger: (what can I do?)

    If ( _
    Item1.Subject = Item2.Subject _
    And Item1.FullName = Item2.FullName _
    And Item1.CompanyName = Item2.CompanyName) _
    Then

  5. 1. dézipper
    2. depuis outlook: [Alt]+F11, Fichier > Importer…, sélectionner le fichier. Installé !

    Pour exécuter la macro, depuis Outlook: Outil > Macro > Macros…, sélectionner Clean_duplicates, cliquer sur Exécuter

    On peut aussi créer des boutons directement liés à la macro: plus pratique pour un usage régulier.

  6. Vérifiez que les options de sécurité des macros n’empêchent pas l’exécution des macros non signées: Outil > Macro > Sécurité

  7. bonjour,

    ca a l’air super. j’ai toutefois le message suivant, apres qques copies dans “doublons” correctes :

    “erreur d’exécution ‘-2147221233 (8004010f)
    La méthode ‘FullName’ de l’objet ‘ContactItem’ a échoué”

    que dois-je faire.

    merci.

    f.

  8. Bizarre… ça a l’air d’indiquer qu’un des tes contacts n’a pas de nom défini. Essaie de voir si c’est le cas, déplace-le et refais tourner la macro.

  9. Même problème que physh Said : la macro ne s’installe pas !
    Je suis sur Outlook 2003 SP2, niveau de securité des macros à medium.

    En fait, VBA ne récupère pas CleanDuplicates_Form.frx, seulement le .frm

  10. Ca ne change rien, car le pbm est le suivant :

    Quand je rentre par Alt-F11 sur VBA et que je fais Fichier/Import, il ne récupère que le CleanDuplicates_Form.frm

    Le .frx doit bien servir à qqchose ??

  11. je me suis trompé, le script est bien dans CleanDuplicates_Form.frm
    désolé
    mais la macro n’apparait pas.

  12. Proposition pour l’affichage de la macro dans Outlook 2003.
    Créer sous VB (Alt+F11) le module avec les lignes suivantes :

    Public Sub Clean_duplicates()
    CleanDuplicates_Form.Show
    End Sub


    puis cela fonctionne .

  13. Bravo ! pour ce programme. (o)
    Est ce une de tes créations ou une adaptation d’un programme existant ?
    Si c’est le cas, d’où viend il ?

    Je te propose cette modification dans le cas des mail :
    Senton à la place de Subject
    Dans mon cas c’est plus efficace.

    Détail :
    ‘ *** Sort items list, and process the special case of distribution lists
    ‘ The sorting is important, since duplicates are detected through consecutive items comparison
    Select Case ItemsType
    Case olMailItem
    Set myItems = myItems.Restrict(“[MessageClass] = ‘IPM.Note'”)
    ‘ myItems.Sort “[Subject]” ———– remplacé par :
    myItems.Sort “[SentOn]”

  14. Hum !
    ma remarque précédante n’est pas correcte.
    Il reste à améliorer la détection de certain doublons, qui ne sont pas vu …

  15. J’utilise ce code pour nettoyer des boites exchange/pop3 qui récuperent des fois els mails en double (1 fois par exchange, 1 fois en pop3)

    j’ai modifié la detection des doublons dans les mails :
    -sujet
    -expediteur
    -date d’envoi ou du texte du message ( spécial pour exchange;) )
    -taille +/- 5% ou

  16. En fait je ne fais pas de test sur le corps du message mais en ce qui concerne la date, je fais cette comparaison :
    cstr( Item1.SentOn )= Cstr( Item2.SentOn)

    Parce que sinon, des dates identiques peuvent être différentes.

    Au passage je trie aussi par date d’envoi puis par sujet 😉
    Je récapitule :
    -sujet
    -expediteur
    -date d’envoi avec modification en texte
    -taille +/- 5% ou

  17. FooF Said:
    … modifié la detection des doublons dans les mails :
    -sujet
    -expediteur
    -date d’envoi ou du texte du message ( spécial pour exchange;) )
    -taille +/- 5% ou
    _______________________________
    peux tu donner la ligne de code ?
    merci

  18. Bonjour,

    J’essaye de faire tourner l’outils sur outlook 2003, et lors de l’execution du module j’obtiens l’erreur suivante :
    Erreur de compilation :
    membre de methode ou de donnée introuvable

    Le debuguer VB me montre alors dans le fichier CleanDuplicates_Form la ligne
    ‘ *** User information (progress bar, guess remaining time…)
    CleanDuplicates_Form.Done.Value = myItem1 / nbItems * 100

    la fonction n’est pas trouvée par le programme.
    avez vous une idée de comment resoudre cela ?
    Merci

    Julien

  19. Je l’ai fait fonctionner une fois mais maintenant j’obtiens systématiquement un message “les macros … sont désactivées” Que faire pour corriger ceci ?

    Il y a 3 fichiers, lequel faut importer? A quoi servent-t-ils ?

    Merci de votre aide

    Juan

  20. Juan:

    * A propos des macros désactivées, lisez http://office.microsoft.com/fr-fr/outlook/HP052850551036.aspx en essayant de vous mettre sur “moyen” ou “faible” (attention à d’éventuels risques liés à l’abaissement du niveau de restriction).

    Ou mieux (car cela ne requiert pas d’abaisser complètement le niveau de sécurité des macros), lises la partie traitant de “selfcert” sur http://support.microsoft.com/kb/206637/fr.

    * Concernant les 3 fichier, tous sont nécessaires. le fichier “.bas” contient la macro appelante, les fichiers “.frm” et “.frx” contiennent le formulaire (boîte de dialogue) et son code.

  21. Hi.

    I’ve been looking for something like this for ages!

    Unfotunately I do not understand French at all. Do you perhaps have an English version of the form (and code) lying around somewhere? 🙂

    Thanks!

    FrigidDigit

  22. Ton script fonctionne à merveille sous Outlook 2007 et j’avoue qu’il me rend bien service puisque tous les soft à ce sujet sont payants alors un grand bravo pour ton travail merci beaucoup, chapeau !

  23. Hi MLL.

    I’ve tried your Clean Duplicates and i think it works ok.
    While i’m not that great in french, i used Googls Translate as you suggested and i made a english version (only translate, that is!)

    If you want, mail me and i’ll send the form code.
    I replaced the creation of the subfolder after the confirmation to continue, and also checked if the remove option was chosen.
    This because the subfolder was cerated all the time, and now only if the user wants it.

    I noticed that if i run the test only option, it finds all the duplicates in one run, and if i use the ‘real thing’ i have to run it more than once to get rid of all the duplicates, maybe you xcan look into that, but it worsk ok for now aswell..

    let me know if you are interested in the english translation

Leave a Reply

Your email address will not be published. Required fields are marked *