IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Synchroniser les rendez-vous entre Access et Outlook

Objectif : apprendre à créer un outil Access permettant de synchroniser les rendez-vous entre Access et Outlook.

Niveau requis : avancé.

Commentez cet article : 4 commentaires Donner une note à l´article (5)

Article lu   fois.

L'auteur

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Après avoir décrit la structure des tables Access et de l'objet AppointmentItem d'Outlook, on présentera à l'aide de schémas, les différentes opérations permettant de synchrnoniser les rendez-vous entre Access et Outlook :

  • opérations d'importation ;
  • opérations d'exportation ;
  • Opérations de suppression.

Ensuite, on détaillera la structure des différents formulaires et le code VBA de l'application exemple.

Affichage du formulaire

Formulaire F_ListeRendezVous
Formulaire F_ListeRendezVous

Le code VBA présenté dans cet article utilise la méthode de liaison appelée early binding qui nécessite de cocher la référence Microsoft Outlook xx.x Object Library. Pour éviter les conflits de version au niveau de la référence Outlook, une version 1.2 en late binding, est aussi disponible en téléchargement.

II. La base de données Access

Nous aurons besoin tout d'abord d'enregistrer dans des tables les informations concernant les rendez-vous et les calendriers Outlook.

II-A. Table T_RendezVous

Table permettant d'enregistrer les différents rendez-vous dans Access.

T_RendezVous

Nom du champ

Type du champ

Description

IdRendezVous

Entier long

Numéro identifiant le rendez-vous

Objet

Texte

Objet du rendez-vous

Emplacement

Texte

Emplacement du rendez-vous

Note

Texte

Note ou commentaire sur le rendez-vous

Categorie

Texte

Type ou catégorie du rendez-vous : Réunion, Congé…

DateDebut

Date/Heure

Date de début du rendez-vous

HeureDebut

Date/Heure

Heure de début du rendez-vous

DateFin

Date/Heure

Date de fin du rendez-vous

HeureFin

Date/Heure

Heure de fin du rendez-vous

IdCalendrierOutlook

Texte

Identifiant du calendrier Outlook du rendez-vous

IdRendezVousOutlook

Texte

Identifiant du rendez-vous Outlook

Ce sont les champs principaux de cette table. Pour simplifier les choses, on ne présentera pas ceux permettant de gérer les rendez-vous périodiques.

II-B. Table T_CalendrierOutlook

Table permettant d'enregistrer les différents calendriers de rendez-vous Outlook.

T_CalendrierOutlook

Nom du champ

Type du champ

Description

IdCalendrier

Texte

Identifiant du calendrier de rendez-vous Outlook

NomCalendrier

Texte

Nom du calendrier de rendez-vous Outlook

DossierParent

Texte

Nom du dossier contenant le calendrier

III. Les rendez-vous Outlook

Nous présentons ici un résumé de la structure de l'objet AppointmentItem permettant de gérer les rendez-vous côté Outlook.

III-A. Objet AppointmentItem

Objet Outlook permettant d'enregistrer les rendez-vous, il est un élément d'un dossier Calendrier (Objet Folder). Voici un extrait de ses propriétés :

Objet AppointmentItem

Nom du champ

Type du champ

Description

EntryID

Texte

Champ identifiant, lié au champ IDRendezVousOutlook de la table Access

Subject

Texte

Objet du rendez-vous

Location

Texte

Emplacement du rendez-vous

Body

Texte

Notes sur le rendez-vous

Categories

Texte

Catégorie du rendez-vous

Start

Date/Heure

Date et heure du début du rendez-vous

End

Date/Heure

Date et heure de fin du rendez-vous

Pour ajouter un rendez-vous dans Outlook, on utilise l'objet Application du modèle Outlook :

 
Sélectionnez
Set objAppointment = objApp.CreateItem(olAppointmentItem)

Pour éditer et sauvegarder les informations dans un objet, on peut faire :

 
Sélectionnez
objAppointment.Subject = "Rendez-vous avec M. Duty"
...
objAppointment.save

