Soustraction dans une boucle Script Google Sheet

Bonjour,

function ChangementTour() {
  var reset = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");
  var trouve = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");
  for (var i1 = 6; i1 < 5 + trouve.getRange(5, 2).getValue(); i1++) {
     if (trouve.getRange(i1, 4).getValue() > 0){
        (trouve.getRange(i1, 4).getValues() - 1)
      }
  }

Dans mon code la valeur -1 n'est pas appliqué à la cellule i1, 4 et même quand la cellule est > 0 je ne comprends pourquoi.
Merci d'avance pour votre aide.

S'il n'y a qu'une seulle cellule, getValue ne prends pas d's final

Pour affecter une valeur à une cellule

maCellule.setValue(valeur)

donc, si je comprends, pour mettre 1

trouve.getRange(i1, 4).setValue(1)

ou pour décrémenter de 1

trouve.getRange(i1, 4).setValue(trouve.getRange(i1, 4).getValue() - 1) 

On ne peut pas décrémenter sans perdre la formule ? (RechercheV dans la cellule ?)

désolé mais je ne comprends pas ton sujet

mets un lien vers un fichier simplifié représentatif et indique le résultat attendu

https://docs.google.com/spreadsheets/d/1r9iV14zWCwsU6yzyhp_wMi-An9pAqLDAeV69fjV9L58/edit?usp=sharing

Je souhaite que quand je fasse "Fléche en haut" en lui associant la macro.
Qu'il y ait une décrémentation de la colonne D sans que ça n'affecte la fonction la cellule qui est associé au renvoie à la fonction : =IFS(E6=FAUX;"";E6=VRAI;RECHERCHEV($C$5 & " " & C6;Classe!$A:$C;3;))

Qui me permet de reset quand je le souhaite avec la cellule à cocher.

(C'est la feuille combat)

accès refusé ... pour partager : https://www.sheets-pratique.com/fr/cours/partage

image

Tu as 2 fonctions function ChangementTour(), laquelle est à conserver ?

Tu as 3 noms différents pour le même feuille, lequel retenir ?

var reset = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");
  var trouve = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");
  var add = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");

Pour décrémenter la colonne D, il faut en réalité changer la valeur en colonne C de Classe ... est-ce que tu confirmes ?

On peut retenir que retrouve ou peut importe c'était pour me repérer dans mon script.

function ChangementTour() {
  var reset = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");
  var trouve = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");
  var add = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");
  for (var i1 = 6; i1 < 5 + trouve.getRange(5, 2).getValue(); i1++) {
     if (trouve.getRange(i1, 4).getValue() == 0){
      trouve.getRange(i1, 4).setValue(trouve.getRange(i1, 4).getValue() - 1) 
  }
     if (trouve.getRange(i1, 4).getValue() != "") {
        trouve.getRange(i1, 4).setValue(trouve.getRange(i1, 4).getValue() - 1) 
     }
  }
for (var i2 = 6; i2 < 5 + trouve.getRange(5, 2).getValue(); i2++) {
  if (reset.getRange(i2, 4).getValue() <= -1){
    reset.getRange(i2, 5).setValue(false)}
}
for (var i3 = 6; i3 < 5 + trouve.getRange(5, 2).getValue(); i3++)
     {
  if (add.getRange(i3, 5).getValue() == false){
    add.getRange(i3, 4).setValue("=B" + (i3))}
}
}

J'aimerais arriver à ce résultat mais sans que je sois obligé de remettre avec la dernière boucle les données, en gros que ça fasse juste -1 au résultat sans écraser le lien entre mes cellules et ma formule.

Je veux garder la dépendance de ma cellule même quand on décrémente -1.

Car en gros si non mes cases à cocher n'a plus d'effet et c'est très problématique dans ma feuille

Je ne comprends pas grand'chose à ton fichier, mais je repars d'ici ...

Bonjour,

function ChangementTour() {
  var reset = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");
  var trouve = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");
  for (var i1 = 6; i1 < 5 + trouve.getRange(5, 2).getValue(); i1++) {
     if (trouve.getRange(i1, 4).getValue() > 0){
        (trouve.getRange(i1, 4).getValues() - 1)
      }
  }

Dans mon code la valeur -1 n'est pas appliqué à la cellule i1, 4 et même quand la cellule est > 0 je ne comprends pourquoi.
Merci d'avance pour votre aide.

avec comme proposition

function ChangementTour() {
  var combat = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");
  var classe = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Classe");
  var valeurs = classe.getRange('A:A').getValues().join().split(",")
  for (var i3 = 6; i3 < 5 + combat.getRange(5, 2).getValue(); i3++) {
    if (combat.getRange(i3, 5).getValue() > 0) {
      var item = combat.getRange(5, 3).getValue()+' '+combat.getRange(i3,3).getValue()
      classe.getRange((valeurs.indexOf(item)+1),3).setValue(classe.getRange((valeurs.indexOf(item)+1),3).getValue()-1)
      console.log(item + ' ' + (valeurs.indexOf(item)+1) + ' ' + classe.getRange(valeurs.indexOf(item)+1,3).getValue())
    }
  }
}

Tu peux regarder de nouveau j'ai trouvé une solution à mon problème

function ChangementTour() {
  var reset = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Combat");
  for (var i1 = 6; i1 < 5 + reset.getRange(5, 2).getValue(); i1++) {
     if (reset.getRange(i1, 4).getValue() == 0){
      reset.getRange(i1, 4).setValue(reset.getRange(i1, 4).getValue() - 1) 
  }
     if (reset.getRange(i1, 4).getValue() != "") {
        reset.getRange(i1, 4).setValue(reset.getRange(i1, 4).getValue() - 1) 
     }
  }
  for (var i4 = 6; i4 < 5 + reset.getRange(5, 2).getValue(); i4++) {
  if (reset.getRange(i4, 4).getValue() == 0){
    reset.getRange(i4, 3).setBackground('#ff0000')
    reset.getRange(i4, 4).setValue(reset.getRange(i1, 4).getValue() - 1) }
else reset.getRange(i4, 3).setBackground('BACKGROUND')
  }
for (var i2 = 6; i2 < 5 + reset.getRange(5, 2).getValue(); i2++) {
  if (reset.getRange(i2, 4).getValue() <= -1){
    reset.getRange(i2, 5).setValue(false)}
}
for (var i3 = 6; i3 < 5 + reset.getRange(5, 2).getValue(); i3++)
     {
  if (reset.getRange(i3, 5).getValue() == false){
    reset.getRange(i3, 4).setValue("=B" + (i3))}
}

En gros tout décompte de -1, si il y a une valeur dans la cellule en D.
Si jamais c'est à 0 la cellule en C se colore en rouge (ce qui est très important pour moi) et toutes les cellules inférieur ou = à -1 sont remise à 0

PS je viens de comprendre ce que tu viens de faire j'avais pas pris le problème dans ce sens mais ça peut se faire !

Si jamais c'est à 0 la cellule en C se colore en rouge (ce qui est très important pour moi) et toutes les cellules inférieur ou = à -1 sont remise à 0

Fais-le par une mise en forme conditionnelle

Rechercher des sujets similaires à "soustraction boucle script google sheet"