Dans le cadre de notre découverte de Google App Script (GAS), je vous propose de nous attarder sur deux éléments survolés lors du premier article Google App Script appliqué à Google Sheet – Premières fonctions : « Hello MyChromebook » : les variables et la méthode getRange().  Dans un second temps, nous allons découvrir la boucle For qui nous permettra d’automatiser un certain nombre de tâches très facilement.

Petit retour sur les variables :

Comme nous l’avons déjà vu, les variables nous servent à stocker de l’information. Et cette information peut être de différentes natures : des nombres (entiers, nombres à virgule), des chaines de caractère (string), des objets (application, feuille de calcul, élément d’interface …). Nous avons aussi vu qu’une variable doit préalablement être déclarée dans notre code. Pour ce faire, nous utilisons le mot clé « var ». Enfin, nous lui affectons l’information souhaitée grâce au signe « = ».

Bon, jusque là rien de bien neuf. Quelques précisions toutefois :

  • Il est possible de déclarer plusieurs variables en même temps. Par exemple, nous pouvons en une seule ligne déclarer les variables a, b et c en saisissant dans notre code var a,b,c;
  • Comme dans l’exemple ci-dessus, il n’est pas obligatoire de leur affecter une valeur immédiatement. On peut le faire plus tard dans le code :
  • Les variables ont une portée. Pour faire simple, la portée de la variable c’est la partie du code dans laquelle la variable conserve sa valeur. Lorsque vous créez une variable dans une fonction, cette variable n’existe que dans cette fonction. Ainsi, si vous appelez cette variable dans une autre fonction, vous obtiendrez un message d’erreur vous précisant que la variable n’a pas été déclarée. Toutefois, si vous créez une variable en dehors de vos fonctions, on dira d’elle qu’il s’agit d’une variable globale. Si nous reprenons l’exemple ci-dessus, que nous créons la variable « d » à laquelle nous affectons la valeur « 50 », nous pourrons l’utiliser dans toutes les fonctions de notre code. Attention toutefois à ne pas abuser des variables globales. En effet, elles surchargent la mémoire de votre ordinateur inutilement si vous ne l’utilisez que dans une de vos fonctions. De plus, cela peut devenir une source de confusion. À utiliser avec parcimonie donc.

Je profite de cet exemple pour aborder un outil très souvent utilisé dans Google App Script : Logger.log(). Cette fonction permet d’envoyer une information dans le journal (log) et d’en afficher la valeur. Ici nous envoyons la variable « total ».

Pour afficher le journal – après avoir sauvegardé puis exécuté notre script – il vous suffit de cliquer sur « Journaux » du menu « Affichage » :

Ainsi le log apparaît dans une fenêtre et nous affiche la valeur de notre variable « totale » :

On remarque immédiatement que notre total prend bien en compte la variable « d » définie en dehors de notre fonction.

Allez, un petit exercice pour appliquer quelques notions vues dans le premier article et celui. Je vous propose de créer une feuille de calcul « Sheet », et de placer la valeur « 1 » en « A1 ». L’objectif de notre script sera d’ajouter « 5 » à cette valeur.

Vous êtes prêts ? Alors à vos claviers. Vous avez 10 minutes ….

« Dring », c’est l’heure de rendre vos copie !

Alors, vous vous en êtes sorti ? En tout cas, voilà comment je vous propose de solutionner ce problème :

Vous aviez quelque chose de ce genre là ? Bravo !

Pour ceux qui ont galéré, voici quelques explications :

  • Comme nous l’avions vu dans l’article précédent, nous créons tout d’abord les variables « app » qui contient l’application Spreadsheet et la variable « feuille » qui contient la feuille de calcul active (ligne 2 et 3).
  • Dans un deuxième temps, nous créons la variable « somme » à laquelle nous affectons la valeur contenue dans la cellule « A1 » (ligne 4).  Vous aurez peut-être remarqué que je n’utilise pas la même notation pour getRange. Au lieu de getRange(« A1 »), j’ai utilisé getRange(1,1). Le premier chiffre correspond au numéro de la ligne, le second au numéro de la colonne. Cette façon d’utiliser la méthode getRange(), vous vous en rendrez compte à l’usure, s’avère plus souple et plus efficace.
  • Nous ajoutons 5  à notre variable grâce à somme = somme + 5 (ligne 5).
  • Enfin, nous replaçons le contenu de notre variable somme dans la cellule « A1 » (ligne 6).

getRange() :

Dans le petit exercice que nous venons de voir, vous avez vu que j’ai utilisé getRange() d’une autre manière par rapport à l’article précédent. En fait nous pouvons utiliser cette méthode de plusieurs façons :

  • En nommant la plage de cellule : getRange(« A1 ») ou getRange(« B3:H6 »)
  • En indiquant les coordonnées (numéro de ligne et numéro de colonne) de notre cellule ou de notre plage de cellule : getRange(1,1) ou getRange(3,2,3,6) pour reprendre le même exemple.