La propriété EntryID va nous permettre de faire le lien avec le champ IdRendezVousOutlook de la table Access.

IV. Opérations réalisées

Pour mieux comprendre le principe, illustrons par des schémas les opérations d'importation, d'exportation et de suppression des données.

Ces schémas sont valables pour un seul compte de messagerie. L'adresse e-mail du compte de messagerie doit d'ailleurs être enregistrée dans la table T_CompteMessagerie.

IV-A. Opérations d'importation

On vérifie si le rendez-vous Outlook est présent dans la base Access, et si c'est le cas, on le met à jour côté Access, sinon on l'ajoute :

Mise à jour du rendez-vous
Mise à jour du rendez-vous
Ajout du rendez-vous
Ajout du rendez-vous

IV-B. Opérations d'exportation

On vérifie si le rendez-vous enregistré dans la table Access est présent dans la base Outlook, et si c'est le cas, on le met à jour côté Outlook, sinon on l'ajoute :

Mise à jour du rendez-vous
Mise à jour du rendez-vous
Ajout du rendez-vous
Ajout du rendez-vous

IV-C. Opérations de suppression

Si le rendez-vous est présent dans Access et Outlook, on le supprime des deux côtés, sinon on le supprime uniquement où il est présent :

Suppression des deux côtés
Suppression des deux côtés
Suppression dans Access
Suppression dans Access

V. Formulaire F_ListeRendezVous

Il permet d'afficher la liste des rendez-vous en fonction d'une période. Il contient également les deux boutons de commandes permettant d'importer ou d'exporter les rendez-vous compris dans une certaine période.

Formulaire F_ListeRendezVous
Formulaire F_ListeRendezVous

V-A. Bouton de commande cmdImportRendezVous

Ce bouton permet l'import, dans la base Access, des rendez-vous Outlook du ou des calendriers et compris dans la période définie sur le formulaire, en remplaçant ceux ayant le même identifiant.

Bouton cmdImportRendezVous
Bouton cmdImportRendezVous

Déroulé de la procédure événementielle

  • On importe les rendez-vous Outlook du ou des calendriers et selon la période choisie.
  • On met à jour la liste des calendriers Outlook enregistrés dans la table T_CalendrierOutlook.
  • On actualise le sous-formulaire.
Procédure événementielle CmdImportRendezVous_Click
Cacher/Afficher le codeSélectionnez

V-B. Bouton de commande cmdExportRendezVous

Ce bouton permet l'export, dans Outlook, des rendez-vous compris dans une période, en remplaçant ceux ayant le même identifiant.

Bouton cmdExportRendezVous
Bouton cmdExportRendezVous

Déroulé de la procédure événementielle

  • On exporte dans Outlook les rendez-vous du ou des calendriers Outlook et compris dans la période choisie.
  • Si l'exportation s'est bien déroulée, on le signale.
Procédure événementielle CmdExportRendezVous_Click
Cacher/Afficher le codeSélectionnez

V-C. Filtrage des rendez-vous

Une liste déroulante permet de choisir un calendrier Outlook pour afficher les rendez-vous de ce dossier dans le sous-formulaire Access.

cmbDossierOutlook
cmbDossierOutlook

Des zones de texte permettent de saisir une période pour filtrer les rendez-vous dans le sous-formulaire Access.

Période de filtrage
Période de filtrage

V-C-1. Procédure RefreshListeRendezVous

Déroulé de la procédure

  • Définition du critère de la requête en fonction de la période saisie.
  • Constitution de la chaîne SQL avec le critère précédent.
  • Affectation de la chaîne SQL à la source du sous-formulaire.
 
Cacher/Afficher le codeSélectionnez

V-D. Bouton de commande CmdActualiser

Ce bouton permet d'actualiser le formulaire.

Bouton cmdActualiser
Bouton cmdActualiser

