Notion et ses formules (débutant à expert)

Photo de l'auteur Ricardo ALPHONSE
Ricardo ALPHONSE
📆
maj :
image de couverture Notion et ses formules (débutant à expert)

Formule Notion et Javascript

Les formules Notion permettent d’effectuer toutes sortes de calculs et de fonctions basés sur d’autres propriétés.

En fait, le langage des formules de Notion s’inspire de JavaScript. Par exemple, il est possible de créer des variables locales avec letexactement comme en JavaScript. On peut aussi utiliser la dot notation pour accéder aux sous-champs d’une propriété (ex. prop("Created By").name() renvoie le nom complet d’une personne). Bref, écrire une formule Notion, c’est un peu comme écrire du code JavaScript simplifié.

Type de données

Les formules supportent presque tous les types de propriétés d’une base de données. Concrètement, on peut manipuler du texte, des nombres, des dates, des booléens (cases à cocher), ou des listes (multi-sélection, relations).

Par exemple, un champ multisélection apparaît comme une liste dans la formule, sur laquelle on peut faire length() pour obtenir le nombre de valeurs dans la liste ou includes() permet de savoir si une valeur est présente dans la liste. Une case à cocher devient un booléen (vrai/faux).

Voici les types de données disponibles :

  • Texte : propriétés Titre ou Texte (chaînes de caractères). On peut les concaténer, extraire des sous-chaînes, etc.
  • Nombre : propriétés numériques (opérations +, -, ×, ÷, etc.).
  • Date : propriétés date/heure (fonctions dédiées pour ajouter/j, comparer, formater, etc.).
  • Booléen : case à cocher (donné vrai ou faux directement utilisable).
  • Listes (ou array) : multi-sélection ou relation (traitées comme des listes dans les formules), manipulables avec des fonctions de listes.

Résumé des formules

Fonction Type Définition Exemple
prop("X") Référence propriété Récupère la valeur d’une propriété/colonne nommée X. Il est possible de récupérer le nom ou l’adresse mail d’un propriété ‘Person’ prop("Montant") prop(”Person”).name
let(name, expr, return) Contrôle / variable locale Définit une variable locale name = expr, puis évalue return. Utile pour rendre les formules lisibles. let(x, prop("A") + prop("B"), x * 0.2)
if(condition, trueValue, falseValue) Conditionnelle Retourne trueValue si condition est vraie, sinon falseValue. if(prop("Score") > 50, "OK", "Revoir")
format(value) Conversion / texte Convertit value en chaîne de caractères (texte). "Le CA est de " + format(prop("Montant"))
toNumber(text) Conversion Convertit une chaîne en nombre (si possible). toNumber("42")42
now() Date/heure Renvoie la date et heure actuelle. now()October 16, 2025 7:20 PM
today() Date Renvoie la date du jour. today()October 16, 2025
dateAdd(date, amount, "unit") Date Ajoute amount (entier) d’unités ("days", "months", "years", "hours", "minutes", "weeks") à date. dateAdd(prop("Date"), 7, "days")
dateSubtract(date, amount, "unit") Date Soustrait du temps à date. dateSubtract(now(), 1, "months")
dateBetween(d1, d2, "unit") Date Calcule la différence entre d1 et d2 en unit (ex. "days"). dateBetween(prop("Fin"), prop("Début"), "days")
formatDate(date, "format") Date → texte Formate une date selon un motif (ex. "MMMM D, Y"). formatDate(prop("Date"), "YYYY-MM-DD")
parseDate(text) Texte → date Convertit une chaîne ISO en date. parseDate("2025-10-16")
+, -, *, /, % Nombres / opérateurs Opérateurs arithmétiques de base. prop("A") + prop("B")
^ / pow(x,y) Mathématiques Puissance : x élevé à la y. 5 ^ 3 ou pow(5, 3)
sum(...) Agrégat Somme des arguments ou d’une liste. sum(prop("A"), prop("B")) ou sum(1,2,3)
min(...), max(...) Agrégat Renvoie la plus petite / plus grande valeur. min(prop("A"), prop("B"))
mean(...), median(...) Statistiques Moyenne / médiane d’arguments. mean(2,4,6)
round(x) Mathématiques Arrondit x à l’entier le plus proche. round(prop("Prix"))
abs(x) Mathématiques Valeur absolue de x. abs(prop("Diff"))
substring(text, start, end) Texte Extrait une sous-chaîne de start (incl.) à end (excl.). substring(prop("Nom"), 0, 4)
contains(text, "mot") Texte / recherche Vérifie si text contient la sous-chaîne. contains(prop("Notes"), "urgent")
lower(text), upper(text) Texte Met le texte en minuscules / majuscules. lower(prop("Tag"))
join(list, sep) Liste ↔ Texte Concatène les éléments d’une liste en une chaîne séparée par sep. join(prop("Tags"), ", ")
split(text, sep) Texte ↔ Liste Coupe text en liste selon sep. split(prop("ListeTexte"), ",")
length(listOrText) Liste / Texte Nombre d’éléments dans une liste ou caractères dans un texte. length(prop("Tags"))
first(list), last(list) Liste Premier / dernier élément d’une liste. first(prop("Participants"))
slice(list, start, end) Liste Extrait une sous-liste (comme substring). slice(prop("Liste"), 0, 3)
concat(l1, l2) Liste Concatène deux listes. concat(prop("ListeA"), prop("ListeB"))
unique(list) Liste Renvoie une liste sans doublons. unique(prop("Choix"))
includes(list, val) Liste Vrai si val est présent dans list. includes(prop("Tags"), "Important")
find(list, cond) Liste / recherche Renvoie le premier élément qui satisfait cond. find(prop("Tâches"), t -> t.status == "done") (ici dans le tableau Tâches, il y a une colonne Status)
filter(list, cond) Liste Filtre la liste selon la condition cond. filter(prop("Tâches"), t -> t.priority == "High")
map(list, expr) Liste / transformation Applique expr à chaque élément et renvoie une nouvelle liste. Idéal pour modifier la structure d’une liste. Par exemple, vous pouvez filtrer sur les tâches en cours, puis obtenir le budget de ses tâches et enfin en faire la somme. map(prop("Produits"), p -> p.price)
some(list, cond), every(list, cond) Liste / logique some = au moins un élément satisfait cond; every = tous la satisfont. some(prop("Tâches"), t -> t.done)
sort(list, key?), reverse(list) Liste Trie la liste (optionnellement par clé) / inverse l’ordre. sort(prop("Dates")) / reverse(prop("Historique"))
at(list, index) Liste Accède à l’élément à l’index (0-based ou support négatif selon version). at(prop("Liste"), 0)
flat(list) Liste Aplati une liste de listes en une seule liste. flat(prop("ListesDeTags"))