La seconde syntaxe de getRange s’avère beaucoup plus pratique dans nos codes. Elle permet de remplacer les chiffres placés dans la méthode getRange par des variables. Mais, nous allons découvrir ça un peu plus bas. A noter que getRange(3,2,3,6) permet de viser toute une plage de cellule, comme getRange(« B3:H6 »).

La boucle For :

Imaginons que nous avons une série de chiffres, sur notre feuille de calcul, et que nous souhaitons faire comme dans l’exercice ci-dessus (ajouter 5), mais pour tous les chiffres  en même temps.  Pour cela, nous pourrions faire comme nous l’avons fait précédemment et répéter l’opération nous-mêmes en changeant la cellule sur laquelle nous souhaitons travailler. Un peu laborieux, non ?

Heureusement nous pouvons demander à notre script de le faire à notre place, et ce grâce à la boucle For.

Une boucle, c’est un ensemble d’instruction que notre code va réaliser jusqu’à ce qu’une condition – que nous lui indiquons – se produise.

Nous allons, aujourd’hui, explorer la boucle For (d’autre boucles existent que nous verrons ultérieurement) dont voici la syntaxe :

for (var i=0; i<7; i++) { instructions}

Détaillons ensemble ce charabia :

  • L’instruction « for » indique au code qu’une boucle for commence ici, avec les paramètres entrés entre parenthèse.
  • Le premier paramètre est la variable qui sera incrémentée par la boucle for : ici, nous déclarons la variable « i », et nous lui attribuons la valeur 0.
  • Le second paramètre indique la condition qui doit être vérifiée comme « vrai » pour que la boucle continue à boucler. Inversement, si cette condition ne se vérifie plus, le code sort de la boucle. Dans notre exemple, nous vérifions que i<7. Tant que cette condition reste vrai, on boucle, dès que i=7, on sort de la boucle. Ici, on boucle donc 7 fois (pour i=0, i=1, i=2 …. i=6).
  • Le troisième paramètre (i++) est une incrémentation de « i ». Cela veut simplement dire que lorsque le programme boucle une fois, i est augmenté de 1. Nous aurions pu l’écrire aussi de cette façon : i = i+1.
  • les accolades ( {   } ) contiennent l’ensemble des instructions qui seront répétées par la boucle.

Appliquons immédiatement ce nouveau concept à notre exemple :