Déroulé de la procédure événementielle

  • On met à jour la liste des calendriers Outlook enregistrés dans la table T_CalendrierOutlook.
  • On rafraîchit le formulaire et les listes déroulantes.
Procédure événementielle CmdActualiser_Click
Cacher/Afficher le codeSélectionnez

V-E. Bouton de commande CmdInitialiserLiens

Ce bouton permet, en cas de changement d'ordinateur ou de récupération des données Outlook à partir du fichier .pst, de mettre à jour les liens entre le champ IdRendezVousOutlook de la base Access et la propriété EntryID des rendez-vous Outlook.

Bouton cmdInitialiserLiens
Bouton cmdInitialiserLiens

Déroulé de la procédure événementielle

  • Si le rendez-vous Outlook est dans la base Access, on met à jour le champ IdRendezVousOutlook côté Access.
  • On actualise le sous-formulaire formulaire.
  • On rafraîchit la liste des calendriers Outlook enregistrés dans la table T_CalendrierOutlook.
Procédure événementielle CmdInitialiserLiens_Click
Cacher/Afficher le codeSélectionnez

VI. Formulaire F_RendezVous

Il permet de modifier, d'ajouter ou supprimer un rendez-vous. Il comprend les deux boutons de commandes permettant de valider ou supprimer le rendez-vous actif.

Formulaire F_RendezVous
Formulaire F_RendezVous

Ce formulaire s'ouvre en mode édition en double-cliquant sur une ligne précise de la liste des rendez-vous, et en mode ajout, en cliquant sur le bouton « Ajouter un rendez-vous » situé dans l'en-tête du formulaire F_ListeRendezVous.

VI-A. Bouton de commande cmdValiderRendezVous

Ce bouton permet d'enregistrer les modifications effectuées dans le formulaire F_RendezVous, puis d'exporter le rendez-vous dans Outlook.

Bouton cmdValiderRendezVous
Bouton cmdValiderRendezVous

Déroulé de la procédure événementielle

  • On enregistre le rendez-vous dans Access.
  • On met à jour la liste des rendez-vous dans le formulaire F_ListeRendezVous.
  • On exporte le rendez-vous dans Outlook.
  • On ferme le formulaire pour revenir sur la liste des rendez-vous.
Procédure événementielle cmdValiderRendezVous_Click
Cacher/Afficher le codeSélectionnez

VI-B. Bouton de commande cmdSupprimerRendezVous

Ce bouton permet de supprimer le rendez-vous dans Outlook et Access et de mettre à jour la liste des rendez-vous.

Bouton cmdSupprimerRendezVous
Bouton cmdSupprimerRendezVous

Ce formulaire s'ouvre en mode édition en double-cliquant sur une ligne précise de la liste des rendez-vous, et en mode ajout, en cliquant sur le bouton « Ajouter un rendez-vous » dans le formulaire F_ListeRendezVous.

Déroulé de la procédure événementielle

  • On supprime le rendez-vous dans Outlook.
  • On supprime le rendez-vous dans Access.
  • On met à jour la liste des rendez-vous dans le formulaire F_ListeRendezVous.
  • On ferme le formulaire pour revenir sur la liste des rendez-vous.
Procédure événementielle cmdSupprimerRendezVous_Click
Cacher/Afficher le codeSélectionnez

VI-C. Liste déroulante cmbCalendrierOutlook

Elle permet de saisir un dossier Outlook pour le rendez-vous enregistré dans Access.

Elle est alimentée par la table T_CalendrierOutlook qui permet d'enregistrer les noms des dossiers Outlook.

Liste déroulante cmbDossierOutlook
Liste déroulante CalendrierOutlook

VII. Module M_RendezVous

On s'arrange pour regrouper dans des procédures ou fonctions génériques les portions de code répétitives, pour ainsi rendre le code plus lisible et faciliter sa maintenance. Ces routines seront ensuite appelées dans les procédures principales.

VII-A. Fonction WeekEndJourFerie

