Mis à jour le 12 min de lecture

Fonction QUERY de Google Sheets : guide en français avec exemples à copier (WHERE, GROUP BY, PIVOT)

Filtrer, trier, regrouper et totaliser vos données avec une seule formule : la syntaxe de QUERY, les clauses SELECT, WHERE, GROUP BY, PIVOT, ORDER BY, LIMIT et LABEL, un aide-mémoire des requêtes les plus utiles et les pièges à éviter, avec des exemples prêts à copier.

  • Google Sheets
  • QUERY
  • Tutoriel
  • Analyse de données
Schéma : feuille partagée versus base applicative Croissance des usages Sheets App + rôles + audit

La syntaxe de base

=QUERY(A1:E; "select B, sum(E) where D = 'Payé' group by B"; 1)
  • Données : la plage source, en-têtes compris (ici A1:E, colonnes entières pour inclure les futures lignes).
  • Requête : une chaîne de texte entre guillemets droits. Les colonnes sont désignées par leur lettre (A, B…), pas par leur titre.
  • En-têtes (facultatif) : le nombre de lignes d’en-tête. Indiquez-le explicitement (1) plutôt que de laisser Sheets deviner.

Le nom de la fonction reste QUERY en français, et les mots-clés de la requête (select, where…) sont toujours en anglais. Seul le séparateur entre les arguments de la fonction dépend des paramètres régionaux : point-virgule pour un fichier réglé sur la France.

Les exemples utilisent ce tableau de ventes fictif (onglet Ventes) :

A : DateB : CommercialC : RégionD : StatutE : Montant
05/01/2026JulieNordPayé1 200
12/01/2026KarimSudEn attente450
03/02/2026JulieNordPayé3 800
17/02/2026KarimEstPayé900
02/03/2026LéaNordAnnulé600

L’ordre des clauses

Les clauses sont facultatives, mais quand elles sont présentes, elles doivent apparaître dans cet ordre, sinon la formule renvoie une erreur :

select → where → group by → pivot → order by → limit → offset → label → format

SELECT : choisir les colonnes

=QUERY(Ventes!A1:E; "select A, B, E"; 1)

Sans select, toutes les colonnes sont renvoyées. L’ordre des colonnes dans select est l’ordre d’affichage : select E, B met le montant en premier.

WHERE : filtrer les lignes

BesoinClause
Texte exact (entre apostrophes)where C = 'Nord'
Nombrewhere E >= 1000
Plusieurs conditionswhere C = 'Nord' and D = 'Payé'
L’une ou l’autrewhere C = 'Nord' or C = 'Est'
Différent dewhere D != 'Annulé'
Contient un mot (sensible à la casse)where B contains 'Ju'
Commence parwhere B starts with 'K'
Ignorer les lignes videswhere A is not null
Date (format aaaa-mm-jj imposé)where A >= date '2026-02-01'

Les textes s’écrivent entre apostrophes à l’intérieur de la requête, puisque la requête elle-même est entre guillemets. Les dates, elles, doivent toujours être écrites au format date 'aaaa-mm-jj', quel que soit l’affichage dans vos cellules.

Utiliser une cellule comme critère

Pour un petit tableau de bord où l’utilisateur choisit la région en H1, on sort de la chaîne et on concatène avec &, sans oublier les apostrophes autour d’un texte :

=QUERY(Ventes!A1:E; "select B, E where C = '"&H1&"'"; 1)

Pour un nombre, pas d’apostrophes : "select B, E where E >= "&H2.

GROUP BY : regrouper et totaliser

C’est la fonction « tableau croisé dynamique » de QUERY. On choisit une colonne de regroupement et une ou plusieurs fonctions d’agrégation : sum, count, avg, min, max.

=QUERY(Ventes!A1:E; "select B, sum(E), count(E) where D = 'Payé' group by B"; 1)
Commercialsum Montantcount Montant
Julie5 0002
Karim9001

Règle à retenir : toute colonne du select qui n’est pas agrégée doit figurer dans le group by. select B, C, sum(E) group by B renvoie une erreur ; il faut group by B, C.

Regrouper par mois

Les fonctions year() et month() extraient l’année et le mois d’une date. Piège classique : month() compte de 0 à 11 (janvier = 0). Ajoutez 1 pour obtenir un numéro de mois habituel :

=QUERY(Ventes!A1:E; "select year(A), month(A)+1, sum(E) where A is not null group by year(A), month(A)+1 order by year(A), month(A)+1"; 1)

ORDER BY et LIMIT : trier et garder le top

=QUERY(Ventes!A1:E; "select B, sum(E) group by B order by sum(E) desc limit 3"; 1)

