CALC: Déclencheur Le sujet est résolu

Avatar de l’utilisateur
jacky

Membre tout neuf
Messages : 4
Inscription : 29 déc. 2022 15:49

CALC: Déclencheur

Message par jacky »

Bonjour,
Je suis en train de migrer d'un vieux tableur lotus 123 vers Calc de google sheets et je ne sais pas réaliser ceci :
- positionner mon curseur sur une cellule contenant une valeur numérique, appuyer simultanément sur CTRL + la touche D ( ce peut être n'importe quelle autre touche), ce qui a pour effet de déclencher une macro dont les fonctions vont inverser le signe de la valeur et  changer la couleur de fond de la cellule.
Je ne sais pas où et comment déclarer ce que j' appelle le déclencheur (CTRL + Touche) .
Merci de bien vouloir voler à mon secours .
Cordialement
Jacky

 
Avatar de l’utilisateur
NC_Quentin

Coach Numericoach
Invétéré
Messages : 38
Inscription : 10 oct. 2022 09:06
A remercié : 1 fois
Remercié : 12 fois

Re: CALC: Déclencheur

Message par NC_Quentin »

Bonjour !

Pour tout ce qui est macros, je recommande déjà l’aide officielle, qui est plus que complète et donne l’idée générale. 

Dans ce cas précis, il va falloir aller au-delà d’un simple enregistrement de macros, effectivement, et écrire du code en Apps Script. J’ai fait une version extrêmement simplifiée pour montrer le principe.

Le plus simple est de commencer par enregistrer une macro, même vide, en allant dans Extensions > Macros > Enregistrer une macro. Après quoi, on enregistre directement la macro (sans faire de nouvelle action) puis on lui donne un nom (ici, je suis resté simple et je l’ai appelée Macro). C’est à ce moment qu’on peut décider du raccourci clavier de la macro, dans une certaine mesure. Par défaut, toutes les macros avec un raccourci dans Sheets sont sous la forme Ctrl+Alt+Shift+[Numéro], ce qui est peu pratique pour les doigts, mais hélas on ne peut pas vraiment changer autre chose que le numéro.

Ne reste plus qu’à enregistrer et notre macro vide est faite. Maintenant, ne reste plus qu’à rajouter le code ! Plusieurs solutions :
  • Juste après avoir créée la Macro, en bas à gauche, il y a un petit pop-up qui apparaît, avec MODIFIER LE SCRIPT. Il suffit de cliquer dessus.
  • Ou bien dans Extensions > Macros > Gérer les macros, puis à côté de notre Macro, cliquer sur les trois petits points et cliquer sur Modifier le script.
  • Ou bien directement dans Extensions > Apps Script.
Dans tous les cas, cela amène directement sur l’onglet Apps Script qui est lié à notre feuille Sheets :
Image

Ne reste plus qu’à modifier le code pour faire ce qu’on veut !

Je ne vais pas trop m’étendre sur le sujet (qui est long et mérite amplement qu’on s’y intéresse, mais c’est l’affaire de plus que quelques lignes), mais basiquement, Apps Script est le langage de Google pour écrire du code pour tous les outils Google. C’est du Javascript avec beaucoup de fonctionnalités spécifiques ajoutées pour communiquer avec les outils Google. Dans notre cas, on souhaite que la fonction Macro, qui est notre macro, change le signe d’une case puis le fond dans une nouvelle couleur. Pour ça, on peut écrire le code suivant (qui vérifie en prime si la case contient bien un nombre avant de la modifier) :
/** @OnlyCurrentDoc */
function Macro() {
  var spreadsheet = SpreadsheetApp.getActive();
  // On récupère la première cellule (en haut à gauche) de la sélection active
  let cell = spreadsheet.getActiveRange().getCell(1, 1);
  // On récupère la valeur de la cellule
  let cellValue = cell.getValue();
  // On vérifie que la valeur de la cellule est bien un nombre
  if(typeof cellValue == "number"){
    // On change le signe si c’est bien un nombre
    cell.setValue(-cellValue);
  }
  // On met le fond en rouge
  cell.setBackground("red");
};
Image

Ne reste plus qu’à exécuter la macro sur une case. Mais avant, il faut autoriser les macros (oui, c’est un peu paradoxal) !

Essayons d’exécuter la macro depuis le menu, en allant dans Extensions > Macros > Macro.

Une fenêtre va s’ouvrir demandant à autoriser l’exécution du code venant de notre fichier de macros. Il suffit de faire Continuer et de suivre les différentes étapes en acceptant tout pour enfin pouvoir utiliser notre macro. Ce qui donne bien ce qu’on voulait :

ImageImage

Pour avoir un autre fond de couleur, il suffit de changer dans le code le "red" par une valeur de couleur valable en CSS, ce qui veut dire typiquement de l’hexadécimal, par exemple #FF0000 (qui est le code pour du rouge pur).

J’espère que c’était assez clair !
 
Avatar de l’utilisateur
jacky

Membre tout neuf
Messages : 4
Inscription : 29 déc. 2022 15:49

Re: CALC: Déclencheur

Message par jacky »

Bonsoir,
En tant que communicant tout neuf, j' essaie de répondre à NC_Quentin . J'espère qu'il recevra ce message de remerciement. Sa ou ta réponse me satisfait pleinement et répond tout à fait à mon problème même si effectivement 
je vais avoir besoin de tous mes doigts.
J' essaie ta solution très vite.
Je te remercie encore et te souhaite une bonne et heureuse année
Cordialement
Jacky
Avatar de l’utilisateur
jacky

Membre tout neuf
Messages : 4
Inscription : 29 déc. 2022 15:49

Re: CALC: Déclencheur

Message par jacky »

Bonsoir NC Quentin
J'espère employer la bonne méthode pour pouvoir approfondir notre dernière conversation et notamment sur le topic suivant:
 "// On récupère la première cellule (en haut à gauche) de la sélection active
  let cell = spreadsheet.getActiveRange().getCell(1, 1);"
Je suis à ce niveau calé sur la 1ère cellule de ma feuille.
Dans mon cas la cellule à traiter peut-être n' importe où , pour simplifier,  il faudrait, dans ce cas, que je puisse récupérer l' endroit où j' ai positionné mon curseur  
et le passer en paramètre, si possible, à getCell(). Peut-on faire cela au moment du "Ctrl+Alt+Shift+[Numéro]" ?
Si faisable, je pourrais migrer même si effectivement le "Ctrl+Alt+Shift+[Numéro] "n'est pas des plus pratiques.
Merci pour la réponse à venir
Cordialement
Jacky
 
Avatar de l’utilisateur
NC_Quentin

Coach Numericoach
Invétéré
Messages : 38
Inscription : 10 oct. 2022 09:06
A remercié : 1 fois
Remercié : 12 fois

Re: CALC: Déclencheur

Message par NC_Quentin »

Bonjour !

Ce n’était pas très explicite de ma part, mea culpa. 

Reprenons la ligne :

let calc = spreadsheet.getActiveRange().getCell(1,1);

Par morceau, cela fait :

spreadsheet : la feuille actuelle, c’est la variable définie plus tôt
.getActiveRange() : Récupère et renvoie la portée en cours, c’est-à-dire l’ensemble des cellules actuellement sélectionnées.
.getCell(1,1) : Prend la première cellule (en haut, à gauche) de la portée sélectionnée

calc équivaut donc à la première cellule de la sélection actuelle, la première cellule étant définie comme celle se situant en haut à gauche de notre sélection actuelle.

J’espère que c’était plus clair cette fois-ci :)
Avatar de l’utilisateur
jacky

Membre tout neuf
Messages : 4
Inscription : 29 déc. 2022 15:49

Re: CALC: Déclencheur

Message par jacky »

Bonsoir NC_Quentin,
Désolé pour ce temps long. En fait je surveillais la réponse dans mon email. Ce soir je fus un peu plus inspiré et je suis allé voir sur le site si par hasard la réponse n' y était pas.
Heureuse surprise, elle m' attendait depuis quelques jours déjà.
Merci infiniment, l' explication était parfaite . j' ai simplement cru que la  cellule obtenue par GetCell(1,1) était systématiquement la 1ère en haut à gauche de la feuille.
Je vais tester tout cela bientôt.
Merci encore pour vos explications et votre patience.
Bonne soirée
Cordialement
​​​​​​​Jacky.
​​​​​​​
Répondre

Rejoignez la discussion 💬

Vous devez être enregistré pour participer à la discussion et échanger avec les différents membres

Inscrivez-vous dès aujourd'hui

Vous n'êtes pas encore membre ? Rejoignez-nous gratuitement dès aujourd'hui et contribuer en postant votre réponse ou question sur tous les forums disponibles

Inscription

Connectez-vous