Elle permet de tester, au moment de valider un rendez-vous, si la période saisie comprend un samedi/dimanche ou un jour férié. Elle utilise la fonction EstFerieEstFerie prise dans la FAQ Access, avec notamment le calcul du lundi de Pâques suivant la méthode de Thomas O'Beirne.

Fonction WeekEndJourFerie
Cacher/Afficher le codeSélectionnez

VII-B. Fonction JourConge

Elle permet de tester, au moment de valider un rendez-vous, si la période saisie comprend un jour de congé. Les congés sont enregistrés dans la table des rendez-vous avec pour catégorie « Congé ».

Fonction JourConge
Cacher/Afficher le codeSélectionnez

VII-C. Fonction isOutLookRunning

Cette fonction teste si Outlook est ouvert ou pas :

Fonction isOutLookRunning
Cacher/Afficher le codeSélectionnez

VII-D. Procédure RunOutlook

Procédure de lancement d'Outlook.

Procédure RunOutlook
Cacher/Afficher le codeSélectionnez

VII-E. Fonction Evaluer

Elle nous permet de gérer les cas où la valeur du champ ou de la propriété est nulle.

Fonction Evaluer
Cacher/Afficher le codeSélectionnez

VII-F. Procédure générique AddRendezVousOutlook

Elle permet d'ajouter le rendez-vous Outlook dans la table Access, et prend en argument le Recordset basé sur la table des rendez-vous, l'objet AppointmentItem du rendez-vous Outlook, et son dossier.

Procédure AddRendezVousOutlook
Cacher/Afficher le codeSélectionnez

VII-G. Procédure générique UpdateRendezVousAccess

Elle permet de mettre à jour le rendez-vous côté Access avec les données du rendez-vous Outlook. Elle prend en argument le Recordset basé sur la table Access, l'objet AppointmentItem du rendez-vous Outlook, et son dossier.

Procédure UpdateRendezVousAccess
Cacher/Afficher le codeSélectionnez

VII-H. Procédure générique UpdateRendezVousOutlook

Elle permet de mettre à jour le rendez-vous Outlook avec les données du rendez-vous enregistré dans la table Access. Elle prend en argument le Recordset basé sur la table Access, l'objet AppointmentItem du rendez-vous Outlook, et l'objet NameSpace.

Procédure UpdateRendezVousOutlook
Cacher/Afficher le codeSélectionnez

VII-I. Fonction ImportRendezVous

Déroulé de la fonction

  • On teste si Outlook est ouvert et on l'ouvre si ce n'est pas le cas.
  • On crée l'objet Application d'Outlook et on ouvre le Recordset basé sur la table des rendez-vous.
  • On parcourt les dossiers et sous-dossiers Outlook à la recherche du ou des calendriers choisis.
  • On liste les rendez-vous contenus dans ces dossiers.
  • Pour chaque rendez-vous, s'il est présent dans la base, on le remplace, sinon on l'ajoute.
  • On ferme et libère les variables.

On teste si Outlook est déjà ouvert :

 
Sélectionnez
   If Not IsOutLookRunning() Then ' Si Outlook n'est pas déjà ouvert
       RunOutlook ' On lance Outlook
    End If

On crée les objets Application et NameSpace d'Outlook, la référence au compte de messagerie et à la base en cours, puis on ouvre le Recordset basé sur la table T_RendezVous :

 
Cacher/Afficher le codeSélectionnez

On parcourt les dossiers et sous-dossiers Outlook à la recherche de calendriers de rendez-vous, puis on liste les rendez-vous à la recherche de celui à importer :

 
Cacher/Afficher le codeSélectionnez

On teste pour chaque rendez-vous s'il est présent dans la table T_RendezVous, si c'est le cas on le met à jour, sinon on l'ajoute :

 
Cacher/Afficher le codeSélectionnez

Pour finir, on minimise la fenêtre Outlook pour revenir à la fenêtre Access, puis ferme et libère les variables :

 
Cacher/Afficher le codeSélectionnez

