Comment passer à la cellule de droite après validation

Bonjour à tous,

Voici mon petit problème :
J'ai un tableau dans lequel chaque étudiant peut compléter sa ligne.
J'avais des étudiants qui me modifiaient le format de mon tableau.
=> Avec un onEdit, j'ai réussi à ce que le tableau revienne à l'original.

Cependant, je voudrais que quand un étudiant complète une cellule, le curseur passe à la suivante juste à droite (et non pas tout en haut à gauche).

Merci.

function onEdit() {
  var spreadsheet = SpreadsheetApp.getActive();
  var app = SpreadsheetApp;
  var feuille = app.getActiveSpreadsheet().getActiveSheet();
  var cellule_a_tester = feuille.getRange(1,5).getValue();

  if (cellule_a_tester == 'Modifiable') {

  spreadsheet.getRange('F5:K45').activate();
  spreadsheet.getActiveRangeList()
  .setBorder(true, null, true, true, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID_THICK)
  //         haut, gauc, bas , droi, vert, hori,  couleur , 

  .setBorder(null, true, null, null, null, null, '#000000', SpreadsheetApp.BorderStyle.DOUBLE)

  .setBorder(null, null, null, null, true, true, '#000000', SpreadsheetApp.BorderStyle.DOTTED)

  .setHorizontalAlignment('center')
  .setVerticalAlignment('middle')
  .setBackground(null)
  .setFontFamily('Calibri')
  .setFontSize(12)
  .setFontColor('#000000');

  //spreadsheet.getRange('H3').activate();
  };
}

Voici le tableau :

capture

Bonjour,

tu peux faire ceci, à adapter (il s'agit ici pour la feuille mySheetName d'aller à droite si la valeur est introduite entre les colonnes 6 et 10)

function onEdit(event) {
  var sh = event.source.getActiveSheet();
  var rng = event.source.getActiveRange();
  if (sh.getName() == 'mySheetName' && rng.getColumn() >= 6 && rng.getColumn() <= 10) {  // adapt
    sh.setActiveSelection(rng.offset(0, 1).getA1Notation());
  }
}

attention, une seule fonction onEdit, donc à inclure dans ta fonction actuelle (en ajout event comme argument)

Merci Steelson,

mais j'ai plusieurs feuilles qui contiennent toutes le nom de "Sem." ou "Template".
Je ne peux donc pas me limiter à "mySheetName".

capture

donc

function onEdit(event) {
  var sh = event.source.getActiveSheet();
  var rng = event.source.getActiveRange();
  if (rng.getColumn() >= 6 && rng.getColumn() <= 10) {  // adapt
    sh.setActiveSelection(rng.offset(0, 1).getA1Notation());
  }
}

ou alors, tu peux tester le nom de la feuille sur une partie du nom

function onEdit(event) {
  var sh = event.source.getActiveSheet();
  var rng = event.source.getActiveRange();
  if (sh.getName().subString(0,3) == 'Sem' && rng.getColumn() >= 6 && rng.getColumn() <= 10) {  // adapt
    sh.setActiveSelection(rng.offset(0, 1).getA1Notation());
  }
}

Hello,

Merci pour ta réponse, j'ai un message d'erreur :

capture

Une fonction onEdit ne se lance pas via l'éditeur de script, elle est automatiquement activée lors d'une modification de cellule.

Ce que je comprends pas bien, c'est pourquoi utiliser onEdit() tout seul sans l'événement e ou event précédemment!

En fait, dans mon tout 1er script, il fonctionne bien.
Le seul problème c'est que quand l'utilisateur modifie une cellule, la correction du format du tableau fonctionne mais à la fin du script, il sélectionne en bleu tout le tableau et donc, un utilisateur peut modifier une autre cellule qui ne lui est pas destinée.
L'astuce que j'ai trouvé, c'est en fin de script d'aller sur la cellule H3 qui est protégée. J'évite ainsi des erreurs.

J'ai laissé le onEdit () tout seul, sans argument et j'ai constaté que ça marche.

Le fait de l'exécuter me permet de voir s'il y a des erreurs.

J'espère avoir bien expliqué.

D'une part, le script ne doit pas être lancé à partir de l'éditeur de script, mais je ne vois pas non plus dans ton image

sh.setActiveSelection(rng.offset(0, 1).getA1Notation());

Bref, partage un fichier, ce sera sans doute plus simple !

Ok, pour ne pas lancer le script depuis l'éditeur : je comprends ton explication puisqu'il s'agit d'un auto-exécutable.

