Les macros google spreadsheet

Google vous propose parmi tous les services de son drive un logiciel de tableur nommé « Google Spreadsheet ».

Comme beaucoup de tableurs, ce dernier permet d’automatiser les tâches via des macros. C’est ce que nous allons voir dans ce tutoriel.

J’ai tenté de rendre ce tutoriel le plus accessible possible aux utilisateurs de base de Spreadsheet : les personnes qui font de la bureautique ou des formulaires de sondage. Néanmoins, pour votre confort, avoir déjà vu un petit code et en avoir compris le fonctionnement en gros est conseillé.
L’objectif de ce tutoriel est qu’à la fin vous puissiez rapidement faire un petit script qui vous permette de vous faire gagner du temps lorsque vous utilisez ce tableur.
Pour obtenir de l’aide, le forum « Programmation » vous est ouvert, utilisez le tag « Google Spreadsheets » pour donner plus de visibilité à votre message.

Une macro, pour quoi faire ?

Lorsque vous utilisez un logiciel de tableur, qu’il s’agisse des classiques Excel ou Classeur1, ou bien d’une application web telle que Google SpreadSheet ou encore Ethercalc, vous arriverez un jour face à cette problématique :

Je suis en train de faire quelque chose de très répétitif mais il n’existe aucune formule pour le faire à ma place.

Cette situation n’est pas très agréable, et le sera encore moins lorsque votre feuille de calcul sera très longue (ou très large), qu’il faudra beaucoup scroller et que le moindre copier/coller sera sujet à des blocages de l’interface graphique.

Les développeurs sont souvent confrontés à ce problème et, dès lors, ils ont une solution : ils arrêtent de faire le travail eux-même pendant quelque temps et en profitent pour coder un programme –on parle aussi de script – qui fera la tâche à leur place.

Efficacité du programmeur en fonction du temps
efficacité du programmeur en fonction du temps2

Cette idée a été reprise dans les grands logiciels de tableur via le concept de macro. Il s’agit d’un script, créé dans un langage souvent simplifié possédant plein d’outils et qui permet d’automatiser les tâches répétitives tout en les intégrant à l’interface graphique (ajout de bouton, de menu).

Google Spreadsheet ne coupe pas à cette logique. La seule différence c’est que les feuilles de calculs sont exécutées et gérées par votre navigateur. Du coup, pour créer ses macros, Google a choisi le langage JavaScript3.


  1. Pour rappel, Excel est le tableur-grapheur édité par Microsoft dans sa suite Office (et office 365). Classeur est le nom francophone du tableur-grapheur de Libre Office, le fork le plus actif de Open Office. Je ne résiste pas à l’envie de vous donner ce lien de téléchargement

  2. Notons que ce graphique marche aussi bien en étant lu « nombre d’opérations réalisées en fonction du temps » que « litres de café ingurgités en fonction du temps ». 

  3. C’est un des langages du web qui a permis de dynamiser les sites. Si vous voulez voir l’étendue de ses possibilités en dehors de Google SpreadSheet, vous pouvez jeter un coup d’œil ici 

Manipuler la table de données

Les débuts de notre macro

Pour créer votre script, allez dans « Outils » puis « Éditeur de script ».

Vous arrivez sur une nouvelle page (attention, si vous fermez ou actualisez avec F5 votre feuille de calcul, il arrive que cette page se ferme automatiquement).

Un bout de code est écrit sur cette page :

1
2
3
function myFunction() {

}
La fonction de base

Si vous avez déjà programmé dans votre vie, ce bout de code ne devrait pas vous effrayer. Sinon, imaginez simplement qu’il s’agit ici d’un modèle à respecter : le mot function est là pour dire que vous aller définir un ensemble d’actions à exécuter. Le mot myFunction est simplement le nom de votre macro. D’ailleurs, si vous regardez la barre d’outils de votre éditeur de script, l’interface vous propose de sélectionner cette fonction. Si vous changez le nom et que vous sauvegardez (CTRL + S) le nom changera.

Sélectionnez votre macro.

Dans vos fonctions, vous avez droit à plusieurs objets globaux dont Browser et SpreadsheetApp. Le premier permet d’interagir avec l’utilisateur (avec une inputBox par exemple), le second de contrôler ce que vous faites dans votre feuille de calcul.

