Google Sheets - Deplacement d'une ligne

Après appui sur un bouton

a marqué ce sujet comme résolu.

Bonjour à tous,

Etant un peu novice sur google sheets, je voudrais s’il existe un script permettant que lorsque l’on appuie sur un bouton cela sélectionne la ligne, la coupe et la colle dans une autre feuille du même document.

Si oui, est il possible de faire des boutons sur plusieurs feuilles avec une destination différente ?

Merci d’avance pour vos réponses

Cissou

Bonjour,

ma réponse se fera en deux parties du fait des changements opérés par google dans sa manière de gérer les évènements depuis la dernière fois où j’ai mis le nez dans spreadsheet.

copier une ligne dans une autre feuille

La logique est assez simple car il y a déjà des fonctions créées pour ça :

  • sélectionner la feuille source
  • sélectionner la ligne/l’intervalle source
  • sélectionner la feuille cible
  • sélectionner la linge/l’intervalle cible
  • demander de copier de la source vers la cible
1
2
3
4
5
6
7
8
9
function myFunction() {
  var maFeuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("first");
  var maLigne = maFeuille.getRange("A4:D4");

  var feuilleCible = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Second");
  maLigne.copyTo(feuilleCible.getRange("A4:D4"));

  SpreadsheetApp.getUi().alert("ok")
}

Pour la partie "à l’appui sur un bouton", je n’ai aps encore de réponse, mais je continue mes recherche.

PS: j’ai trouvé la solution, mais comme elle est un poil plus complexe à expliquer je vais d’abord aller manger.

+0 -0

Bonjour, bonjour. après avoir mangé, dormi et tergiversé, voici la solution :

En fait il existe deux méthodes : une avec une image qui sert de bouton (jamais utilisé donc je risque de t’induire en erreur) et l’autre "à l’ancienne" grâce aux…menues.

Dans tout google app tu peux modifier la barre d’outils pour lui ajouter des éléments personnalisés.

Dans ton éditeur de scripts, il va falloir que tu ajoutes une fonction. Habituellement on aime l’appeler "onOpen" car on voudra qu’elle soit appelée lorsque la feuille s’ouvre. Mais le nom est libre.

Dans cette fonction, tu vas dire à google, "Dans l’application Spreadsheet, ajoute-moi tel menu avec tel ou tel sous menu…".

1
2
3
4
5
6
7
function onOpen() {
  var ui = SpreadsheetApp.getUi();

  ui.createMenu('Scripts perso') // c'est ce que tu verras dans la barre d'outils
      .addItem('copier la ligne', 'myFunction') // le deuxième paramètre est le plus magique, je l'explique après
      .addToUi();
}
l’ajout du menu

Comme je l’ai dit dans le code, il y a un "truc" : le deuxième paramètre de la fonction "addItem". Ce deuxième paramètre c’est en fait le nom de la fonction que tu veux appeler quand quelqu’un clique sur l’élément du menu. Dans notre cas, j’ai repris le nom que j’avais mis plus haut : myFunction.

Après ça il n’y a plus qu’un tout dernier truc à faire : toujours dans l’éditeur de script, va dans "ressouces" puis "tous mes déclancheurs". Dans la pop up qui s’ouvre appuie sur le lien "ajouter un déclancheur". Et là tu lui demandera de déclancher la fonction onOpen à l’ouverture du document.

Il n’y a plus qu’à recharger la page.

Bonjour Artragis,

Merci encore.

Juste une petite remarque après avoir testé. Est il possible qu’au lieu de choisir la plage de copy dans myfunction, ce soit en fait toute la ligne qui est actuellement sélectionné. De plus quelle est la variable pour non pas faire une copie mais un couper/coller. Et enfin comment faire pour que le coller se fasse sur la dernière ligne non utilisée de la feuille cible.

Merci d’avance

Cissou

Bien sûr. Il suffit qu’au lieu de faire getRange("…") tu fasses getActiveRange().

Pour faire un "couper", je pense qu’il faut ensuite demander la suppression du Range de départ. Je ne connais pas par coeur la doc, je te laisse la journée pour chercher et je reviendrai vers toi après ma journée de travail. :)

Bonjour,

je rebondis sur ce topic car mon problème est presque le même. Je souhaiterais, lorsque qu’une modification sur une ligne d’une feuille, cette même ligne soit copier dans une autre feuille, au même endroit (même ligne). Je suis parti du code proposé ici en le modifiant par on Edit.

Le résultat est… comment dire… étrange ! :)

function onEdit() { var maFeuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NEW STUDIO ANNEE 20"); var maLigne = maFeuille.getActiveRange();

var feuilleCible = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("COPIE"); if(maLigne) {maLigne.copyTo(feuilleCible.getRange("A1")) }

SpreadsheetApp.getUi().alert("ok") }

J’ai essayer plusieurs combinaisons, sans succès (je suis novice, ça doit se voir !)

Merci de votre aide!

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