Voici le lien de mon fichier (c'est un fichier pour jouer, les infos sont factices).
C'est un lien pour les étudiants : tu ne peux accéder qu'aux cellule de F5:K45 de chaque feuille.
Si tu as besoin d'un niveau supérieur, fais-moi signe.

Pour rappel,
le but est que certains étudiants font des "copier coller" ce qui peut parfois modifier mon format de tableau (bordures, couleurs,...).
=> j'ai crée un onEdit () qui reformat le tableau à chaque fois qu'une cellule est complétée par un étudiant.

Mon besoin est que si une cellule est complétée, le curseur se positionne sur la cellule suivante à droite (plus sur H3 comme je le fais déjà).
Les lignes 1 à 4 et 35 sont celles que tu m'as proposées d'ajouter.

https://docs.google.com/spreadsheets/d/1ObpHc-2mZOJN7OiRmISdTx4lay_s3oau53jqQBhgqWY/edit?usp=sharing

J'espère avoir bien expliqué... pas toujours facile.

function onEdit(event) {
  var sh = event.source.getActiveSheet();
  var rng = event.source.getActiveRange();
  if (rng.getColumn() >= 6 && rng.getColumn() <= 10) {  

    var spreadsheet = SpreadsheetApp.getActive();
    var app = SpreadsheetApp;
    var feuille = app.getActiveSpreadsheet().getActiveSheet();
    var cellule_a_tester = feuille.getRange(1,5).getValue();

      if (cellule_a_tester == 'Modifiable') {
      spreadsheet.getRange('F5:K45').activate();
      spreadsheet.getActiveRangeList()
      .setBorder(true, null, true, true, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID_THICK)
      //         haut, gauc, bas , droi, vert, hori,  couleur , 
      .setBorder(null, true, null, null, null, null, '#000000', SpreadsheetApp.BorderStyle.DOUBLE)
      .setBorder(null, null, null, null, true, true, '#000000', SpreadsheetApp.BorderStyle.DOTTED)
      .setHorizontalAlignment('center')
      .setVerticalAlignment('middle')
      .setBackground(null)
      .setFontFamily('Calibri')
      .setFontSize(12)
      .setFontColor('#000000');
      spreadsheet.getRange('H3').activate();
      };

  sh.setActiveSelection(rng.offset(0, 1).getA1Notation());
  }
}

J'ai essentiellement remplacé

spreadsheet.getRange('F5:K45').activate();
spreadsheet.getActiveRangeList()

par

      spreadsheet.getRange('F5:K45')

de toute façon, il faut toujours éviter les activate() et getActiveXXXX() au milieu d'un script.

Ok, mais là ça ne marche plus.
Quand on se met sur une feuille verte, il ne fait plus rien si on change le format des bordures par exemple.
Le script ne fait plus rien.

Et je ne vois pas à quoi sert "source" dans ces 2 lignes.
var sh = event.source.getActiveSheet();
var rng = event.source.getActiveRange();

ok, j'ai remis en configuration d'origine ... j'ai répondu à ton besoin (en titre) mais comme je ne comprends pas bien comment fonctionne ton script onEdit() je ne peux pas te proposer la manière de l'intégrer. Peux-tu en expliquer le fonctionnement, en parallèle je vais regarder cela, parce que je ne comprends pas en quoi ce que j'avais proposé entrave son fonctionnement.

Dans l'état actuel, j'ai changé la police ou la couleur de fond et ton script ne les a pas réinitialisés.

Je persiste à dire (en analysant le script) que les propositions faites ne changeaient pas le fonctionnement de ta partie.

Normalement si tu vas sur une feuille verte, et que tu complètes une des cellules et que tu modifies la couleur de ton écriture, le script va remettre la couleur d'origine (noir). Tu peux également modifier le bord d'une cellule, il va systématiquement remettre celle d'origine.

A chaque fois que tu vas encoder une valeur, le script vérifie toute la feuille et la réinitialise.

J'ai modifié en gras, la couleur et le fond ... et il ne se passe rien.

image

C'est bizarre, je viens d'ajouter en G7 "dispo" et il a tout réinitialisé.

Je n'y comprend rien.

J'ai compris...

Essaie comme ça : mets-toi sur une cellule, choisi une couleur, puis écris dans la cellule et là ça dois marcher.

je vais te faire un topo complet sur le fonctionnement de onEdit

EUREKA... j'ai remplacé onEdit() par onSelectionChange() et ça marche.
Maintenant je n'ai pas mis d'arguments entre les parenthèses mais ça marche. Ne me demande pas pourquoi??? mais bon... ça marche.

Attention, il faut redémarrer le fichier pour que ça fonctionne.

Laisse-moi quand même ton explication pour onEdit ainsi je peux comprendre ;)

Merci pour ta contribution toujours au top.

Rechercher des sujets similaires à "comment passer droite validation"