Macro : passer a la cellule suivante

Bonjour,

Je vient vers vous car je n'arrive pas à trouvé comment je peu faire dans ma macro un passage a la cellule suivante (vers bas l'équivalent d'un Entré)
car je veux faire des macros de bouton qui me note un symbole et passe a la case suivante et je n'arrive pas à trouvé la formule pour le faire ...

Crodialement Merci !

Bonjour et bienvenue,

voici un exemple, en mettant les cellules "actives" dans un tableau adresses

function onEdit(event) {
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if (f.getName() == 'Saisie'){
    var adresses = ["C3","C5","F5","C7","F7","C9","F9","C11","F11","E13"];
    var valeurs = adresses.join().split(",");
    var item = valeurs.indexOf(r.getA1Notation());
    if (item < adresses.length - 1){ // sauf le dernier
      f.setActiveSelection(adresses[item + 1]);
    }
  }
}

si besoin, mets un lien vers ton projet (ou un projet simplifié)

Bonjour, et merci pour ton accueil,

Ok ce que tu veux dire c'est que je doit lui donner la plage d'action pour qu'il puisse après faire le déplacement ?

Je pourrait de te demander de m'expliquer un peu comme il fonctionne ce code que tu m’a partagé ?
Car j'aime bien comprendre ce que fait le code mais je ne connais pas du tout le JS, merci. (puis aussi c'est pour mieux l'adapté dans mon cas )
cela dit comment je peu faire un appelle de fonction par une autre ? Je vais éviter de la copier pour chacune de mes fonction de mes 46 boutons...

sinon voilà mon fichier Sheets normalement il est déjà ouvert a la lecture :)
https://docs.google.com/spreadsheets/d/1XtQqupRfFJICvS67heUISO-_HthhUhEKCYAkxdSeTLk/edit?usp=sharing

Voici une explication détaillée du code

Oui cela me semble plus simple de définir les zones successives dans un tableau.

// signifie ligne commentaire

// onEdit est un simple trigger ou déclencheur qui n'a pas besoin d'être déclaré avant utilisation
function onEdit(event) {
  // f est la feuille active et c la cellule active
  var f = event.source.getActiveSheet();
  var c = event.source.getActiveRange();

  // si le nom de la feuille active est Saisie ... ce qui peut être changé !
  if (f.getName() == 'Saisie'){

    // les adresses successives ds cellules sont mises dans un tableau
    var adresses = ["C3","C5","C7","F7","C9","F9","C11","F11"];
    // et sont ensuite rassemblées pour être plus simplement exploitées
    var valeurs = adresses.join().split(",");

    // item sera l'adresse de la cellule active
    var item = valeurs.indexOf(c.getA1Notation());

    if (item < adresses.length - 1){ 
      // je sélectionne l'adresse suivante (sauf si c'est la dernière mais on pourrait boucler sur la première)
      f.setActiveSelection(adresses[item + 1]);
    }

  }
}

https://docs.google.com/spreadsheets/d/1cspHL6rttiycsCCrhOs26GWpI9Hj906hztXPeQZHVbk/edit?usp=sharing

Au vu de ton fichier, je ne suis pas sur d'avoir bien saisi ce que tu souhaites faire ! Où sont les boutons ? et quelle action doivent-ils déclencher ?

Ok ! merci beaucoup pour le détail
au super tu me donne en plus un élément que j'avais besoin pour un autre truc ! xD

par contre je le test la et cela ne prend pas en compte j'ai retiré le if getname car je veux qu'il soit disponible pour toute les page,
mais quand j'appuis sur mes boutons il exécuté la macro mais il n’exécute pas le onEdit après j'ai peur qu'il n'est pas appelé correctement ou un élément qui m'échappe ?

Alors voilà quelle que fonction que j'utilise a noté qu'il sont généré automatiquement part Sheet le premier le reste c'est du copier collé

function a() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().setValue('あ');};
function i() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().setValue('い');};
function u() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().setValue('う');};
function e() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().setValue('え');};

function onEdit(event) {
  var r = event.source.getActiveRange();
  var adresses = ["J6","J7","J8","J9","J10","J11","J12","J13","L6:L13","N6:N13","X6:X13","Z6:Z13","AB6:AB13"];//j'ai testé en plage ou par cellule rien
  var valeurs = adresses.join().split(",");
  var item = valeurs.indexOf(r.getA1Notation());
  if (item < adresses.length - 1){
    f.setActiveSelection(adresses[item + 1]);
    }}

