## Notion formules avancées : IF, DATE, CONCATENATE et calculs complexes en 2025
Les **Notion formules avancées** sont l’une des fonctionnalités les plus puissantes — et les plus mal utilisées — de l’outil. Après avoir configuré des dizaines de workspaces clients, j’ai identifié les formules qui apportent vraiment de la valeur au quotidien. Ce guide va au-delà des bases pour couvrir les cas d’usage réels.
## Les fondamentaux des formules Notion
Une propriété Formula dans Notion s’écrit dans une syntaxe propre à Notion. Elle peut lire les autres propriétés d’un enregistrement via la fonction `prop(« Nom de la propriété »)`.
**Types de valeurs retournées :**
– Texte (string)
– Nombre (number)
– Booléen (checkbox)
– Date
**Opérateurs de base :**
– `+` pour la concaténation (textes) ou l’addition (nombres)
– `==`, `!=`, `>`, `<`, `>=`, `<=` pour les comparaisons
- `and`, `or`, `not` pour les booléens
## Formules IF : la logique conditionnelle
La formule `if()` est la plus utilisée. Sa syntaxe : `if(condition, valeur_si_vrai, valeur_si_faux)`
**Exemple 1 : Statut coloré selon l'état**
```
if(prop("Statut") == "En retard", "🔴 URGENT", if(prop("Statut") == "En cours", "🟡 En cours", "🟢 OK"))
```
Cette formule imbrique deux `if()` pour gérer trois cas. En imbriquant jusqu'à 10 niveaux, vous pouvez gérer des logiques très complexes.
**Exemple 2 : Calcul d'une remise**
```
if(prop("Montant HT") > 5000, prop(« Montant HT ») * 0.9, prop(« Montant HT »))
« `
Applique automatiquement une remise de 10% au-delà de 5000€.
**Exemple 3 : Priorité calculée**
« `
if(prop(« Deadline ») <= dateAdd(now(), 3, "days") and prop("Statut") != "Terminé", "URGENT", if(prop("Deadline") <= dateAdd(now(), 7, "days"), "Cette semaine", "Planifié"))
```
Cette formule calcule la priorité en fonction de la proximité de la deadline.
## Formules Date : manipulation du temps
**Fonctions date principales :**
- `now()` : date et heure actuelles
- `today()` : date du jour
- `dateAdd(date, nombre, unité)` : ajoute du temps
- `dateSubtract(date, nombre, unité)` : soustrait du temps
- `dateBetween(date1, date2, unité)` : calcule la différence
- `formatDate(date, "format")` : formate une date
**Exemple 1 : Jours restants avant deadline**
```
dateBetween(prop("Deadline"), now(), "days")
```
Retourne un nombre négatif si la deadline est passée — utile pour identifier les retards.
**Exemple 2 : Ancienneté d'un client**
```
dateBetween(now(), prop("Date de début"), "months") + " mois"
```
Affiche l'ancienneté en mois depuis la date de début de collaboration.
**Exemple 3 : Rappel automatique**
```
if(dateBetween(prop("Date de relance"), now(), "days") <= 0 and prop("Statut") == "En attente", "RELANCER MAINTENANT", "")
```
Afiche un message d'alerte quand la date de relance est passée.
**Unités disponibles pour dateAdd/dateSubtract/dateBetween :** `years`, `quarters`, `months`, `weeks`, `days`, `hours`, `minutes`, `seconds`
## Formules Texte : CONCATENATE et manipulation de chaînes
**Fonctions texte essentielles :**
- `concat(texte1, texte2, ...)` : concatène des chaînes
- `length(texte)` : longueur d'une chaîne
- `contains(texte, recherche)` : vérifie si une chaîne contient une autre
- `replace(texte, recherche, remplacement)` : remplace une occurrence
- `slice(texte, début, fin)` : extrait une sous-chaîne
- `upper(texte)`, `lower(texte)` : majuscules/minuscules
- `trim(texte)` : supprime les espaces en début/fin
**Exemple 1 : Générer un numéro de facture**
```
concat("FAC-", formatDate(prop("Date"), "YYYY"), "-", format(prop("Numéro")))
```
Génère automatiquement un numéro comme `FAC-2025-042`.
**Exemple 2 : Nom complet depuis prénom/nom**
```
concat(upper(slice(prop("Prénom"), 0, 1)), lower(slice(prop("Prénom"), 1)), " ", upper(prop("Nom")))
```
Formate le nom complet avec majuscule initiale et nom en majuscules.
**Exemple 3 : Email généré automatiquement**
```
concat(lower(replace(prop("Prénom"), " ", ".")), ".", lower(replace(prop("Nom"), " ", ".")), "@entreprise.com")
```
## Formules Nombre : calculs et agrégations
**Fonctions nombres :**
- `round(nombre, décimales)` : arrondi
- `floor(nombre)`, `ceil(nombre)` : plancher/plafond
- `abs(nombre)` : valeur absolue
- `min(a, b)`, `max(a, b)` : minimum/maximum
- `mod(a, b)` : modulo (reste de division)
- `pow(base, exposant)` : puissance
- `sqrt(nombre)` : racine carrée
**Exemple 1 : TVA et TTC**
```
round(prop("HT") * 1.2, 2)
```
Calcule automatiquement le TTC avec 20% de TVA.
**Exemple 2 : Marge**
```
round((prop("CA") - prop("Coûts")) / prop("CA") * 100, 1) + "%"
```
Affiche le taux de marge en pourcentage.
## Les erreurs fréquentes à éviter
**Erreur 1 : Comparer des types différents**
Vous ne pouvez pas comparer directement un texte et un nombre. Utilisez `toNumber()` pour convertir.
**Erreur 2 : Oublier les guillemets**
Les noms de propriétés dans `prop()` doivent être entre guillemets. Les valeurs texte aussi.
**Erreur 3 : Propriété vide**
Si une propriété peut être vide, testez toujours : `if(empty(prop("Valeur")), 0, prop("Valeur"))` pour éviter les erreurs.
**Erreur 4 : Formules trop complexes**
Dès qu'une formule dépasse 3 niveaux d'imbrication, elle devient difficile à maintenir. Créez des propriétés intermédiaires.
## Formules avec Rollup et Relations
Les formules peuvent lire des propriétés rollup (agrégations depuis des bases liées). Exemple classique :
Une base **Clients** avec une relation vers **Projets**. Un rollup `Total facturé` additionne les montants de tous les projets liés. Ensuite, une formule sur la base Clients peut utiliser ce rollup :
```
if(prop("Total facturé") > prop(« Budget prévu »), « ⚠️ Dépassement », « ✅ Dans le budget »)
« `
## Conclusion : les formules Notion, un vrai levier de productivité
Les **formules avancées Notion** transforment des bases de données statiques en systèmes intelligents. Le retour sur investissement est énorme : quelques heures de configuration pour des gains de temps quotidiens. Commencez par les formules IF et DATE — elles couvrent 80% des besoins.
[**Essayez Notion gratuitement →**](https://affiliate.notion.so/)