VII-J. Fonction ExportRendezVous

Déroulé de la fonction

  • On teste si Outlook est ouvert et on l'ouvre si ce n'est pas le cas.
  • On crée les objets Application et NameSpace d'Outlook et on ouvre le Recordset en sélectionnant les rendez-vous correspondant aux choix effectués sur le formulaire.
  • On parcourt le Recordset et recherche pour chaque rendez-vous dans Access celui ayant comme identifiant la valeur du champ IdRendezVousOutlook.
  • Si on le trouve, on le remplace par celui de la base Access, sinon on l'ajoute dans Outlook.
  • On ferme et libère les variables.

On teste si Outlook est déjà ouvert :

 
Sélectionnez
   If Not IsOutLookRunning() Then ' Si Outlook n'est pas déjà ouvert
     RunOutlook ' On lance Outlook
   End If

On crée les objets Application et NameSpace d'Outlook, la référence au compte de messagerie et à la base en cours, puis on ouvre le Recordset en fonction des choix effectués sur le formulaire :

 
Cacher/Afficher le codeSélectionnez

Pour chaque enregistrement, on recherche le rendez-vous Outlook ayant comme identifiant la valeur du champ IdRendezVousOutlook :

 
Cacher/Afficher le codeSélectionnez

Si le rendez-vous de l'enregistrement Access est présent dans le dossier Outlook, on le met à jour, sinon on l'ajoute dans la base Access :

 
Cacher/Afficher le codeSélectionnez

Pour finir, on minimise la fenêtre Outlook pour revenir à la fenêtre Access, puis ferme et libère les variables :

 
Cacher/Afficher le codeSélectionnez

VII-K. Fonction InitialiserLiens

Déroulé de la fonction

  • On teste si Outlook est ouvert et on l'ouvre si ce n'est pas le cas.
  • On crée l'objet Application d'Outlook et on ouvre le Recordset basé sur la table des rendez-vous.
  • On parcourt les dossiers et sous-dossiers Outlook à la recherche des dossiers de rendez-vous.
  • On liste les rendez-vous contenus dans ces dossiers.
  • Pour chaque rendez-vous, s'il est présent dans la base, on le met à jour.
  • On ferme et libère les variables.

On teste si Outlook est déjà ouvert :

 
Sélectionnez
If Not IsOutLookRunning() Then ' Si Outlook n'est pas déjà ouvert
       RunOutlook ' On lance Outlook
    End If

On crée les objets Application et NameSpace d'Outlook, la référence au compte de messagerie et à la base en cours, puis on ouvre le Recordset basé sur la table T_RendezVous :

 
Cacher/Afficher le codeSélectionnez

On parcourt les dossiers et sous-dossiers Outlook à la recherche de dossiers de rendez-vous, puis on liste les rendez-vous à la recherche de celui à mettre à jour :

 
Cacher/Afficher le codeSélectionnez

On teste pour chaque rendez-vous s'il est présent dans la table T_RendezVous, si c'est le cas on le met à jour :

 
Cacher/Afficher le codeSélectionnez

Pour finir, on minimise la fenêtre Outlook pour revenir à la fenêtre Access, puis ferme et libère les variables :

 
Cacher/Afficher le codeSélectionnez

VII-L. Fonction MajRendezVous

Déroulé de la fonction

  • On teste si Outlook est ouvert et on l'ouvre si ce n'est pas le cas.
  • On crée les objets Application et NameSpace d'Outlook et on ouvre le Recordset basé sur la table T_RendezVous filtrée sur le rendez-vous actif.
  • On recherche le rendez-vous dans Outlook.
  • S'il est présent, on le remplace, sinon on l'ajoute dans Outlook.
  • On ferme et libère les variables.

On teste si Outlook est déjà ouvert :

 
Sélectionnez
   If Not IsOutLookRunning() Then ' Si Outlook n'est pas déjà ouvert
      RunOutlook
   End If

