Case à cocher pour figer une valeur

Bonjour,

Je cherche à figer le résultat d'une formule à un moment donné ainsi lorsque les variables changent par la suite, j'ai pu conserver le résultat à un instant T précédent.

J'utilise une case à cocher, lorsqu'elle est cochée, le résultat renvoyé est celui de la cellule elle-même et lorsqu'elle est décochée, le résultat renvoyé est celui de la formule (une valeur d'un importrange dans mon cas).

Voici un exemple:

exemple reference circulaire

En testant, ça fonctionne, on peut changer les valeurs en B5 ou B6, on a toujours 66 si la case est cochée.

Le problème, c'est que souvent quand on ré-ouvre le fichier, il perd la valeur en C7 et au lieu d'avoir 66 on se retrouve avec 0.

Y a-t-il un moyen de figer une valeur sans être obligé de faire un Coller des Valeurs manuellement ?

Merci de votre aide

Bonjour,

je pense que la méthode la plus sûre est de faire un script onEdit sur la case à cocher

  • si vrai : on y met le résultat de la soustraction
  • si faux, on y met la formule de soustraction

Malheureusement, je n'en suis pas encore à écrire des scripts.

Je pensais pouvoir l'éviter avec la référence circulaire mais les résultats m'ont l'air aléatoire !!!

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

function onEdit(event){
  var feuille = event.source.getActiveSheet();
  var cellule = event.source.getActiveRange();
  if (feuille.getName()=='Feuille 1' && cellule.getA1Notation()=='C2'){
    if (cellule.getValue()){
      feuille.getRange('C7').setValue(feuille.getRange('B5').getValue()-feuille.getRange('B6').getValue())
    }else{
      feuille.getRange('C7').setFormula("=B5-B6")
    }
  }
}

N'oublie pas de solder les fils de discussion en cliquant sur ... tu en as pas mal d'ouvert !

image

Le script reste d'être plus compliqué pour mon tableau, je cherche à figer le résultat, une fois la cas cochée, issu de la formule:

=SI(OU(A1="Date";$F$1="");"";SI($Q$22;O122;SOMMEPROD((IMPORTRANGE($F$2;TEXTE($A$1;"mmmm")&"!B9:B39")=$A$1)*(IMPORTRANGE($F$2;TEXTE($A$1;"mmmm")&"!AB9:AB39")))))

Q22 est la case à cochée et O122 est le cellule qui reçoit la formule.

Et si la case n'est pas cochée, la formule doit s'exécuter.

J'ai encore beaucoup de travail avant de pouvoir écrire un script qui conserve le résultat ou exécute la formule en fonction de la case à cocher !

essaie ceci ...

function onEdit(event){
  var feuille = event.source.getActiveSheet();
  var cellule = event.source.getActiveRange();
  if (feuille.getName()=='Feuille 1' && cellule.getA1Notation()=='Q22'){
    feuille.getRange('O122').setFormula('=SI(OU(A1="Date";$F$1="");"";SI($Q$22;O122;SOMMEPROD((IMPORTRANGE($F$2;TEXTE($A$1;"mmmm")&"!B9:B39")=$A$1)*(IMPORTRANGE($F$2;TEXTE($A$1;"mmmm")&"!AB9:AB39")))))')
    if (!cellule.getValue()){
      feuille.getRange('Q122').copyTo(feuille.getRange('Q122'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    }
  }
}

Bonsoir,

Absent depuis 3 semaines, j'avais complétement déconnecté, je viens juste d'essayer le script.

Un 1er message d'erreur: Fonction inconnue: Si.

Pourtant dans la cellule O122, la formule copiée est la bonne:

=SI(OU(A1="Date";$F$1="");"";SI($Q$22;O122;SOMMEPROD((IMPORTRANGE($F$2;TEXTE($A$1;"mmmm")&"!B9:B39")=$A$1)*(IMPORTRANGE($F$2;TEXTE($A$1;"mmmm")&"!AB9:AB39")))))

Mais set.Formula ne doit pas aimé les formulations en français.

Remplacé par son équivalent en anglais:

=IF(OR(A1="Date";$F$1="");"";IF($Q$22;O122;SUMPRODUCT((IMPORTRANGE($F$2;TEXT($A$1;"mmmm")&"!B9:B39")=$A$1)*(IMPORTRANGE($F$2;TEXT($A$1;"mmmm")&"!AB9:AB39")))))

ça paraissait mieux.

Case décochée, le bon résultat est renvoyé mais une fois la case cochée pour figer le résultat, c'est systématiquement 0 qui est renvoyé.

Bonjour,

peux-tu mettre un lien vers une copie de ton fichier ?

Bonsoir,

J'ai un peu modifié le script en appelant des fonctions à partir de onEdit:

function onEdit() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  if (sheet.getRange("Q22").isChecked() === true) {
    copy()
  }
  if (sheet.getRange("Q22").isChecked() === false) {
    formule()
  }  
  if (sheet.getRange("Q127").isChecked() === true) {
    coller()
  }  
}

function copy() {
  var s = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  s.getRange('O122').copyTo(s.getRange('O122'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
}

function formule() {
  var s = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
 s.getRange('O122').setFormula('=IF(OR(A1="Date";$F$1="");"";IF($Q$22;O122;SUMPRODUCT((IMPORTRANGE($F$2;TEXT($A$1;"mmmm")&"!B9:B39")=$A$1)*(IMPORTRANGE($F$2;TEXT($A$1;"mmmm")&"!AB9:AB39")))))')
}

function coller() {
  var s = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  s.getRange('F79:P144').copyTo(s.getRange('F147'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var range = SpreadsheetApp.getActive().getRange('Q127');
  range.uncheck()
}

....et il semble que le résultat en O122 reste figé sans se transformer par la suite en 0 !!!

Rechercher des sujets similaires à "case cocher figer valeur"