Détaillons ensemble ce code. Notez que je me suis servi des commentaires (le // en début de ligne) pour faire en sorte que le code ne tienne pas compte des lignes 4, 5 et 6, sans pour autant les supprimer, ce qui m’a permis de les copier / coller et de les réutiliser dans ma boucle :

  • Jusqu’à la ligne 7, rien de nouveau par rapport à ce que nous avions vu jusqu’ici. Je passe donc directement à la ligne 7.
  • Ligne 7 : je déclare la variable « somme » sans lui affecter de valeur.
  • Ligne 8 je déclare ma boucle « for » avec comme paramètres la variable « i » (que je déclare et à laquelle j’affecte la valeur « 0 »), la condition i<7 qui dit au programme de boucler tant que i est inférieur à 7, et i++ qui dit au programme d’ajouter 1 à chaque fois que la boucle …. boucle.
  • La ligne 9 où on affecte une valeur à la variable « somme ». Cette valeur est déterminée par la valeur de la cellule dont le numéro de ligne est i+1, et dont le numéro de colonne est 1. Au premier tour de la boucle, i=0, donc i+1 = 1. C’est donc la valeur de la cellule 1, 1 qui sera affectée à la variable « somme ». Au second tour, i a été incrémenté de 1, donc i = 1, et c’est la valeur de la cellule dont le numéro de ligne est i+1, c’est à dire 2, et dont le numéro de colonne est toujours 1. Cette opération est répétée jusqu’à ce que i=6 (cellule 7,1).
  • Ligne 10, on ajoute 5 à somme.
  • Ligne 11, on remplace avec setValue la nouvelle valeur de « somme » augmentée de 5 dans la cellule cible.

Pour m’assurer que j’ai été suffisamment clair, pouvez-vous me dire comment faire la même chose, mais au lieu de replacer la valeur de la cellule lue + 5 au même endroit, on mettrait le résultat dans la cellule à coté ? Autrement dit, comment mettre le résultat de « A1 + 5 » en « B2 ».

Vous avez trouvé ? Voici ma solution :

La boucle For est beaucoup utilisée, et rend de très nombreux services dans nos programmes Google App Script. Il est donc très important de bien la maîtriser.

C’est tout pour aujourd’hui. Je vous laisse digérer tout ça. N’hésitez pas à expérimenter ces différents concepts, car on ne le dira jamais assez, c’est en pratiquant que l’on comprend mieux ce qui se passe. N’hésitez pas non plus à me contacter si vous avez la moindre question. J’essaierai de vous répondre au mieux de mes connaissances.

Dernière petite question, si vous voulez bien m’accorder encore quelques secondes de votre temps. Je m’interroge sur la pertinence de résumer et ou de reprendre ces tutos en vidéo. Qu’en pensez-vous ? Serait-ce utile pour vous ? D’avance merci de vos retours, et à bientôt pour la suite !

Shares:

13 Comments

  • David
    David
    1 octobre 2020 at 20 h 38 min

    Bonjour,
    je travaille sur google sheet dans le tableur
    J’ai une ligne qui doit contenir le code suivant mais jusque B250, je ne vois pas comment faire une boucle
    =SI(B22=feuille2!B1;feuille2!A1;SI(B22=feuille2!B2;feuille2!A2;SI(B22=feuille2!B3;feuille2!A3;SI(B22=feuille2!B4;feuille2!A4;SI(B22=feuille2!B5;feuille2!A5;)))))
    J’ai donc fais un script avec une fonction et un for, voici ce que ca donnerais en progrmation mais bien sur ca ne marche pas sur tableur …
    var app = SpreadsheetApp;
    var feuille = app.getActiveSpreadsheet() ;
    for (var i=0;i<251;i++)
    {
    if (B22==B$i){A22=A$i;}
    }
    Merci pour votre aide

    Reply
  • mounci
    mounci
    27 janvier 2020 at 16 h 03 min

    Bonjour,
    Merci pour vos précieux tuto !
    Je souhaiterai selection une plage et dire à ma future macro de la copier dans une feuille cible.

    Est-ce que vous pourriez me donner un coup de main ?

    Merci

    function testrapport() {
    var app = SpreadsheetApp;
    var classeur = app.getActiveSpreadsheet() ;
    var feuille_source = classeur.getSheetByName(« ACTIVITE 2020 ») ;
    var tableau = feuille_source.getSelection() ;
    var feuille_cible = classeur.getSheetByName(« cible ») ;

    feuille_cible.getRange(1,30,1,1000).setValue(tableau) ;

    };

    Reply
  • Pierrick
    14 août 2018 at 17 h 07 min

    Bonjour,

    Connais-tu un script permettant de copier coller une plage d’un tableau indéfinis ? Par exemple de « A1:C »dernière ligne » » ?

    Reply
  • julien
    julien
    8 août 2018 at 16 h 59 min

    Salut, super tuto très clair et intéressant.
    Pas d’intérêt sur les tuto video, c’est une perte de temps autant pour toi que pour celui qui regarde. :D
    As-tu prévu d’en faire d’autres bientôt ?
    Ton dernier date de septembre 2017 :D
    Merci et encore bravo

    Reply
  • VIALON
    VIALON
    25 juin 2018 at 10 h 24 min

    C’est très clair. merci beaucoup

    Reply
  • L'Papy
    L'Papy
    6 mars 2018 at 8 h 30 min

    Bonjour,

    Tutoriel hyper intéressant, je l’applique.

    Aujourd’hui je me trouve confronté à un souci et pas de réponse sur internet.

    J’ai un script identique pour X classeurs contenant des feuilles.

    C’est le même….

    Quand je dois faire une maintenance, pour augmenter ses capacités, je dois le copier_coller X fois.

    Existe t il une méthode pour publier que sur mon drive une fonction que j’appelle dans mes X classeurs ?

    Merci de ton attention…

    Reply
    • Guillaume Bonnaire IT
      13 mars 2018 at 12 h 26 min

      Bonjour,

      Intéressez vous du côtés des bibliothèques. Dans Ressources > Bibliothèques

      Puis ajouter votre script d’une page externe

      Plus d’information : https://developers.google.com/apps-script/guides/libraries

      Reply
      • L'Papy
        L'Papy
        14 mars 2018 at 18 h 23 min

        Ok, je vais y regarder, Merci de votre piste…

        Reply
  • Arnaud
    5 décembre 2017 at 14 h 45 min

    Bonjour,

    Merci pour ce tutoriel très intéressant.

    Avez vous des conseils à donner si l’on veut aller plus loin et parfaitement maîtriser Google App Script appliqué à Google Sheet ?

     

    Reply
  • casetou
    casetou
    8 octobre 2017 at 6 h 43 min

    Je vois pas bien l’intérêt des vidéos , c’est parfait comme ça.

    En revanche, les insertions d’images posent problème pour les copie -coller. Je veux bien recopier le code mais c’est pas simple de passer d’un onglet à l’autre. du coup , j’imprime l’image de tes exemples pour pouvoir recopier facilement.

    Une autre solution?

     

    Merci encore pour ton travail.

    Reply
    • Nicolas
      8 octobre 2017 at 8 h 34 min

      Effectivement, la prochaine fois nous ajouterons le texte plutot qu’une image, cela sera plus facile à copier.  Ceci dit le but du tutoriel est que tu puisse le reproduire toi même .. mais c’est entendu.

      merci pour ton retour

      Reply
  • casetou
    casetou
    8 octobre 2017 at 6 h 15 min

    Bonjour ,

    Très intéressant tes articles merci .

    En revanche , peux tu me dire comment tu fais les guillemets de « B3:H6 » car je trouve pas sur le clavier du chromebook.

    Merci

    Gilles

     

    Reply
    • Nicolas
      8 octobre 2017 at 8 h 36 min

      Attention lors du copié coller nous sommes passer sur un format de guillemet américain, pour nous tu utilisera les guillemets français avec la touche 3 (  » ) de ton clavier

      Reply

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.