desc trie du plus grand au plus petit, asc (par défaut) dans l’autre sens. limit 3 ne garde que les trois premières lignes : pratique pour un classement des meilleurs commerciaux ou des produits les plus vendus. offset permet de sauter des lignes (pagination).

LABEL : renommer les colonnes calculées

Par défaut, une colonne agrégée s’intitule « sum Montant ». label remplace ce titre ; plusieurs libellés se séparent par des virgules :

=QUERY(Ventes!A1:E; "select B, sum(E), count(E) group by B label B 'Commercial', sum(E) 'CA total', count(E) 'Nb ventes'"; 1)

Pour supprimer un en-tête, donnez-lui un libellé vide : label sum(E) ''.

PIVOT : un vrai tableau croisé

pivot transforme les valeurs d’une colonne en colonnes. Chiffre d’affaires par commercial et par région :

=QUERY(Ventes!A1:E; "select B, sum(E) where D = 'Payé' group by B pivot C"; 1)

Le résultat affiche une ligne par commercial et une colonne par région (Est, Nord…). Une case vide signifie « aucune vente » pour ce couple.

QUERY sur plusieurs onglets ou avec IMPORTRANGE

Quand les données ne proviennent pas directement d’une plage (tableau assemblé avec des accolades, résultat d’IMPORTRANGE), les lettres de colonnes ne fonctionnent plus : on écrit Col1, Col2… (avec un C majuscule).

=QUERY({Janvier!A2:E; Février!A2:E}; "select Col2, sum(Col5) where Col1 is not null group by Col2"; 0)

Dans un fichier réglé sur la France, les plages empilées dans les accolades se séparent par un point-virgule (une barre oblique inversée \ les juxtapose côte à côte).

Aide-mémoire : les requêtes les plus utiles

Toutes s’appuient sur le tableau Ventes ci-dessus ; il suffit d’adapter les lettres de colonnes.

BesoinFormule
Ventes payées de plus de 1 000 €=QUERY(Ventes!A1:E; "select * where D = 'Payé' and E > 1000"; 1)
Total par région, du plus grand au plus petit=QUERY(Ventes!A1:E; "select C, sum(E) where C is not null group by C order by sum(E) desc"; 1)
Nombre de ventes par statut=QUERY(Ventes!A1:E; "select D, count(A) where D is not null group by D"; 1)
Les 5 plus grosses ventes=QUERY(Ventes!A1:E; "select A, B, E where E is not null order by E desc limit 5"; 1)
Ventes depuis le 1er février 2026=QUERY(Ventes!A1:E; "select * where A >= date '2026-02-01'"; 1)
Total par commercial et par région=QUERY(Ventes!A1:E; "select B, sum(E) where B is not null group by B pivot C"; 1)

Les pièges les plus fréquents

  • Colonnes aux types mélangés : QUERY retient le type majoritaire d’une colonne et traite les autres valeurs comme vides. Une colonne de montants où quelques cellules contiennent « N/A » en texte perd ces lignes dans les totaux.
  • Guillemets au lieu d’apostrophes autour d’un texte dans la requête : erreur d’analyse garantie.
  • Clauses dans le désordre : order by avant group by ne passe pas.
  • Nom de colonne au lieu de la lettre : select Montant ne fonctionne pas, il faut select E.
  • Plage qui déborde : QUERY écrit ses résultats sur plusieurs lignes et colonnes ; si une cellule de la zone est déjà remplie, la formule renvoie #REF!.

FAQ

QUERY ou FILTER : lequel choisir ?

FILTER suffit pour filtrer des lignes selon des conditions et reste plus simple à lire pour un débutant. Dès qu’il faut regrouper, totaliser, trier et renommer en même temps, QUERY est plus compact.

QUERY ou RECHERCHEV : lequel choisir ?

RECHERCHEV (ou mieux, RECHERCHEX) va chercher une valeur dans une autre table, par exemple le prix d’une référence. QUERY renvoie toutes les lignes qui correspondent, et peut les totaliser. Les différences sont détaillées dans le guide RECHERCHEV, RECHERCHEH et RECHERCHEX.

QUERY est-il sensible à la casse ?

Oui pour les comparaisons de texte (=, contains, starts with). Pour ignorer la casse, comparez des versions en minuscules : where lower(B) contains 'julie'.

QUERY existe-t-il dans Excel ?

Non. Dans Excel, on combine plutôt FILTRE, TRIER et les tableaux croisés dynamiques, ou Power Query pour les transformations plus lourdes.

QUERY est au programme du niveau N2 « Google Sheets avancé » de la formation Google Sheets, avec les tableaux croisés dynamiques et IMPORTRANGE. Pour les formules conditionnelles, voir aussi la formule SI avec plusieurs conditions, et pour calculer toute une colonne avec une seule formule, ARRAYFORMULA, MAP et MAKEARRAY.