Notons juste que du point de vue de Google, tout est organisé selon trois niveaux de hiérarchie :

  • La SpreadsheetApp qui contient l’ensemble des objets que vous manipulez. En fait, vous pouvez contrôler toutes les SpreadsheetApp des documents tableur qui sont dans votre drive.
  • La Spreadsheet : c’est le document de tableur dans sa globalité. Il possède par défaut une feuille de calcul (Sheet). Chaque document peut en contenir plusieurs qui sont accessibles via les onglets en bas de page. Accéder aux différentes feuilles de calcul.
  • Le Range : c’est une plage de cellules (une cellule est vue par Google comme un Range de 1 sur 1).

Exécuter une macro demande certaines autorisations. Cette politique de sécurité implique qu’il est impossible de mettre des scripts sur des feuilles publiques. Préférez un partage privé pour cela.

Ecrire et lancer une macro

Jouons avec nos spreadsheets

La première chose à faire, est donc se savoir quelle est la SpreadsheetSheet que nous allons manipuler.
Pour cela, il faut piocher dans les fonctions de SpreadsheetApp et aller trouver getActiveSpreadsheet.

Notre premier défi consistera à afficher son nom. C’est dans Browser que nous trouverons la solution.

En effet, comme nous l’avons précisé auparavant, ce dernier permet d’interagir avec l’utilisateur. Commençons par simplement afficher une boîte à message contenant le titre du document courant.

1
2
3
4
function myFunction() {
  var document = SpreadsheetApp.getActive();
  Browser.msgBox(document.getName());
}
Afficher le nom dans une msgbox.

Il ne reste plus qu’à lancer notre macro. Pour cela : appuyez sur le petit triangle « play » dans l’éditeur de script. Vous devriez obtenir un message lorsque vous affichez votre feuille de calcul.

Affichons notre message.

On peut observer que c’est le titre du document (Spreadsheet) qui est affiché et non le titre de la feuille (Sheet qui s’appelle Feuille 1 par défaut). Pour obtenir le nom de la feuille courante, il faut faire getSheetName à la place de getName.

Maintenant, créons une seconde feuille dans notre document. Pour pouvoir naviguer entre les feuilles, il vous suffira de connaître leur nom.

1
2
3
4
5
6
7
8
9
function myFunction() {
  var document = SpreadsheetApp.getActive();
  var sheet = document.getSheetByName("Feuille 1");
  document.setActiveSheet(sheet);
  Browser.msgBox(document.getSheetName());
  sheet = document.getSheetByName("Feuille 2");
  document.setActiveSheet(sheet);
  Browser.msgBox(document.getSheetName());
}
Le code change de page et affiche leur nom.

Obtenir les données d’une sélection

Pour que votre macro travaille sur des données, vous pouvez

  • renseigner en dur la plage d’action ;
  • sélectionner la plage à la main avant d’activer la macro.

Dans le premier cas, la fonction à aller chercher est SpreadsheetApp.getRange("plage de cellule"). Vous utilisez les plages comme d’habitude (par exemple A1:B2 est une plage carrée de quatre cases en partant d’en haut à gauche). Vous pouvez aussi définir la plage avec des entiers (sachant que les indices commencent à 1, vous auriez donc SpreadsheetApp.getRange(1, 1, 2, 2)). Une fois que vous avez obtenu votre plage, il faut aller chercher les valeurs grâce à la fonction getValues() qui renverra un tableau Javascript (indicé à partir de 0 !) à deux dimensions, le premier indice correspondant à la ligne, le second à la colonne.

Les tableau de javascript sont indicés à partir de 0.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function maMacro(){
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var range = spreadsheet.getRange("A1:B10");
    var values = range.getValues();
    var s = 0;
    for(var i=0; i<values.length; i++){
         s += values[i][1];
    }
    Browser.msgBox("le premier titre est " + values[0][0] + "la somme est de " + s);
}
Fait la somme de la seconde colonne d’une plage.

Dans le second cas, la procédure est la même, mais avec SpreadsheetApp.getActiveRange().

Exécutez la macro. Retournez sur votre feuille, et s’il y avait de bonnes données, vous devriez avoir un beau message qui apparaît.

Plus loin : plusieurs tableurs, partage…