ah après avoir regardé un peu plus en détail il marche quand je saisi manuellement et clique quelle que par mais pas quand j'exécute une autre fonction !
et je pense qu’au vu de le join split , je vais le faire cellule par cellule dans la libraire ça c'est pas grave

c'est ça les boutons quand tu clique dessus il écris ce que j'ai donné comme symbole qui lui est relier :)

image

Il suffit sans doute d'ajouter

f.setActiveSelection("___adresse___suivante___");

à tes macros existantes

Alors j'ai essayé plusieurs tentatives aucun ne marche,

Sur la fonction A j'ai tenté ce que je cherchai avec les page spécifique mais ça c'est soldé par un échec je crois que c'est dû au IF mais le message d'erreur m'aide pas beaucoup

bon je vais voir un peu comment faire un appele de fonction sur google et après je vais voir plus en détail avec le IF ... car a terme je veux l'avoir en 4 possibilités

function onEdit(event) {
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var adresses = ["J6","J7","J8","J9","J10","J11","J12","J13","J14","J15","L6","L7","L8","L9","L10","L11","L12","L13","L14","L15","N6","N7","N8","N9","N10","N11","N12","N13","N14","N15","X6","X7","X8","X9","X10","X11","X12","X13","X14","X15","Z6","Z7","Z8","Z9","Z10","Z11","Z12","Z13","Z14","Z15","AB6","AB7","AB8","AB9","AB10","AB11","AB12","AB13","AB14","AB15"];
  var valeurs = adresses.join().split(",");
  var item = valeurs.indexOf(r.getA1Notation());
  if (item < adresses.length - 1){
    f.setActiveSelection(adresses[item + 1]);
    }}

function a() {
  var f = event.source.getActiveSheet();
  var spreadsheet = SpreadsheetApp.getActive();
  if (f.getName() == 'Exercice Hiragana'){
    spreadsheet.getCurrentCell().setValue('あ');}
  else if (f.getName() == 'Exercice Hiragana Inverser'){
    spreadsheet.getCurrentCell().setValue('A');}};
function i() {
  var f = event.source.getActiveSheet();
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().setValue('い');
  f.setActiveSelection("___adresse___suivante___");};
function u() {
  var f = event.source.getActiveSheet();
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().setValue('う');
  f.setActiveSelection("onEdit");};

ah par contre j'ai besoin d'une précision c'est du "java" ou JavaScript" car on ma dit que c'est pas la même chose ^^'

Ce n'est pas du tout du java.

C'est en effet quasiment du javascript, un peu à la sauce google, on y retrouve en effet la syntaxe et le fonctionnement général de javascript. Je ne connais pas exactement la différence. En javascript, le code est exécuté sur ton pc, alors qu'en google script, il est exécuté côté serveur car c'est le serveur qui "détient" la feuille. Mais c'est une différence de forme. Y a t'il réellement une différence de langage ?

Alors j'ai essayé plusieurs tentatives aucun ne marche,

Sur la fonction A j'ai tenté ce que je cherchai avec les page spécifique mais ça c'est soldé par un échec je crois que c'est dû au IF mais le message d'erreur m'aide pas beaucoup

Peux-tu expliquer ton besoin ? car j'ai répondu plus au titre qu'à ce que je pressens être ton vrai besoin.

Oui c'est surtout pour savoir ou lancé mes recherche car je ne trouve pas grand-chose pour des macros Sheet, et on ma dit au lycée (sa date un peu) que les 2 n'était pas vraiment compatible et qu'il sont différent sur leur utilisation après j'en sais pas plus.

Ah oui, non c'est que j'ai fait un test avec un élément que tu m’a donné dans ton premier message, qui a pour but de m'évite de copier les 46 fonctions 4 fois... pour chaque page vu que je change d'alphabet sur chaque page, après c'est un petit bonus je ferais peu-être un poste dédier si c'est demandé...

Sinon je ne sais pas comment appelé la fonction onEdit après l'exécution d'une autre fonction...

Sinon je ne sais pas comment appelé la fonction onEdit après l'exécution d'une autre fonction...

Ce n'est pas approprié

onEdit est une fonction "réservée" qui se déclenche quand on modifie quelque chose directement/manuellement dans une feuille

Ah zut bon je ne vais pas pouvoir l'utiliser s'il doit attendre une action de l'utilisateur bon dommage.
Merci quand même pour ton aide.

Rechercher des sujets similaires à "macro passer suivante"