Afficher les anniversaires des employés est une demande qui revient régulièrement dans les environnements Microsoft 365. Ce n’est pas une demande gadget. Elle apparaît surtout dans des organisations qui ont un intranet vivant, une volonté de renforcer la culture interne ou des usages Viva déjà en place.
Derrière cette demande simple se cachent plusieurs enjeux techniques et de gouvernance. Où stocker la donnée. Comment la sécuriser. Comment l’afficher sans exposer d’informations sensibles. Et surtout, comment le faire de manière durable sans bricolage.
Avant de choisir une solution, il faut comprendre qu’il n’existe pas une seule bonne réponse. Il existe plusieurs approches, chacune adaptée à un contexte précis.
Le point de départ : où vivent les anniversaires dans Microsoft 365
Microsoft 365 ne propose pas nativement une expérience clé en main pour afficher les anniversaires des employés sur SharePoint Online. La donnée peut exister dans plusieurs endroits possibles :
- dans Microsoft Entra ID via la propriété
birthdayexposée par Microsoft Graph - dans un système RH externe
- dans une liste SharePoint créée à cet effet
- dans un calendrier Microsoft 365
Chaque option implique des choix différents en matière de sécurité, d’automatisation et d’expérience utilisateur.
Option 1 : utiliser Microsoft Graph comme source et afficher via SharePoint
C’est l’approche la plus “directory-driven”.
Le champ birthday est exposé par Microsoft Graph sur l’objet utilisateur. Il peut être lu et mis à jour sous certaines conditions. Cette option est pertinente si l’organisation considère Entra ID comme la source d’autorité des données de profil.
Cette approche fonctionne bien lorsque :
- la gouvernance autour des données personnelles est claire
- le consentement utilisateur est géré
- l’année de naissance est soit autorisée soit masquée à l’affichage
Côté affichage dans SharePoint Online, cette option nécessite une Web Part SPFx qui interroge Microsoft Graph, filtre les utilisateurs dont l’anniversaire tombe dans la période courante et affiche uniquement les informations nécessaires.

Code PowerShell avec Microsoft Graph SDK
Prérequis
Install-Module Microsoft.Graph -Scope CurrentUser
Connexion avec un scope de mise à jour utilisateur. En pratique, pour mettre à jour un autre utilisateur, on utilise généralement User.ReadWrite.All en délégué, avec un compte ayant les droits appropriés selon la politique de l’organisation.
Connect-MgGraph -Scopes "User.ReadWrite.All"
Lire la valeur birthday d’un utilisateur
$upn = "user@domaine.com"
$user = Get-MgUser -UserId $upn -Property "displayName,userPrincipalName,birthday"
$user | Select-Object displayName,userPrincipalName,birthday
Si tu veux auditer plusieurs utilisateurs, tu peux itérer sur une liste ou filtrer par groupe, puis lire la propriété.
Mettre à jour birthday
Microsoft recommande que birthday soit envoyée seule dans un PATCH dédié.
La façon la plus “propre” est d’utiliser Invoke-MgGraphRequest pour maîtriser exactement le payload.
$upn = "user@domaine.com"
$body = @{
birthday = "1988-03-31T00:00:00Z"
} | ConvertTo-Json
Invoke-MgGraphRequest -Method PATCH -Uri "https://graph.microsoft.com/v1.0/users/$upn" -Body $body -ContentType "application/json"
Effacer birthday
$upn = "user@domaine.com"
$body = @{
birthday = $null
} | ConvertTo-Json
Invoke-MgGraphRequest -Method PATCH -Uri "https://graph.microsoft.com/v1.0/users/$upn" -Body $body -ContentType "application/json"
Variante REST pour tests rapides dans Graph Explorer ou Postman
Lecture :
GET https://graph.microsoft.com/v1.0/users/user@domaine.com?$select=displayName,userPrincipalName,birthday
Mise à jour :
PATCH https://graph.microsoft.com/v1.0/users/user@domaine.com
Content-Type: application/json
{
"birthday": "1988-03-31T00:00:00Z"
}
Rappel important : Microsoft indique que birthday doit être mise à jour seule et qu’elle n’est pas modifiable en app-only.
Option 2 : stocker les anniversaires dans une liste SharePoint
C’est l’approche la plus simple et la plus robuste pour un intranet.
On crée une liste SharePoint dédiée aux anniversaires, avec par exemple :
- un champ Personne
- un champ Jour
- un champ Mois
- éventuellement un champ Consentement
Les anniversaires peuvent être saisis manuellement, alimentés par un formulaire ou synchronisés depuis Graph ou un système RH.
L’affichage se fait ensuite très simplement avec une Web Part Liste et une vue filtrée par mois courant.

Option 3 : utiliser un calendrier Microsoft 365 et afficher les anniversaires comme événements
C’est une option souvent oubliée mais très intéressante.
Le principe consiste à créer un calendrier Microsoft 365 dédié aux anniversaires, puis à y créer des événements annuels récurrents pour chaque employé. Ce calendrier peut ensuite être affiché dans SharePoint via la Web Part Calendrier ou intégré dans Teams.
Cette approche est pertinente quand :
- on veut traiter les anniversaires comme des événements
- on souhaite les afficher dans plusieurs contextes (SharePoint, Outlook, Teams)
- on veut bénéficier de la logique de récurrence annuelle

Dans la pratique, c’est l’option que je recommande le plus souvent en contexte intranet car c’est la plus simple a maintenir.
Comment alimenter un calendrier d’anniversaires avec Microsoft Graph
Microsoft Graph permet de créer des événements dans un calendrier partagé. C’est une approche propre et supportée.
Exemple de logique :
- récupérer les utilisateurs et leur
birthdayvia Graph - créer un événement annuel récurrent dans un calendrier dédié
- n’afficher que le prénom et le jour de l’événement
Exemple REST simplifié :
POST https://graph.microsoft.com/v1.0/users/{calendarOwner}/events
Content-Type: application/json
{
"subject": "Anniversaire de Sophie",
"start": {
"dateTime": "2026-03-31T00:00:00",
"timeZone": "UTC"
},
"end": {
"dateTime": "2026-03-31T23:59:00",
"timeZone": "UTC"
},
"recurrence": {
"pattern": {
"type": "yearly",
"interval": 1
},
"range": {
"type": "noEnd",
"startDate": "2026-03-31"
}
},
"isAllDay": true
}
Ensuite, ce calendrier peut être affiché directement dans SharePoint ou Teams sans développement supplémentaire.

