Rechercher dans le calendrier les rendez-vous qui se produisent partiellement ou entièrement au cours d’une période donnée

Cette rubrique présente un exemple de code Visual Basic pour Applications (VBA) qui utilise une requête Jet pour rechercher dans le dossier de calendrier par défaut des rendez-vous qui ont lieu durant une période donnée avec une heure de début spécifique et une heure de fin spécifique. La requête retourne les rendez-vous qui ont lieu entièrement durant cette période, c’est-à-dire qui commencent à l’heure de début ou après cette heure et qui se terminent à l’heure de fin ou avant celle-ci.

Elle retourne également les rendez-vous qui chevauchent la période, y compris ceux qui commencent avant le début de la période mais se terminent avant la fin de la période, ceux qui commencent avant la fin de la période mais se terminent après la fin de la période, et ceux qui commencent avant le début de la période et se terminent après la fin de la période, chevauchant l’ensemble de la période. Les résultats retournés incluent les rendez-vous périodiques.

On pourrait penser que la marche à suivre consisterait à interroger les rendez-vous qui commencent à la date de début ou après celle-ci et qui se terminent à la date de fin ou avant celle-ci. La requête appropriée serait alors la suivante :

[Start] >= myStart AND [End] <= myEnd

Toutefois, pour rechercher de manière fiable tous les rendez-vous qui se produisent entièrement pendant la période et ceux qui chevauchent la période, vous devez utiliser une requête qui recherche les rendez-vous qui commencent à ou avant l’heure de fin de la période et se terminent à ou après l’heure de début de la période. La requête appropriée serait alors la suivante :

[Start] <= myEnd AND [End] >= myStart

La prise en compte des rendez-vous qui chevauchent la période donnée est utile si vous souhaitez effacer de votre calendrier tous les rendez-vous qui ont lieu durant cette période. Dans ce cas, le fait d’interroger uniquement les rendez-vous qui commencent et se terminent dans une période spécifiée ne serait pas suffisant.

La FindApptsInTimeFrame fonction dans l’exemple de code définit d’abord la période à interroger, en affectant l’heure de début, myStart, à 12 h 00 à la date système actuelle, et l’heure de fin, myEnd, cinq jours après l’heure de début. Elle obtient tous les éléments dans le dossier de calendrier par défaut.

Pour inclure des rendez-vous récurrents dans la requête, il définit Items.IncludeRecurrences sur True , puis trie les éléments par la propriété AppointmentItem.Start . Il génère ensuite la requête pour tous les rendez-vous qui commencent le ou avant myEndet se terminent sur ou après myStart. Il applique ensuite la requête aux éléments du dossier calendrier par défaut, à l’aide de la méthode Items.Restrict , puis imprime l’heure de début de tous les rendez-vous retournés.

Sub FindApptsInTimeFrame()
    Dim myStart As Date
    Dim myEnd As Date
    Dim oCalendar As Outlook.folder
    Dim oItems As Outlook.items
    Dim oResItems As Outlook.items
    Dim oAppt As Outlook.AppointmentItem
    Dim strRestriction As String
     
    myStart = Date
    myEnd = DateAdd("d", 5, myStart)
    Debug.Print "Start:", myStart
    Debug.Print "End:", myEnd
     
    Set oCalendar = Application.session.GetDefaultFolder(olFolderCalendar)
    Set oItems = oCalendar.items
     
    oItems.IncludeRecurrences = True
    oItems.Sort "[Start]"
     
    strRestriction = "[Start] <= '" & Format$(myEnd, "mm/dd/yyyy hh:mm AMPM") _
    & "' AND [End] >= '" & Format(myStart, "mm/dd/yyyy hh:mm AMPM") & "'"
    Debug.Print strRestriction
     
    'Restrict the Items collection
    Set oResItems = oItems.Restrict(strRestriction)
     
    For Each oAppt In oResItems
        Debug.Print oAppt.Start, oAppt.Subject
    Next
End Sub

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.