On crée les objets Application et NameSpace d'Outlook, la référence au compte de messagerie et à la base en cours, puis on ouvre le Recordset basé sur la requête contenant le rendez-vous actif :

 
Cacher/Afficher le codeSélectionnez

Pour chaque enregistrement, on recherche le rendez-vous Outlook ayant comme identifiant la valeur du champ IdRendezVousOutlook :

 
Cacher/Afficher le codeSélectionnez

Si le rendez-vous de l'enregistrement Access est présent dans Outlook, on le met à jour, sinon on l'ajoute dans la base Access :

 
Cacher/Afficher le codeSélectionnez

Pour finir, on minimise la fenêtre Outlook pour revenir à la fenêtre Access, puis ferme et libère les variables :

 
Cacher/Afficher le codeSélectionnez

VII-M. Fonction SupprimerRendezVousOutlook

Déroulé de la fonction

  • On teste si Outlook est ouvert et on l'ouvre si ce n'est pas le cas.
  • On crée les objets Application et NameSpace d'Outlook.
  • On recherche le rendez-vous Outlook ayant comme identifiant la chaîne de caractères passée en argument.
  • Si on le trouve, on le supprime dans Outlook.
  • On ferme et libère les variables.

On teste si Outlook est déjà ouvert :

 
Sélectionnez
   If Not IsOutLookRunning() Then ' Si Outlook n'est pas déjà ouvert
      RunOutlook
   End If

On crée les objets Application et NameSpace d'Outlook, puis la référence au compte de messagerie :

 
Cacher/Afficher le codeSélectionnez

On recherche le rendez-vous Outlook ayant comme identifiant la valeur du champ IdRendezVousOutlook :

 
Cacher/Afficher le codeSélectionnez

On teste si le rendez-vous est présent dans Outlook, si c'est le cas, on le supprime :

 
Cacher/Afficher le codeSélectionnez

Pour finir, on minimise la fenêtre Outlook pour revenir à la fenêtre Access, puis ferme et libère les variables :

 
Cacher/Afficher le codeSélectionnez

VII-N. Fonction MajCalendriersOutlook

Déroulé de la fonction

  • On crée l'objet Application d'Outlook.
  • On vide la table T_CalendrierOutlook et ouvre le Recordset basé sur cette table.
  • On parcourt les dossiers et sous-dossiers Outlook à la recherche des calendriers.
  • On ajoute les noms de ces dossiers à la table.
  • On ferme et libère les variables.

>On crée les objets Application et NameSpace d'Outlook, puis la référence au compte de messagerie :

 
Sélectionnez
' Création de l'objet Application d'Outlook
Set objApp = new Outlook.Application

' Création de l'objet NameSpace d'Outlook
Set objSpace = objApp.GetNamespace("MAPI")

' Référence au dossier principal du compte de messagerie
Set objCptFolder = objSpace.Folders(DLookup("email", "T_CompteMessagerie"))

On vide la table T_RendezVousOutlook et ouvre le Recordset basé sur cette table :

 
Cacher/Afficher le codeSélectionnez

On parcourt les dossiers et sous-dossiers Outlook à la recherche de calendriers, puis, une fois trouvé, on ajoute dans la table l'identifiant, le nom du dossier Outlook et celui de son dossier parent :

 
Cacher/Afficher le codeSélectionnez

Pour finir, on ferme et libère les variables :

 
Cacher/Afficher le codeSélectionnez

VIII. Les bases de données à télécharger

Les bases jointesgestion-rendezvous sont au format accdb.

L'application comporte également un module pour gérer les rendez-vous périodiques. Enregistrez bien au début l'adresse e-mail de votre compte de messagerie dans la table T_CompteMessagerie.

IX. Remerciements

Je tiens à remercier Laurent Ott pour m'avoir conseillé pour la réalisation de cet article, ainsi que f-leb pour sa relecture.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2018 Denis Hulo. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.