QUERY est sans doute la fonction la plus puissante de Google Sheets. Elle te permet d'interroger tes données avec une syntaxe SQL, transformant instantanément ta feuille de calcul en véritable base de données relationnelle. Si tu maîtrises QUERY, tu peux dire adieu aux dizaines de formules imbriquées complexes.
Que tu aies besoin de filtrer des milliers de ventes par région, d'extraire les employés d'un département avec des critères multiples, d'agréger des données financières par catégorie ou de créer des tableaux croisés dynamiques en une seule formule, c'est l'outil indispensable pour tout professionnel manipulant de grands volumes de données dans Google Sheets.
Syntaxe de la fonction QUERY
=QUERY(données; requête; [en_têtes])L'ordre des clauses SQL est obligatoire : SELECT, WHERE, GROUP BY, PIVOT, ORDER BY, LIMIT, LABEL. Le respecter dans un autre ordre provoque une erreur de syntaxe immédiate.
Comprendre chaque paramètre de la fonction QUERY
QUERY ne prend que trois arguments : d'abord la plage où vivent tes données, puis ta requête SQL entre guillemets doubles, et enfin le nombre de lignes d'en-tête. Seul ce dernier est facultatif, et c'est lui qui te joue des tours : laissé vide, Google Sheets devine, et il se trompe parfois en prenant ta première ligne de données pour un titre.
Le vrai travail se concentre dans le deuxième argument, la requête, qui à elle seule contient tout le filtrage, le tri et les regroupements.
données
: la plage de cellules contenant les données à interrogerC'est l'équivalent de la clause FROM en SQL classique. Tu peux utiliser une simple référence de plage comme A1:E100, ou des fonctions plus avancées qui retournent des tableaux.
Google Sheets traite cette plage comme une table de base de données où chaque colonne représente un champ et chaque ligne représente un enregistrement. La première ligne peut contenir des en-têtes selon le paramètre en_têtes, et toutes les lignes suivantes sont considérées comme des données.
Astuce : Tu peux utiliser IMPORTRANGE comme source : =QUERY(IMPORTRANGE("URL"; "Plage"); "SELECT Col1, Col2") pour interroger des feuilles dans d'autres classeurs.
requête
: la requête SQL à exécuter, entre guillemets doublesLes colonnes se référencent par leurs lettres (A, B, C...) relatives à ta plage, ou par Col1, Col2, Col3.
Clauses disponibles : SELECT (sélection de colonnes), WHERE (filtrage avec =, !=, >, <, LIKE, CONTAINS...), GROUP BY (regroupement avec SUM, AVG, COUNT, MIN, MAX), ORDER BY (tri ASC ou DESC), PIVOT (tableaux croisés), LIMIT (limiter les résultats), LABEL (renommer les colonnes). Tu peux combiner AND, OR, NOT dans les conditions WHERE.
Attention : Pour les valeurs textuelles à l'intérieur de ta requête, utilise des guillemets simples ' : "SELECT A WHERE B = 'Paris'". La requête est déjà entre guillemets doubles, donc les valeurs texte prennent des guillemets simples.
[en_têtes]
: nombre de lignes d'en-tête dans tes données : `-1` pour laisser Google Sheets deviner automatiquement, `0` si aucune ligne d'en-tête, `1` ou plus pour le nombre exact de lignes d'en-têtes. Si QUERY traite incorrectement ta première ligne de données comme des en-têtes, force explicitement `en_têtes` à `0`(facultatif)Si elle ignore tes en-têtes, force à 1 pour les inclure.
Exemples pratiques pas à pas
Analyste commercial : filtrer les ventes par région
Tu gères un fichier avec des milliers de ventes et tu veux analyser uniquement les performances de la région Nord. Plutôt que de filtrer manuellement ou d'utiliser des formules complexes, QUERY te permet de créer une vue filtrée et triée instantanément.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Région | Vendeur | Montant | Date |
| 2 | Nord | Marie | 15 000 | 2024-01-15 |
| 3 | Sud | Pierre | 23 000 | 2024-01-20 |
| 4 | Nord | Sophie | 18 000 | 2024-02-10 |
| 5 | Est | Lucas | 12 000 | 2024-02-15 |
| 6 | Nord | Marie | 21 000 | 2024-03-01 |
| 7 | Ouest | Julie | 19 000 | 2024-03-05 |
=QUERY(A1:D7; "SELECT A, B, C, D WHERE A = 'Nord' ORDER BY C DESC")La fonction filtre toutes les lignes dont la colonne A vaut Nord, puis trie le résultat par montant décroissant pour identifier les meilleures performances.
Astuce de pro : Ajoute plusieurs conditions avec AND : "WHERE A = 'Nord' AND C > 15000 AND D >= date '2024-02-01'" pour filtrer les grosses ventes du Nord depuis février.
RH : extraire les employés selon plusieurs critères
Ton équipe RH doit identifier les collaborateurs du département IT avec un salaire supérieur à un certain seuil pour une analyse de masse salariale. QUERY te permet de combiner plusieurs conditions de filtrage en une seule formule claire.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Nom | Département | Salaire | Ancienneté |
| 2 | Dupont | IT | 45 000 | 5 |
| 3 | Martin | Marketing | 38 000 | 3 |
| 4 | Bernard | IT | 52 000 | 8 |
| 5 | Durand | Finance | 41 000 | 4 |
| 6 | Lefebvre | IT | 48 000 | 6 |
| 7 | Rousseau | IT | 44 000 | 2 |
=QUERY(A1:D7; "SELECT A, C, D WHERE B = 'IT' AND C > 46000 ORDER BY C DESC")Ici, la fonction combine B = 'IT' et C > 46000 avec AND : seuls Bernard (52 000) et Lefebvre (48 000) satisfont les deux conditions, et le résultat est trié par salaire décroissant.
Astuce de pro : Utilise OR pour des conditions alternatives : "WHERE (B = 'IT' OR B = 'Finance') AND C > 45000" pour couvrir deux départements en une fois.
Contrôleur de gestion : agréger des dépenses par catégorie
Tu dois créer un tableau de synthèse mensuel qui agrège automatiquement toutes les dépenses par catégorie. Plutôt que des tableaux croisés dynamiques manuels, QUERY te donne un résultat dynamique qui se met à jour automatiquement.
| A | B | C | |
|---|---|---|---|
| 1 | Catégorie | Mois | Dépenses |
| 2 | Marketing | Janvier | 12 000 |
| 3 | IT | Janvier | 8 000 |
| 4 | Marketing | Février | 15 000 |
| 5 | IT | Février | 9 000 |
| 6 | Marketing | Mars | 11 000 |
| 7 | IT | Mars | 7 500 |
| 8 | RH | Janvier | 5 000 |
=QUERY(A1:C8; "SELECT A, SUM(C) GROUP BY A ORDER BY SUM(C) DESC LABEL SUM(C) 'Total'")Ici, GROUP BY A regroupe les lignes par catégorie, SUM(C) additionne les dépenses de chaque groupe, LABEL renomme la colonne agrégée en Total. Chaque fois que tu ajoutes une ligne au tableau source, le résumé se recalcule tout seul.
Astuce de pro : Utilise aussi AVG, COUNT, MIN, MAX avec GROUP BY. Exemple : "SELECT A, COUNT(B) GROUP BY A" compte le nombre de lignes par catégorie.
Data analyst : croiser plusieurs dimensions complexes
Tu analyses le chiffre d'affaires des produits par région et par trimestre pour identifier les meilleures opportunités commerciales. QUERY te permet de croiser autant de critères que nécessaire tout en gardant une formule lisible.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Produit | Région | Quantité | CA | Trimestre |
| 2 | Laptop | Nord | 45 | 67 500 | Q1 |
| 3 | Souris | Sud | 120 | 3 600 | Q1 |
| 4 | Laptop | Sud | 38 | 57 000 | Q2 |
| 5 | Clavier | Nord | 85 | 6 800 | Q2 |
| 6 | Laptop | Est | 52 | 78 000 | Q1 |
| 7 | Laptop | Nord | 41 | 61 500 | Q1 |
=QUERY(A1:E7; "SELECT B, SUM(D) WHERE A = 'Laptop' AND E = 'Q1' GROUP BY B ORDER BY SUM(D) DESC LABEL B 'Région', SUM(D) 'CA Total'")Ici, la fonction filtre d'abord les Laptops du Q1 (WHERE), regroupe le CA par région (GROUP BY B), trie par CA décroissant et renomme les colonnes avec LABEL. Tout en une seule formule.
Astuce de pro : Pour grouper par plusieurs colonnes, utilise GROUP BY A, B : tu obtiens des sous-totaux par catégorie et sous-catégorie en même temps.
Envie de t'entraîner sur de vrais exercices Excel ?
M'entraînerLes erreurs fréquentes avec la fonction QUERY
Presque tout ce qui coince avec QUERY se cache dans la requête elle-même, ce texte entre guillemets que Google Sheets lit comme du SQL. Une valeur texte écrite Paris au lieu de 'Paris', des clauses dans le désordre, un SUM sans son GROUP BY : la moindre coquille fait tout planter.
L'autre famille de problèmes vient des colonnes : leurs lettres sont relatives à ta plage, donc SELECT F sur une plage A1:D100 pointe dans le vide. Et quand le résultat sort vide sans message, c'est presque toujours ton WHERE qui est trop strict ou une casse qui ne colle pas.
La requête retourne un résultat vide
La formule affiche une sortie vide sans erreur. Cela arrive quand ta condition WHERE est trop restrictive, qu'il y a une faute de frappe dans une valeur texte (majuscules/minuscules comptent), ou que les données n'existent tout simplement pas dans la plage.
Solution : Teste d'abord avec "SELECT *" sans WHERE pour vérifier que ta plage de données est correcte. Ajoute ensuite les conditions une par une pour identifier celle qui filtre tout.
Erreur de syntaxe SQL dans la requête
La requête contient un mot-clé mal orthographié, des guillemets manquants ou incorrects, ou les clauses ne sont pas dans le bon ordre (SELECT, WHERE, GROUP BY, PIVOT, ORDER BY, LIMIT, LABEL).
Solution : Vérifie l'ordre obligatoire des clauses et utilise toujours des guillemets simples ' pour les valeurs textuelles à l'intérieur de la requête.
Agrégation sans GROUP BY
Tu utilises une fonction d'agrégation (SUM, AVG, COUNT...) dans ton SELECT avec d'autres colonnes non agrégées, mais sans GROUP BY. En SQL, toutes les colonnes non agrégées doivent figurer dans GROUP BY.
Solution : Ajoute GROUP BY suivi de toutes les colonnes présentes dans SELECT qui ne sont pas dans une fonction d'agrégation : "SELECT A, SUM(B) GROUP BY A".
Colonne inexistante dans la plage
Tu références une colonne qui dépasse les limites de ta plage. Par exemple, tu utilises SELECT F alors que ta plage A1:D100 ne contient que les colonnes A à D. Les lettres sont relatives à la plage, pas à la feuille entière.
Solution : Vérifie que ta plage de données inclut toutes les colonnes référencées. Si ta plage commence en B, alors Col1 correspond à la colonne B, pas A.
Comparaison de types incompatibles
Tu compares des types de données incompatibles : par exemple "WHERE A > 100" alors que la colonne A contient du texte, ou "WHERE B = 'Paris'" alors que B contient des nombres.
Solution : Assure-toi que tes colonnes contiennent le bon type. Utilise des guillemets simples uniquement pour le texte, rien pour les nombres, et le format date '2024-01-15' pour les dates.
Valeurs texte sans guillemets simples
Tu as écrit WHERE A = Paris au lieu de WHERE A = 'Paris'. Sans guillemets simples, Google Sheets interprète Paris comme un nom de colonne ou une variable.
Solution : Encadre toujours les valeurs textuelles avec des guillemets simples ' à l'intérieur de ta requête : "WHERE A = 'Paris' AND B = 'France'".
QUERY vs FILTRE vs TRIER vs UNIQUE vs SOMME.SI.ENS
Utilise QUERY quand tu dois combiner filtrage, tri, agrégation ou tableaux croisés en une seule formule. Pour des besoins simples, FILTRE ou TRIER peuvent suffire, et ils fonctionnent aussi bien dans Excel.
| Critère | QUERY | FILTRE | TRIER | UNIQUE | SOMME.SI.ENS |
|---|---|---|---|---|---|
| Disponibilité | Google Sheets uniquement | Excel + Sheets | Excel + Sheets | Excel + Sheets | Excel + Sheets |
| Filtrage par condition | Oui (WHERE + AND/OR) | Oui | Non | Non | Oui (jusqu'à 127 critères) |
| Tri intégré | Oui (ORDER BY) | Non | Oui | Non | Non |
| Agrégation (SUM, COUNT...) | Oui (GROUP BY) | Non | Non | Non | Oui (résultat unique) |
| Résultat | Tableau complet | Tableau filtré | Tableau trié | Valeurs dédupliquées | Valeur unique |
Questions fréquentes sur la fonction QUERY
Quelles clauses SQL sont supportées par QUERY ?
QUERY supporte les principales clauses SQL : SELECT (sélection de colonnes), WHERE (filtrage), ORDER BY (tri), GROUP BY (regroupement), PIVOT (tableaux croisés), LIMIT (limitation de résultats) et LABEL (renommage de colonnes). Tu peux les combiner pour créer des analyses sophistiquées en une seule formule.
Comment référencer les colonnes dans une requête QUERY ?
Les colonnes se référencent par leurs lettres (A, B, C...) ou par Col1, Col2, Col3... Tu peux aussi utiliser les en-têtes de colonnes si le paramètre en_têtes est défini sur 1 ou -1.
Attention : les lettres de colonnes sont relatives à ta plage de données, pas à la feuille entière.
QUERY fonctionne-t-elle dans Excel ?
Non, QUERY est une fonction exclusive à Google Sheets. Excel propose des alternatives comme les tableaux structurés, Power Query ou les fonctions FILTRER et TRIER pour obtenir des résultats similaires.
Si tu travailles sur Excel, combine FILTRE, TRIER et UNIQUE pour des résultats proches.
Peut-on combiner plusieurs fonctions QUERY ensemble ?
Oui, tu peux utiliser le résultat d'une QUERY comme source de données pour une autre QUERY. Tu peux aussi combiner QUERY avec d'autres fonctions comme ARRAYFORMULA, IMPORTRANGE, ou utiliser des opérateurs d'ensemble pour fusionner plusieurs requêtes.
Par exemple : =QUERY(QUERY(A1:D100; "SELECT *"); "SELECT * WHERE Col3 > 1000") applique deux filtres successifs.
Comment déboguer une requête QUERY qui ne fonctionne pas ?
Commence par tester une requête simple comme "SELECT *" pour vérifier que ta plage de données est correcte. Ajoute ensuite les clauses une par une : d'abord SELECT avec les colonnes spécifiques, puis WHERE, puis ORDER BY.
Vérifie toujours les guillemets simples pour les valeurs textuelles et les types de données de tes colonnes.
Pour aller plus loin
Les fonctions similaires : FILTRE, TRIER, UNIQUE, SOMME.SI.ENS, ARRAYFORMULA
Bloqué sur une formule Excel ?
Pose ta question à notre assistant Excel IA, il te sort la bonne formule en quelques secondes.
Essayer l'assistant IAGratuit · 10 questions par mois