Un cas qui pourra vous permettre d’utiliser au maximum les possibilités des scripts est le suivant :

  1. Vous avez une feuille avec beaucoup de données détaillées.
  2. Tous les mois, vous aimeriez qu’une synthèse vous soit envoyée sans les détails trop précis.

La macro devra, comme précédemment, aller chercher toutes les données qui l’intéressent. Puis, il vous faudra créer la nouvelle feuille grâce à la méthode create.

Tout de suite après cela, vous voudrez sûrement partager la feuille, les fonctions addEditors et addViewers sont là pour ça.

1
2
3
var sheet = SpreadsheetApp.create("Nouvelle synthèse"); //on crée
sheet.addEditors(["monAmi@gmail.com", "mongooglegroup@googlegroups.com"]); //on partage
sheet.appendLine(["titre1", "titre2"]); //on met des titres
Partager un nouveau tableur

Enfin, vous allez placer les données. Et là mon conseil, c’est d’y aller ligne par ligne. D’une part parce que l’API est plus utilisable dans ce sens (appendRow permet d’ajouter des données, alors que insertColumn ne fait que mettre des cellules vides) mais aussi parce que ça vous permettra de mieux séquencer votre script.

Lancer une macro automatiquement

Nous avons vu comment lancer notre macro/script directement via l’éditeur. Mais avouons que cela n’est pas pratique si nous devons toujours ouvrir un deuxième onglet pour pouvoir exécuter le code qu’on a produit.

Les déclencheurs

Pour cela Google vous fournit un nouvel outil : les déclencheurs (trigger en anglais). Ces outils réagissent à un événement et déclenchent votre macro.

Les événements disponibles sont assez basiques :

  • régulièrement dans le temps (toutes les heures, tous les jours…),
  • lorsque la page s’ouvre,
  • lorsque la feuille est modifiée,
  • lorsqu’un utilisateur valide le Google Form qui est associé à la feuille (uniquement lorsque vous utilisez Google Form)

Pour ajouter un déclencheur, il vous suffit d’aller dans le menu « Édition » puis « Tous les déclencheurs ». Dans la fenêtre qui apparaît, cliquez sur le lien « Ajouter un nouveau déclencheur » et configurez-le comme vous le désirez.

Ajouter un nouveau déclencheur

Mettre une macro dans un menu

Comme nous avons pu le remarquer, les déclencheurs ne permettent pas nativement de dire « lorsque j’appuie sur un bouton, lance ma macro ». Une technique existe néanmoins qui vous permettra d’arriver à ce résultat.

Elle consiste à ajouter un menu à la barre d’outils et une fois le menu ajouté le lien entre la macro et le clique sur le menu est automatique.

Pour ajouter le menu, nous allons faire une macro qui appelle certaines fonctions de SpreadsheetApp, puis nous allons simplement lier cette macro au déclencheur « À partir de la feuille de calcul » => « À l’ouverture ».

C’est pour ça que par convention on aime bien appeler la macro qui génère le menu onOpen.

Dans la fonction onOpen(), nous allons demander à l’interface graphique de notre SpreadsheetApp de créer un menu et d’y insérer notre macro.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
function laMacroQuiVeutUnBouton(){

}
function onOpen() {
  var ui = SpreadsheetApp.getUi();

  ui.createMenu('Macros') // ce qui est vu dans la barre d'outils
      .addItem('Appliquer ma macro', 'laMacroQuiVeutUnBouton') // le deuxième paramètre fait le lien entre le clique sur le menu et la macro.
      .addToUi();
}

