{"id":8663,"date":"2026-07-14T16:11:15","date_gmt":"2026-07-14T14:11:15","guid":{"rendered":"https:\/\/tutoriel-googlesheets.fr\/?p=8663"},"modified":"2026-07-16T17:55:51","modified_gmt":"2026-07-16T15:55:51","slug":"les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement","status":"publish","type":"post","link":"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/","title":{"rendered":"Les fonctions Google Sheets : comment automatiser vos calculs efficacement"},"content":{"rendered":"<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Space+Grotesk:wght@500;600;700&#038;family=Inter:wght@400;500;600;700&#038;family=JetBrains+Mono:wght@500;600&#038;display=swap\">\n<style>\n.tg-tuto-wrap{font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;color:#1f2a24;line-height:1.68;font-size:17px;}\n.tg-tuto-wrap h2{font-family:'Space Grotesk','Inter',sans-serif;font-weight:700;font-size:clamp(23px,3.1vw,32px);letter-spacing:-.02em;color:#12241a;margin:48px 0 14px;line-height:1.2;}\n.tg-tuto-wrap h3{font-family:'Space Grotesk','Inter',sans-serif;font-weight:600;font-size:19px;letter-spacing:-.01em;color:#17321f;margin:26px 0 8px;}\n.tg-tuto-wrap p{margin:0 0 16px;}\n.tg-tuto-wrap a{color:#0b7a2f;text-decoration:underline;text-underline-offset:2px;}\n.tg-tuto-kick{font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#188038;display:block;margin-bottom:6px;}\n.tg-tuto-lead{font-size:20px;line-height:1.55;color:#334138;font-weight:500;margin:8px 0 28px;}\n.tg-tuto-answer{background:linear-gradient(180deg,#f0f9f2,#f6fbf7);border:1px solid #cfe7d6;border-left:5px solid #188038;border-radius:14px;padding:24px 26px;margin:26px 0;box-shadow:0 12px 28px -18px rgba(24,128,56,.5);}\n.tg-tuto-answer .tg-tuto-h{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:19px;color:#12241a;margin-bottom:12px;}\n.tg-tuto-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:8px;}\n.tg-tuto-step{display:flex;gap:12px;background:#fff;border:1px solid #d8eadd;border-radius:10px;padding:14px 16px;align-items:flex-start;transition:.25s ease;}\n.tg-tuto-step:hover{transform:translateY(-3px);box-shadow:0 10px 22px -14px rgba(24,128,56,.5);}\n.tg-tuto-num{flex:0 0 28px;width:28px;height:28px;border-radius:50%;background:#188038;color:#fff;font-family:'JetBrains Mono',monospace;font-weight:600;font-size:13px;display:flex;align-items:center;justify-content:center;}\n.tg-tuto-step .tg-tuto-t{font-size:14.5px;line-height:1.5;color:#25352b;}\n.tg-tuto-step .tg-tuto-t b{color:#12241a;}\n.tg-tuto-prereq{background:#fafdfb;border:1px solid #e2ede6;border-radius:12px;padding:18px 22px;margin:24px 0;}\n.tg-tuto-prereq .tg-tuto-h{font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:#188038;margin-bottom:10px;}\n.tg-tuto-prereq ul{margin:0;padding-left:20px;}\n.tg-tuto-prereq li{margin:4px 0;font-size:15px;color:#33433a;}\n.tg-tuto-code{background:#12241a;border-radius:10px;padding:16px 18px;margin:16px 0;overflow-x:auto;}\n.tg-tuto-code pre{margin:0;font-family:'JetBrains Mono',monospace;font-size:13.5px;line-height:1.6;color:#dbeee1;white-space:pre;}\n.tg-tuto-code .c-key{color:#7fd89a;}\n.tg-tuto-code .c-com{color:#7f9488;font-style:italic;}\n.tg-tuto-note{background:#fff8e8;border-left:4px solid #e0a500;border-radius:0 8px 8px 0;padding:14px 18px;margin:18px 0;}\n.tg-tuto-note b{color:#7a5a00;font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.08em;text-transform:uppercase;margin-right:8px;}\n.tg-tuto-note span{font-size:15px;color:#3a3a2a;}\n.tg-tuto-tablewrap{overflow-x:auto;border:1px solid #dcebe1;border-radius:12px;margin:26px 0;}\n.tg-tuto-table{width:100%;border-collapse:collapse;font-size:14.5px;min-width:520px;}\n.tg-tuto-table thead tr{background:#12241a;color:#fff;}\n.tg-tuto-table th{text-align:left;padding:13px 16px;font-family:'Space Grotesk',sans-serif;font-weight:600;font-size:12.5px;letter-spacing:.04em;text-transform:uppercase;}\n.tg-tuto-table td{padding:13px 16px;border-bottom:1px solid #eef4f0;color:#2c3a32;vertical-align:top;}\n.tg-tuto-table tbody tr:nth-child(even){background:#f7fbf8;}\n.tg-tuto-table td b{color:#12241a;}\n.tg-tuto-table code{font-family:'JetBrains Mono',monospace;font-size:12.5px;background:#eef6f0;color:#0b6a2b;padding:1px 5px;border-radius:4px;}\n.tg-tuto-yt{border:1px solid #e6e8ee;border-radius:14px;padding:16px 18px;margin:26px 0;background:#fafbfc;}\n.tg-tuto-yt .tg-tuto-ythead{display:flex;align-items:center;gap:8px;margin-bottom:10px;}\n.tg-tuto-yt .tg-tuto-badge{font-size:11px;font-weight:800;letter-spacing:.06em;color:#fff;background:#FF0000;padding:3px 9px;border-radius:6px;}\n.tg-tuto-yt .tg-tuto-chan{font-size:13px;color:#667085;font-weight:600;}\n.tg-tuto-yt .tg-tuto-vtitle{font-size:14px;color:#1a1a1a;font-weight:600;margin-top:10px;}\n.tg-tuto-retain{background:#12241a;border-radius:14px;padding:24px 26px;margin:34px 0;color:#e8f3ec;}\n.tg-tuto-retain .tg-tuto-h{font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:#7fd89a;margin-bottom:14px;}\n.tg-tuto-retain ul{margin:0;padding-left:20px;}\n.tg-tuto-retain li{margin:7px 0;color:#e8f3ec!important;font-size:15.5px;line-height:1.55;}\n.tg-tuto-retain li b,.tg-tuto-retain b{color:#fff!important;}\n.tg-tuto-faq{margin:30px 0;}\n.tg-tuto-faq h2{margin-bottom:8px;}\n.tg-tuto-faq details{border-bottom:1px solid #dcebe1;}\n.tg-tuto-faq summary{cursor:pointer;padding:16px 2px;font-family:'Space Grotesk',sans-serif;font-size:17px;font-weight:600;color:#12241a;list-style:none;display:flex;justify-content:space-between;gap:14px;align-items:center;}\n.tg-tuto-faq summary::-webkit-details-marker{display:none;}\n.tg-tuto-faq summary .tg-tuto-plus{color:#188038;font-size:22px;font-weight:400;line-height:1;flex:none;}\n.tg-tuto-faq details[open] summary .tg-tuto-plus{transform:rotate(45deg);transition:.2s;}\n.tg-tuto-faq .tg-tuto-a{padding:0 2px 18px;font-size:15.5px;line-height:1.7;color:#3a463f;}\n.tg-tuto-src{display:flex;gap:14px;align-items:flex-start;background:#f0f9f2;border:1px solid #cfe7d6;border-radius:14px;padding:18px 22px;margin:30px 0;}\n.tg-tuto-src .tg-tuto-ic{flex:none;width:40px;height:40px;border-radius:10px;background:#188038;color:#fff;font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:20px;display:flex;align-items:center;justify-content:center;}\n.tg-tuto-src .tg-tuto-st{font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:#188038;display:block;margin-bottom:4px;}\n.tg-tuto-src .tg-tuto-sb{font-size:15px;color:#25352b;}\n<\/style>\n<div class=\"tg-tuto-wrap\">\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_87 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#Automatiser_Google_Sheets_macros_formules_dynamiques_et_Apps_Script\" >Automatiser Google Sheets : macros, formules dynamiques et Apps Script<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#1_Les_fonctions_dynamiques_automatiser_les_calculs\" >1. Les fonctions dynamiques : automatiser les calculs<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#ARRAYFORMULA_%E2%80%94_appliquer_une_formule_a_toute_une_colonne\" >ARRAYFORMULA \u2014 appliquer une formule \u00e0 toute une colonne<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#QUERY_%E2%80%94_interroger_vos_donnees_comme_une_base_SQL\" >QUERY \u2014 interroger vos donn\u00e9es comme une base SQL<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#FILTER_%E2%80%94_nafficher_que_les_lignes_utiles\" >FILTER \u2014 n&rsquo;afficher que les lignes utiles<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#IMPORTRANGE_%E2%80%94_rapatrier_des_donnees_dune_autre_feuille\" >IMPORTRANGE \u2014 rapatrier des donn\u00e9es d&rsquo;une autre feuille<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#2_Mise_en_forme_conditionnelle_et_validation_des_donnees\" >2. Mise en forme conditionnelle et validation des donn\u00e9es<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#Mise_en_forme_conditionnelle\" >Mise en forme conditionnelle<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#Validation_des_donnees\" >Validation des donn\u00e9es<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#3_Les_macros_enregistrees_automatiser_sans_coder\" >3. Les macros enregistr\u00e9es : automatiser sans coder<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#4_Google_Apps_Script_lautomatisation_qui_se_declenche_seule\" >4. Google Apps Script : l&rsquo;automatisation qui se d\u00e9clenche seule<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#Un_declencheur_%C2%AB_a_chaque_modification_%C2%BB_onEdit\" >Un d\u00e9clencheur \u00ab \u00e0 chaque modification \u00bb (onEdit)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#Un_declencheur_a_heure_fixe_temporel\" >Un d\u00e9clencheur \u00e0 heure fixe (temporel)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#Les_notifications_automatiques\" >Les notifications automatiques<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#Quelle_methode_pour_quel_besoin\" >Quelle m\u00e9thode pour quel besoin ?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/#Questions_frequentes\" >Questions fr\u00e9quentes<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"Automatiser_Google_Sheets_macros_formules_dynamiques_et_Apps_Script\"><\/span>Automatiser Google Sheets : macros, formules dynamiques et Apps Script<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p><span class=\"tg-tuto-kick\">Tutoriel \u00b7 Automatisation<\/span><\/p>\n<p class=\"tg-tuto-lead\">Ressaisir les m\u00eames calculs, recopier une formule sur des centaines de lignes, mettre \u00e0 jour un tableau \u00e0 la main\u2026 Google Sheets sait faire tout cela \u00e0 votre place. Voici les quatre voies d&rsquo;automatisation r\u00e9elles, de la plus simple (une formule) \u00e0 la plus puissante (un script d\u00e9clench\u00e9 tout seul).<\/p>\n<div class=\"tg-tuto-answer\">\n<div class=\"tg-tuto-h\">Les 4 fa\u00e7ons d&rsquo;automatiser Google Sheets<\/div>\n<div class=\"tg-tuto-steps\">\n<div class=\"tg-tuto-step\"><span class=\"tg-tuto-num\">1<\/span><span class=\"tg-tuto-t\"><b>Fonctions dynamiques<\/b> \u2014 ARRAYFORMULA, QUERY, FILTER, IMPORTRANGE calculent et se mettent \u00e0 jour seules, sans copier-coller.<\/span><\/div>\n<div class=\"tg-tuto-step\"><span class=\"tg-tuto-num\">2<\/span><span class=\"tg-tuto-t\"><b>Mise en forme &#038; validation<\/b> \u2014 colorer, alerter ou contraindre la saisie automatiquement selon des r\u00e8gles.<\/span><\/div>\n<div class=\"tg-tuto-step\"><span class=\"tg-tuto-num\">3<\/span><span class=\"tg-tuto-t\"><b>Macros enregistr\u00e9es<\/b> \u2014 rejouer une suite d&rsquo;actions d&rsquo;un simple raccourci, sans \u00e9crire de code.<\/span><\/div>\n<div class=\"tg-tuto-step\"><span class=\"tg-tuto-num\">4<\/span><span class=\"tg-tuto-t\"><b>Google Apps Script<\/b> \u2014 un vrai script qui s&rsquo;ex\u00e9cute \u00e0 l&rsquo;ouverture, \u00e0 chaque modification ou \u00e0 heure fixe.<\/span><\/div>\n<\/p><\/div>\n<\/div>\n<p>La bonne m\u00e9thode d\u00e9pend de la t\u00e2che : une formule suffit souvent pour un calcul r\u00e9p\u00e9titif, tandis qu&rsquo;un envoi d&rsquo;e-mail programm\u00e9 ou une action d\u00e9clench\u00e9e par une modification demandent un script. On les passe en revue dans l&rsquo;ordre, du plus accessible au plus avanc\u00e9.<\/p>\n<div class=\"tg-tuto-prereq\">\n<div class=\"tg-tuto-h\">Ce qu&rsquo;il vous faut<\/div>\n<ul>\n<li>Un compte Google et une feuille de calcul Google Sheets (aucune installation).<\/li>\n<li>Pour les macros et les scripts : un acc\u00e8s au menu <b>Extensions<\/b> de la feuille.<\/li>\n<li>Aucune connaissance en programmation pour les points 1 \u00e0 3 ; des notions de JavaScript aident pour Apps Script.<\/li>\n<li><b>S\u00e9parateur d&rsquo;arguments en fran\u00e7ais : le point-virgule<\/b> (<code style=\"font-family:'JetBrains Mono',monospace;\">;<\/code>), pas la virgule.<\/li>\n<\/ul>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"1_Les_fonctions_dynamiques_automatiser_les_calculs\"><\/span>1. Les fonctions dynamiques : automatiser les calculs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>C&rsquo;est le premier r\u00e9flexe. Une formule bien pens\u00e9e recalcule toute seule \u00e0 chaque changement de donn\u00e9es. Quatre fonctions couvrent l&rsquo;essentiel des besoins d&rsquo;automatisation.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"ARRAYFORMULA_%E2%80%94_appliquer_une_formule_a_toute_une_colonne\"><\/span>ARRAYFORMULA \u2014 appliquer une formule \u00e0 toute une colonne<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Au lieu de recopier <code style=\"font-family:'JetBrains Mono',monospace;\">=B2*C2<\/code> ligne par ligne, une seule formule traite toute la plage. Les nouvelles lignes se calculent automatiquement, sans rien recopier.<\/p>\n<div class=\"tg-tuto-code\">\n<pre>=<span class=\"c-key\">ARRAYFORMULA<\/span>(SI(B2:B=\"\"; \"\"; B2:B*C2:C))\n<span class=\"c-com\">\/\/ Multiplie quantit\u00e9 \u00d7 prix sur toute la colonne,<\/span>\n<span class=\"c-com\">\/\/ et laisse la cellule vide tant qu'il n'y a pas de donn\u00e9e.<\/span><\/pre>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"QUERY_%E2%80%94_interroger_vos_donnees_comme_une_base_SQL\"><\/span>QUERY \u2014 interroger vos donn\u00e9es comme une base SQL<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>QUERY applique un langage proche du SQL pour filtrer, trier et regrouper sans manipulation manuelle. Id\u00e9al pour extraire une sous-liste qui se met \u00e0 jour d&rsquo;elle-m\u00eame.<\/p>\n<div class=\"tg-tuto-code\">\n<pre>=<span class=\"c-key\">QUERY<\/span>(A1:D; \"SELECT A, B WHERE C > 100 ORDER BY B DESC\"; 1)\n<span class=\"c-com\">\/\/ Renvoie les colonnes A et B des lignes o\u00f9 C d\u00e9passe 100,<\/span>\n<span class=\"c-com\">\/\/ tri\u00e9es par B d\u00e9croissant. Le 1 indique une ligne d'en-t\u00eate.<\/span><\/pre>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"FILTER_%E2%80%94_nafficher_que_les_lignes_utiles\"><\/span>FILTER \u2014 n&rsquo;afficher que les lignes utiles<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Plus simple que QUERY pour un filtre par condition. Le r\u00e9sultat se recompose automatiquement d\u00e8s que les donn\u00e9es changent.<\/p>\n<div class=\"tg-tuto-code\">\n<pre>=<span class=\"c-key\">FILTER<\/span>(A2:C; B2:B>100)\n<span class=\"c-com\">\/\/ Affiche uniquement les lignes dont la colonne B d\u00e9passe 100.<\/span><\/pre>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"IMPORTRANGE_%E2%80%94_rapatrier_des_donnees_dune_autre_feuille\"><\/span>IMPORTRANGE \u2014 rapatrier des donn\u00e9es d&rsquo;une autre feuille<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>IMPORTRANGE alimente automatiquement une feuille de synth\u00e8se depuis un autre fichier Sheets. \u00c0 la premi\u00e8re utilisation, un bouton d&rsquo;autorisation appara\u00eet : il faut cliquer sur <b>Autoriser l&rsquo;acc\u00e8s<\/b> pour connecter les deux fichiers.<\/p>\n<div class=\"tg-tuto-code\">\n<pre>=<span class=\"c-key\">IMPORTRANGE<\/span>(\"URL_ou_ID_du_fichier\"; \"Feuille1!A1:D\")\n<span class=\"c-com\">\/\/ Copie en temps r\u00e9el la plage A1:D de l'autre classeur.<\/span><\/pre>\n<\/div>\n<div class=\"tg-tuto-note\"><b>Bon \u00e0 savoir<\/b><span>Ces fonctions se recalculent seules quand les donn\u00e9es sources changent : c&rsquo;est la forme d&rsquo;automatisation la plus robuste, car il n&rsquo;y a aucun script \u00e0 maintenir.<\/span><\/div>\n<h2><span class=\"ez-toc-section\" id=\"2_Mise_en_forme_conditionnelle_et_validation_des_donnees\"><\/span>2. Mise en forme conditionnelle et validation des donn\u00e9es<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Deux automatisations \u00ab sans formule visible \u00bb qui font r\u00e9agir la feuille \u00e0 la saisie.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Mise_en_forme_conditionnelle\"><\/span>Mise en forme conditionnelle<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Elle colore ou met en gras des cellules automatiquement selon leur contenu. Rendez-vous dans <b>Format &gt; Mise en forme conditionnelle<\/b>, choisissez une plage, puis une r\u00e8gle simple (\u00ab sup\u00e9rieur \u00e0 \u00bb, \u00ab contient le texte\u2026 \u00bb) ou une <b>formule personnalis\u00e9e<\/b> pour des cas plus fins.<\/p>\n<div class=\"tg-tuto-code\">\n<pre><span class=\"c-com\">\/\/ Formule personnalis\u00e9e : surligne toute la ligne<\/span>\n<span class=\"c-com\">\/\/ d\u00e8s que le montant de la colonne D d\u00e9passe 1000.<\/span>\n=$D2>1000<\/pre>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Validation_des_donnees\"><\/span>Validation des donn\u00e9es<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Elle contraint et fiabilise la saisie. Via <b>Donn\u00e9es &gt; Validation des donn\u00e9es<\/b>, vous pouvez cr\u00e9er une <b>liste d\u00e9roulante<\/b>, imposer une date valide, une case \u00e0 cocher, ou rejeter les valeurs hors crit\u00e8re. R\u00e9sultat : moins d&rsquo;erreurs, et des colonnes pr\u00eates \u00e0 \u00eatre exploit\u00e9es par vos formules.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"3_Les_macros_enregistrees_automatiser_sans_coder\"><\/span>3. Les macros enregistr\u00e9es : automatiser sans coder<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Une macro enregistre une suite d&rsquo;actions (mise en forme, tri, insertion de colonnes\u2026) et les rejoue \u00e0 l&rsquo;identique. C&rsquo;est l&rsquo;entr\u00e9e id\u00e9ale dans l&rsquo;automatisation quand on ne veut pas \u00e9crire de code \u2014 Google convertit en r\u00e9alit\u00e9 vos gestes en script Apps Script, sans que vous ayez \u00e0 le toucher.<\/p>\n<div class=\"tg-tuto-prereq\">\n<div class=\"tg-tuto-h\">Enregistrer une macro, \u00e9tape par \u00e9tape<\/div>\n<ul>\n<li>Menu <b>Extensions &gt; Macros &gt; Enregistrer une macro<\/b>.<\/li>\n<li>Choisissez <b>r\u00e9f\u00e9rences absolues<\/b> (agit toujours sur les m\u00eames cellules) ou <b>relatives<\/b> (agit \u00e0 partir de la cellule s\u00e9lectionn\u00e9e).<\/li>\n<li>R\u00e9alisez vos actions normalement \u2014 elles sont enregistr\u00e9es.<\/li>\n<li>Cliquez sur <b>Enregistrer<\/b>, nommez la macro et, si vous voulez, attribuez-lui un raccourci clavier.<\/li>\n<li>Relancez-la \u00e0 tout moment via <b>Extensions &gt; Macros<\/b> ou son raccourci.<\/li>\n<\/ul>\n<\/div>\n<div class=\"tg-tuto-note\"><b>Astuce<\/b><span>Le choix r\u00e9f\u00e9rences absolues vs relatives est d\u00e9cisif : une macro de mise en forme d&rsquo;un tableau standard se fait en absolu, une action \u00e0 r\u00e9p\u00e9ter \u00ab l\u00e0 o\u00f9 je clique \u00bb se fait en relatif.<\/span><\/div>\n<div class=\"tg-tuto-yt\">\n<div class=\"tg-tuto-ythead\">\n    <span class=\"tg-tuto-badge\">\u25b6 YouTube<\/span><br \/>\n    <span class=\"tg-tuto-chan\">Prolific Oaktree<\/span>\n  <\/div>\n<p>  <a href=\"https:\/\/www.youtube.com\/watch?v=-4BUelyDLXM\" target=\"_blank\" rel=\"noopener nofollow\" style=\"display:block;position:relative;border-radius:10px;overflow:hidden;\"><br \/>\n    <img decoding=\"async\" src=\"https:\/\/i.ytimg.com\/vi\/-4BUelyDLXM\/hq720.jpg?sqp=-oaymwEnCNAFEJQDSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&#038;rs=AOn4CLDmbcmurv35BS22dldAZ23o-kKHEQ\" alt=\"Google Sheets - Macro Tutorial with Examples\" style=\"width:100%;display:block;\"><br \/>\n    <span style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.18);\"><br \/>\n    <span style=\"width:62px;height:62px;border-radius:50%;background:rgba(255,0,0,.92);color:#fff;font-size:24px;display:flex;align-items:center;justify-content:center;\">\u25b6<\/span><\/span><\/a><\/p>\n<div class=\"tg-tuto-vtitle\">Google Sheets \u2014 Macro Tutorial with Examples<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"4_Google_Apps_Script_lautomatisation_qui_se_declenche_seule\"><\/span>4. Google Apps Script : l&rsquo;automatisation qui se d\u00e9clenche seule<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Pour tout ce que les formules et les macros ne savent pas faire \u2014 envoyer un e-mail, \u00e9crire une date automatiquement, ex\u00e9cuter une t\u00e2che \u00e0 heure fixe \u2014 il y a <b>Google Apps Script<\/b>, un environnement JavaScript int\u00e9gr\u00e9. Ouvrez-le via <b>Extensions &gt; Apps Script<\/b>.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Un_declencheur_%C2%AB_a_chaque_modification_%C2%BB_onEdit\"><\/span>Un d\u00e9clencheur \u00ab \u00e0 chaque modification \u00bb (onEdit)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>La fonction <code style=\"font-family:'JetBrains Mono',monospace;\">onEdit<\/code> est un <b>d\u00e9clencheur simple<\/b> : elle s&rsquo;ex\u00e9cute automatiquement \u00e0 chaque \u00e9dition de la feuille. Exemple courant \u2014 horodater une ligne d\u00e8s qu&rsquo;on la remplit :<\/p>\n<div class=\"tg-tuto-code\">\n<pre><span class=\"c-key\">function<\/span> onEdit(e) {\n  <span class=\"c-key\">const<\/span> range = e.range;\n  <span class=\"c-com\">\/\/ Si on modifie la colonne B (n\u00b02)\u2026<\/span>\n  <span class=\"c-key\">if<\/span> (range.getColumn() === 2) {\n    <span class=\"c-com\">\/\/ \u2026\u00e9crit la date du jour dans la colonne C.<\/span>\n    range.offset(0, 1).setValue(<span class=\"c-key\">new<\/span> Date());\n  }\n}<\/pre>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Un_declencheur_a_heure_fixe_temporel\"><\/span>Un d\u00e9clencheur \u00e0 heure fixe (temporel)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Pour lancer une fonction chaque jour ou chaque semaine \u2014 par exemple un rapport ou un rappel par e-mail \u2014 on utilise un <b>d\u00e9clencheur temporel installable<\/b>. Dans l&rsquo;\u00e9diteur Apps Script, ouvrez le menu <b>D\u00e9clencheurs<\/b> (ic\u00f4ne horloge) &gt; <b>Ajouter un d\u00e9clencheur<\/b>, puis choisissez la source d&rsquo;\u00e9v\u00e9nement <b>Bas\u00e9 sur le temps<\/b>.<\/p>\n<div class=\"tg-tuto-code\">\n<pre><span class=\"c-key\">function<\/span> rappelHebdo() {\n  MailApp.sendEmail(\n    \"destinataire@exemple.com\",\n    \"Rappel hebdomadaire\",\n    \"Le tableau de suivi est \u00e0 mettre \u00e0 jour.\"\n  );\n  <span class=\"c-com\">\/\/ \u00c0 associer \u00e0 un d\u00e9clencheur temporel<\/span>\n  <span class=\"c-com\">\/\/ depuis le menu D\u00e9clencheurs de l'\u00e9diteur.<\/span>\n}<\/pre>\n<\/div>\n<div class=\"tg-tuto-note\"><b>Attention<\/b><span>Les d\u00e9clencheurs simples (onEdit, onOpen) ne peuvent pas envoyer d&rsquo;e-mail ni acc\u00e9der \u00e0 d&rsquo;autres services prot\u00e9g\u00e9s. Pour cela, cr\u00e9ez un <b>d\u00e9clencheur installable<\/b> depuis le menu D\u00e9clencheurs \u2014 Google demandera alors une autorisation.<\/span><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Les_notifications_automatiques\"><\/span>Les notifications automatiques<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Sans script, Google Sheets sait d\u00e9j\u00e0 vous pr\u00e9venir : via <b>Outils &gt; R\u00e8gles de notification<\/b>, recevez un e-mail \u00e0 chaque modification de la feuille ou \u00e0 chaque r\u00e9ponse \u00e0 un formulaire li\u00e9. Pour des alertes sur-mesure (contenu personnalis\u00e9, condition pr\u00e9cise), c&rsquo;est <code style=\"font-family:'JetBrains Mono',monospace;\">MailApp.sendEmail<\/code> dans Apps Script qui prend le relais.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Quelle_methode_pour_quel_besoin\"><\/span>Quelle m\u00e9thode pour quel besoin ?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Choisissez le niveau d&rsquo;automatisation le plus simple qui r\u00e8gle votre probl\u00e8me \u2014 inutile de scripter ce qu&rsquo;une formule fait d\u00e9j\u00e0.<\/p>\n<div class=\"tg-tuto-tablewrap\">\n<table class=\"tg-tuto-table\">\n<thead>\n<tr>\n<th>Votre besoin<\/th>\n<th>M\u00e9thode recommand\u00e9e<\/th>\n<th>Outil<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><b>Calcul r\u00e9p\u00e9t\u00e9 sur toute une colonne<\/b><\/td>\n<td>Fonction dynamique<\/td>\n<td><code>ARRAYFORMULA<\/code><\/td>\n<\/tr>\n<tr>\n<td><b>Extraire \/ trier \/ filtrer des donn\u00e9es<\/b><\/td>\n<td>Fonction dynamique<\/td>\n<td><code>QUERY<\/code>, <code>FILTER<\/code><\/td>\n<\/tr>\n<tr>\n<td><b>Consolider plusieurs fichiers<\/b><\/td>\n<td>Fonction dynamique<\/td>\n<td><code>IMPORTRANGE<\/code><\/td>\n<\/tr>\n<tr>\n<td><b>Colorer \/ alerter selon une valeur<\/b><\/td>\n<td>Mise en forme conditionnelle<\/td>\n<td>Format &gt; MFC<\/td>\n<\/tr>\n<tr>\n<td><b>Fiabiliser la saisie (listes, cases)<\/b><\/td>\n<td>Validation des donn\u00e9es<\/td>\n<td>Donn\u00e9es &gt; Validation<\/td>\n<\/tr>\n<tr>\n<td><b>Rejouer une suite d&rsquo;actions manuelles<\/b><\/td>\n<td>Macro enregistr\u00e9e<\/td>\n<td>Extensions &gt; Macros<\/td>\n<\/tr>\n<tr>\n<td><b>R\u00e9agir \u00e0 une modification<\/b><\/td>\n<td>Script (d\u00e9clencheur simple)<\/td>\n<td><code>onEdit<\/code><\/td>\n<\/tr>\n<tr>\n<td><b>Envoyer un e-mail \/ agir \u00e0 heure fixe<\/b><\/td>\n<td>Script (d\u00e9clencheur installable)<\/td>\n<td>Apps Script + D\u00e9clencheurs<\/td>\n<\/tr>\n<tr>\n<td><b>\u00catre pr\u00e9venu d&rsquo;un changement<\/b><\/td>\n<td>Notification native ou script<\/td>\n<td>Outils &gt; R\u00e8gles de notification<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"tg-tuto-retain\">\n<div class=\"tg-tuto-h\">\u00c0 retenir<\/div>\n<ul>\n<li>Commencez toujours par une <b>fonction dynamique<\/b> : c&rsquo;est l&rsquo;automatisation la plus fiable et sans maintenance.<\/li>\n<li>En fran\u00e7ais, s\u00e9parez les arguments de vos formules par un <b>point-virgule<\/b>.<\/li>\n<li>Une <b>macro enregistr\u00e9e<\/b> automatise sans \u00e9crire une ligne de code \u2014 Google la convertit en script pour vous.<\/li>\n<li><b>Apps Script<\/b> ouvre les vraies automatisations \u00e9v\u00e9nementielles : <code style=\"font-family:'JetBrains Mono',monospace;color:#7fd89a;\">onEdit<\/code> pour r\u00e9agir \u00e0 une saisie, un d\u00e9clencheur <b>temporel<\/b> pour agir \u00e0 heure fixe.<\/li>\n<li>Pour envoyer un e-mail depuis un script, il faut un <b>d\u00e9clencheur installable<\/b>, pas un d\u00e9clencheur simple.<\/li>\n<\/ul>\n<\/div>\n<div class=\"tg-tuto-faq\">\n<h2><span class=\"ez-toc-section\" id=\"Questions_frequentes\"><\/span>Questions fr\u00e9quentes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<details>\n<summary><span>Peut-on automatiser Google Sheets sans savoir coder ?<\/span><span class=\"tg-tuto-plus\">+<\/span><\/summary>\n<div class=\"tg-tuto-a\">Oui, largement. Les fonctions dynamiques (ARRAYFORMULA, QUERY, FILTER), la mise en forme conditionnelle, la validation des donn\u00e9es et les macros enregistr\u00e9es ne demandent aucune programmation. Le code (Apps Script) ne devient utile que pour les automatisations \u00e9v\u00e9nementielles avanc\u00e9es.<\/div>\n<\/details>\n<details>\n<summary><span>Comment enregistrer une macro dans Google Sheets ?<\/span><span class=\"tg-tuto-plus\">+<\/span><\/summary>\n<div class=\"tg-tuto-a\">Allez dans <b>Extensions &gt; Macros &gt; Enregistrer une macro<\/b>, choisissez r\u00e9f\u00e9rences absolues ou relatives, effectuez vos actions, puis cliquez sur Enregistrer et nommez la macro. Vous pourrez la relancer via le menu Macros ou un raccourci clavier.<\/div>\n<\/details>\n<details>\n<summary><span>Quelle est la diff\u00e9rence entre onEdit et un d\u00e9clencheur temporel ?<\/span><span class=\"tg-tuto-plus\">+<\/span><\/summary>\n<div class=\"tg-tuto-a\"><code style=\"font-family:'JetBrains Mono',monospace;\">onEdit<\/code> s&rsquo;ex\u00e9cute automatiquement \u00e0 chaque modification de la feuille (d\u00e9clencheur simple). Un d\u00e9clencheur temporel, lui, lance une fonction \u00e0 intervalle r\u00e9gulier (chaque jour, chaque semaine) ind\u00e9pendamment des saisies ; on le cr\u00e9e via le menu D\u00e9clencheurs de l&rsquo;\u00e9diteur Apps Script.<\/div>\n<\/details>\n<details>\n<summary><span>Pourquoi ma formule renvoie une erreur avec une virgule ?<\/span><span class=\"tg-tuto-plus\">+<\/span><\/summary>\n<div class=\"tg-tuto-a\">Dans l&rsquo;interface en fran\u00e7ais, le s\u00e9parateur d&rsquo;arguments est le <b>point-virgule<\/b> (<code style=\"font-family:'JetBrains Mono',monospace;\">;<\/code>). \u00c9crire <code style=\"font-family:'JetBrains Mono',monospace;\">QUERY(A1:D, \"\u2026\")<\/code> avec des virgules provoque une erreur : utilisez <code style=\"font-family:'JetBrains Mono',monospace;\">QUERY(A1:D; \"\u2026\")<\/code>.<\/div>\n<\/details>\n<details>\n<summary><span>Comment recevoir un e-mail quand la feuille change ?<\/span><span class=\"tg-tuto-plus\">+<\/span><\/summary>\n<div class=\"tg-tuto-a\">Le plus simple : <b>Outils &gt; R\u00e8gles de notification<\/b> pour un e-mail automatique \u00e0 chaque modification ou r\u00e9ponse de formulaire. Pour un message personnalis\u00e9, \u00e9crivez un script avec <code style=\"font-family:'JetBrains Mono',monospace;\">MailApp.sendEmail<\/code> associ\u00e9 \u00e0 un d\u00e9clencheur installable.<\/div>\n<\/details>\n<\/div>\n<div class=\"tg-tuto-src\">\n  <span class=\"tg-tuto-ic\">\u2726<\/span><br \/>\n  <span><br \/>\n    <span class=\"tg-tuto-st\">Sources officielles<\/span><br \/>\n    <span class=\"tg-tuto-sb\">Pour approfondir, consultez l&rsquo;<a href=\"https:\/\/support.google.com\/docs\/answer\/181110\" target=\"_blank\" rel=\"noopener nofollow\">aide officielle Google Sheets sur les macros<\/a> et la <a href=\"https:\/\/developers.google.com\/apps-script\/guides\/triggers\" target=\"_blank\" rel=\"noopener nofollow\">documentation Google Apps Script sur les d\u00e9clencheurs<\/a>. La liste compl\u00e8te des fonctions est d\u00e9taill\u00e9e dans l&rsquo;aide Google, r\u00e9guli\u00e8rement mise \u00e0 jour.<\/span><br \/>\n  <\/span>\n<\/div>\n<\/div>\n<p>Besoin d\u2019un d\u00e9pannage rapide sur une formule pr\u00e9cise ? Consultez notre s\u00e9rie <a href=\"https:\/\/tutoriel-googlesheets.fr\/les-formules-google-sheets-qui-sauvent-12-depannages-express\/\">les formules Google Sheets qui sauvent : 12 d\u00e9pannages express<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Automatiser Google Sheets : macros, formules dynamiques et Apps Script Tutoriel \u00b7 Automatisation Ressaisir les m\u00eames calculs, recopier une formule sur des centaines de lignes, &#8230; <a title=\"Les fonctions Google Sheets : comment automatiser vos calculs efficacement\" class=\"read-more\" href=\"https:\/\/tutoriel-googlesheets.fr\/it\/les-fonctions-google-sheets-comment-automatiser-vos-calculs-efficacement\/\" aria-label=\"Per saperne di pi\u00f9 su Les fonctions Google Sheets : comment automatiser vos calculs efficacement\">Leggi tutto<\/a><\/p>","protected":false},"author":11,"featured_media":8805,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[211,155,39],"class_list":["post-8663","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-formule-google-sheet","tag-automatisation","tag-fonctions","tag-google-sheets","resize-featured-image"],"_links":{"self":[{"href":"https:\/\/tutoriel-googlesheets.fr\/it\/wp-json\/wp\/v2\/posts\/8663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tutoriel-googlesheets.fr\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tutoriel-googlesheets.fr\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tutoriel-googlesheets.fr\/it\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/tutoriel-googlesheets.fr\/it\/wp-json\/wp\/v2\/comments?post=8663"}],"version-history":[{"count":0,"href":"https:\/\/tutoriel-googlesheets.fr\/it\/wp-json\/wp\/v2\/posts\/8663\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tutoriel-googlesheets.fr\/it\/wp-json\/wp\/v2\/media\/8805"}],"wp:attachment":[{"href":"https:\/\/tutoriel-googlesheets.fr\/it\/wp-json\/wp\/v2\/media?parent=8663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tutoriel-googlesheets.fr\/it\/wp-json\/wp\/v2\/categories?post=8663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tutoriel-googlesheets.fr\/it\/wp-json\/wp\/v2\/tags?post=8663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}