Formules liées aux textes

Notion propose de nombreuses fonctions pour traiter du texte. On peut concaténer des chaînes avec l’opérateur +, extraire une partie de texte avec substring(), vérifier la présence d’une séquence avec contains(), etc. D’autres fonctions changent la casse (lower()upper()), répètent du texte ou convertissent des valeurs en texte (format()). Parmi les fonctions utiles :

  • Concaténation (+) : relie deux chaînes ("Hello" + "World" donne "HelloWorld").
  • Sous-chaîne (substring) : ex. substring("Contact", 3, 5) “ta”.
  • Recherche de texte (contains) : ex. contains(texte, "mot") renvoie vrai ou faux.
  • Casse (lower/upper) : lower("NOTION") → "notion"upper("notion") → "NOTION".
  • Formatage (format) : convertit n’importe quelle valeur en texte (ex. format(1234) → "1234"format(now()) donne la date/heure sous forme de texte).

Formules liées aux dates

Notion inclut des fonctions spécialisées pour les dates. Par exemple, now() renvoie la date et l’heure actuelles (et today() la date du jour). On peut ajouter ou soustraire du temps à une date avec dateAdd(date, quantité, "unités") ou dateSubtract(...). On peut aussi calculer l’écart entre deux dates avec dateBetween(date1, date2, "unités") (ex. en jours ou mois). La fonction formatDate(date, "format") sert à formater une date (p. ex. "MMMM D, Y" pour "août 30, 2023"). Enfin, parseDate("YYYY-MM-DD") crée une date à partir d’une chaîne (standard ISO 8601).

  • Date/Heure courante : now()today().
  • Ajouter/soustraire du temps : dateAdd(d, n, "unité")dateSubtract(d, n, "unité").
  • Différence : dateBetween(d1, d2, "unités").
  • Formatage de date : formatDate(d, "format").
  • Conversion depuis texte : parseDate("2023-04-19").

Formules liées aux nombres

Les formules numériques couvrent les opérations de base et les fonctions mathématiques. On peut effectuer l’addition, la soustraction, la multiplication, la division, l’exponentiation (^). Notion fournit aussi sum()min()max()median()mean() pour regrouper des valeurs. D’autres fonctions utiles : round(x) (arrondi), abs(x) (valeur absolue), pow(x, y) ou l’opérateur ^ (puissance). Pour convertir un texte en nombre, on utilise toNumber(texte) (ex. toNumber("42") = 42).

  • Opérations de base : +-,*/%^ (ex. 5 + 10 = 155 ^ 3 = 125).
  • Sommes/agrégats : sum(…)min(…)max(…) (ex. sum(1,2,3) = 6).
  • Statistiques : median(…)mean(…).
  • Arrondi/absolu : round(x)abs(x).
  • Convertir en nombre : toNumber("23") (rend 23).

Formules liées aux tableaux

La version 2.0 des formules introduit des fonctions sur les listes. Une liste peut provenir d’une multi-sélection, d’un champ Personne ou Relation. On dispose par exemple de length(liste) pour la longueur, first(liste)/last(liste) pour le premier/dernier élément, et slice(liste, début, fin) pour extraire une sous-liste. On peut concaténer deux listes avec concat(l1, l2), trier avec sort(), inverser avec reverse(). Les fonctions join(liste, sep) et split(texte, sep) font la jonction entre texte et liste. D’autres outils : unique(liste) (valeurs uniques), includes(liste, val) (vérifie la présence), find(liste, cond)findIndex(liste, cond)filter(liste, cond), et les tests some(liste, cond)every(liste, cond). Enfin, map(liste, expr) et flat(liste) font appel à la programmation fonctionnelle sur les éléments.

  • Longueur : length(list).
  • Accès : first(list)last(list)at(list, index).
  • Sous-listes : slice(list, debut, fin)concat(l1, l2).
  • Tri et inversion : sort(list)reverse(list).
  • Texte ⇄ Liste : join(list, sep)split(text, sep).
  • Unique et inclusion : unique(list)includes(list, val).
  • Recherche : find(list, cond)findIndexfilter(list, cond).
  • Condition sur liste : some(list, cond)every(list, cond).
  • Fonctions avancées : map(list, expr)flat(list).

Ne laisse pas tes idées attendre :
dans 2 semaines, elles peuvent devenir réalité.