`

Et voilà, maintenant vous êtes capable de créer votre script. S’il vous manque des fonctions, je vous donne une dernière astuce : à partir de l’objet le plus logique pour la fonction recherchée (par exemple, pour gérer les titres, SpreadsheetApp est indiqué alors que pour gérer les valeurs, c’est sur un Range qu’il faut travailler) mettez un « . » puis appuyez sur CTRL + ESPACE et la liste des fonctions disponibles apparaîtra.

Icône distribuée par wikimedia sous licence CC-BY-SA

Ces contenus pourraient vous intéresser

19 commentaires

Bonjour, bonsoir communauté, j’ai un problème et je ne trouve pas encore la solution. N’étant pas assez familier avec la programmation, je vous lance mon idée. j’ai une feuille de calcul avec des informations provenant d’un formulaire (je voulais utiliser Googleform afin de récupérer les infos et pouvoir retourner ce que le participant avait donné comme réponses). Dans mon formulaire, il y a un endroit pour le courriel d’un participant. Je voudrais trouver le moyen de retourner les informations soumises par l’individu. Exemple de question du formulaire: combien de tour en 5 minutes. Le participant inscrit 20. Dans la feuille de calcul, il y a 20. Ce 20 correspond au chiffre 100, si c’est 15, ça correspond à 80, ect… Je voudrais que le participant reçoive la réponse qu’il avait donné soit 20 et qu’il reçoive l’autre information de la cellule calculée selon une formule qui donne dans ce cas-ci 100. Il y a d’autres questions dans le formulaire et chacune avec un nombre selon la réponse donnée. J’ai essayé avec importrange dans le la feuille de calcul, dans un autre onglet, mais ça ne fonctionne pas pour envoyer les informations ajoutées.

J’espère avoir été clair, Au plaisir

Bonjour, Merci beaucoup pour ce tuto très intéressant. :) Avez vous des liens vers d’autres tutoriels de ce type ou vers des sites qui permettent d’en apprendre plus ? En effet, lorsque l’on a pour habitude de travailler avec vba, il est difficile, de passer à javascrpipt… Y a t il un moyen de convertir vba vers javascript? Merci. ;)

Bonjour, Merci beaucoup pour ce tuto très intérresant, j’ai toutefois une petite question et surtout besoin d’un peu d’aide, savez vous si il est possible avec l’éditeur de script d’atacher des libélés sur un nuage de point dans google sheet? j’ai déjà fait une marco sous Excel qui fonctionne très bien mais je n’y arrive pas dans Google sheet. par avance merci beaucoup de votre aide.

Bonjour, je cherchais un moyen d’automatiser le processus de transformation de chiffres en toutes lettres dans google spreadsheet et je suis tombée sur un javascript… Malheureusement pour moi je ne m’y connais pas en javascript. Je voudrais savoir si le code dessous est utilisable en tant que macro de google et comment l’utiliser sans passer par la publication sur Google Apps Market… Merci par avance de votre aide.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

<title>Nouvelle page 1</title>

<script type="text/javascript">

var res, plus, diz, s, un, mil, mil2, ent, deci, centi, pl, pl2, conj;

var t=["","Un","Deux","Trois","Quatre","Cinq","Six","Sept","Huit","Neuf"];
var t2=["Dix","Onze","Douze","Treize","Quatorze","Quinze","Seize","Dix-sept","Dix-huit","Dix-neuf"];
var t3=["","","Vingt","Trente","Quarante","Cinquante","Soixante","Soixante","Quatre-vingt","Quatre-vingt"];



window.onload=calcule

function calcule(){
    document.getElementById("t").onkeyup=function(){
        document.getElementById("lettres").firstChild.data=trans(this.value)
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// traitement des deux parties du nombre;
function decint(n){

    switch(n.length){
        case 1 : return dix(n);
        case 2 : return dix(n);
        case 3 : return cent(n.charAt(0)) + " " + decint(n.substring(1));
        default: mil=n.substring(0,n.length-3);
            if(mil.length<4){
                un= (mil==1) ? "" : decint(mil);
                return un + mille(mil)+ " " + decint(n.substring(mil.length));
            }
            else{   
                mil2=mil.substring(0,mil.length-3);
                return decint(mil2) + million(mil2) + " " + decint(n.substring(mil2.length));
            }
    }
}



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// traitement des nombres entre 0 et 99, pour chaque tranche de 3 chiffres;
function dix(n){
    if(n<10){
        return t[parseInt(n)]
    }
    else if(n>9 && n<20){
        return t2[n.charAt(1)]
    }
    else {
        plus= n.charAt(1)==0 && n.charAt(0)!=7 && n.charAt(0)!=9 ? "" : (n.charAt(1)==1 && n.charAt(0)<8) ? " et " : "-";
        diz= n.charAt(0)==7 || n.charAt(0)==9 ? t2[n.charAt(1)] : t[n.charAt(1)];
        s= n==80 ? "s" : "";

        return t3[n.charAt(0)] + s + plus + diz;
    }
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// traitement des mots "cent", "mille" et "million"
function cent(n){
return n>1 ? t[n]+ " Cent" : (n==1) ? " Cent" : "";
}

function mille(n){
return n>=1 ? " Mille" : "";
}

function million(n){
return n>=1 ? " Millions" : " Million";
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// conversion du nombre
function trans(n){

    // vérification de la valeur saisie
    if(!/^\d+[.,]?\d*$/.test(n)){
        return "L'expression entrée n'est pas un nombre."
    }

    // séparation entier + décimales
    n=n.replace(/(^0+)|(\.0+$)/g,"");
    n=n.replace(/([.,]\d{2})\d+/,"$1");
    n1=n.replace(/[,.]\d*/,"");
    n2= n1!=n ? n.replace(/\d*[,.]/,"") : false;

    // variables de mise en forme
    ent= !n1 ? "" : decint(n1);
    deci= !n2 ? "" : decint(n2);
    if(!n1 && !n2){
        return  "Entrez une valeur non nulle!"
    }
    conj= !n2 || !n1 ? "" : "  et ";
    euro= !n1 ? "" : !/[23456789]00$/.test(n1) ? " Euro" : "s Euro";
    centi= !n2 ? "" : " centime";
    pl=  n1>1 ? "s" : "";
    pl2= n2>1 ? "s" : "";

    // expression complète en toutes lettres
    return (" " + ent + euro + pl + conj + deci + centi + pl2).replace(/\s+/g," ").replace("cent s E","cents E") ;

}

</script>


</head>

<body>
<input type='texte' id='t' />
<div id='lettres' style='font-family:verdana; font-size:11px;'>&nbsp</div>
</body>
</html>

Bonjour, Je début dans google sheets. A l’ouverture la feuille ce position par défaut en haut à gauche du tableau, ce qui a pour conséquence de décourager les utilisateurs.

Je souhaite qu’a l’ouverture de la feuille le tableau se recentre sur la cellule de la colonne B qui contient la date du jour

Je ne sais pas écrire le code.

Pouvez vous m’aider.

Bonjour tout le monde, je suis nouvelle ici et novice aussi… Je ne saiq pas si quelqu’un peu 'aider mais bon je tente !!! J’ai un fichier sheets dans lequel on retrouve plusieur feuilles ( environs 30 ) dans lesquelles on retrouve une liste de produits avec des code articles dans la colonne A, l’intitulé du produit colonne B, la date de péremption colonne C. Je voudrais créer un script qui me permettrais d’envoyé sur une feuille nommée "synthese" toutes les dates ( avec le code articles et libellés )de toutes les feuilles, qui vont de la date ou j’ouvrirai le fichier exemple (15 novembre 2018 ) jusqu’à 30 jours après ( 15 décembre ) Est ce possible ???

Bonjour,

Je viens vers vous car j’ai réaliser une macro toute simple qui me renvoie vers la feuille 2, j’ai une cellule sur la feuille 1 qui doit être remplie avant d’exécuter le script. Mais comment faire pour lui dire que "si la cellule A8 est vide arrêter le script"

Merci de votre aide.

Bonjour J’ai créer une macro pour faire un classement de mes donnés de la feuille 1 ( mon classeur contient 8 feuilles ). Cependant impossible de faire fonctionner cette macro que sur la feuille un, des que je modifie une donnée des autres feuilles il m’exécute la macro sur la feuille active.

Comment je peux faire ?

Merci d’avance

Bonjour, Je souhaiterai convertir une macro excel en macro sur googlesheet. Je ne sais pas comment procéder. Je vous mets la macro de base :

Sub DeplacerPaye()

Dim Lig As Long Dim Col As Byte Dim NbrLig As Long Dim NumLig As Long Col = 1 NumLig = Sheets("5 - Bilan Financier").Range("A18").End(xlDown).Row + 1 ' Numéro de la 1ère ligne disponible où on copie

NbrLig = Sheets("4 - Mon prévisionnel").Cells(18, Col).End(xlDown).Row ' Récupère le numéro de la dernière ligne contenant une valeur For Lig = 18 To NbrLig If Sheets("4 - Mon prévisionnel").Cells(Lig, Col).Value = "Payé" Then Worksheets("4 - Mon prévisionnel").Range("A" & Lig & ":K" & Lig).Cut Worksheets("5 - Bilan financier").Range("A" & NumLig) NumLig = NumLig + 1 End If Next

End Sub

Merci d’avance pour votre aide.

Bonjour , Je ne réussi pas à trouver le moyen d’empêcher un "dessin" placé dans une cellule appartenant à une ligne figée , de bouger à la réouverture du fichier … Pour + de clarté :

  • Mise en place dessin inséré dans sheet : Ok
  • Ajustement dessin dans cellule : Ok
  • Fermeture fichier Sheets : Ok
  • Réouverture Fichier Sheets : NOk => Le dessin s’est déplacé dans la cellule inférieure ! A noter aussi que deux autres cellules , situées sur la même ligne figée , contiennent elles des dessins qui , eux ne bougent pas ! Je n’est pas réussi à trouver ce qui différencie les deux situations … Un avis ?

Merci par avance. Max.

Bonjour, j’ai fait un fichier Google Sheets qui possède des macros, puis j’ai généré un lien pour que des collègues puissent y accéder. Si on accède au fichier par le lien, les macros sont alors inopérantes, un message invite à se connecter sur le compte Google Drive. Est-il possible que mes collègues puissent disposer des macros par le lien ? Merci Didier

Bonjour,

j’ai créé un formulaire Google , les réponses s’enregistre sur une feuille n°3 «  réponse formulaire 3» (lien plus bas)

je voudrais copier via une macro ces réponses dans la feuille n°1 qui contient déjà des enregistrements.

j’ai fait quelque essaie avec des bout de code glané sur internet mais je bloc sur 2 problemes :

  • Ma macro est «  stratique » elle copie toujours la meme ligne ( exemple la ligne 3 , celle que j’ai selectionner quand j’ai créé la macro) en non la derrière ligne en date chargé via le formulaire.
  • Ma macro recopie ma ligne 3 dans la feuille qui est ouverte au moment ou je la lance et non toujours dans la feuille n°1 comme je le souhaite

bref ca marche pas, et vu que je n’ai pas de connaissance en script je ne sais pas le corriger. Si vous avez des idée je suis preneur merci

/saut à la derniere cellule "vide" de la colone A ** pour la derniere pleine remplacer le +2 par +1 — https://webapps.stackexchange.com/questions/101197/script-to-have-google-sheets-jump-to-the-next-available-row-in-column-a-automati / ` function jump() { var sheet = SpreadsheetApp.getActiveSheet(); var values = sheet.getRange("b:b").getValues(); var maxIndex = values.reduce(function(maxIndex, row, index) { return row[0] === "" ? maxIndex : index; }, 0); / sheet.setActiveRange(sheet.getRange(maxIndex + 1, 1, 1, 10).activate()); +/

// copie var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.setActiveSheet(spreadsheet.getSheetByName(’Feuille 1’), true); spreadsheet.setActiveRange(sheet.getRange(maxIndex + 2, 1).activate()); spreadsheet.getRange(’\'Réponses au formulaire 3\’!b3:c3’).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false); // }; `

+0 -0

Bonjour à tous et à toutes,

J’ai une macro qui fonctionne par bouton. Afin de rendre accessible aux smartphones mon ficher, j’aimerai lancer cette macro par une case à cocher.

J’ai repéré la fonction onEdit ou onOpen mais je n’arrive pas à l’appliquer.

Tout simplement : Quand E3 = True alors déclenchement de la macro "Copiercoller".

Pouvez vous m’aider svp ?

Je vous remercie :)

+0 -0

Bonsoir, J' utilise à ce jour un vieux tableur (Lotus 123 pour ne pas le nommer) et je suis en train de migrer vers google sheets. Je ne sais pas comment convertir la fonction suivante:

  • je positionne mon curseur sur une cellule qui contient une valeur numérique. Si la valeur est positive, je souhaite la rendre négative et en même temps changer la couleur de fond de la cellule. => pour ce faire j’utilise simultanément 2 touches de mon clavier CTRL et D ce qui a pour effet de déclencher une macro qui réalise les 2 fonctions. Si j' appuie à nouveau sur les 2 touches, ma cellule reprend ses valeur et couleur initiales. Je ne sais pas faire sous sheets et ne connais pas app script. Quelqu’un ou quelqu’une aurait il LA solution? Merci d' avance Bon week-end Lebaud
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte