Incrémentation avec condition

ic

Bonjour,

j'ai un petit problème que je n'arrive pas à résoudre.
Je souhaite incrémenter de 1 la cellule "retard de paiement cumulé" lorsque la cellule "reste à payer" est supérieure ou égale à 2 fois la cellule "tarif appliqué" et que le "statut" est égale à "Abonné". Ensuite, il ne faut pas que la cellule "retard de paiement cumulé" soit décrémenté lorsqu'une condition n'est plus validée.

Je vous remercie d'avance pour votre aide.

Bonjour,

En S2 avec la case itération coché. (Fichier > Paramètres)

=SI(Q2>=(L2*2);SI(R2="Abonné";S2+1);S2-1);

Sinon, un app script (Outils > Editeur de script) qui est meilleur pour ton problème.

function onOpen() {
  var ui = SpreadsheetApp.getUi()
    ui.createMenu('📌 Verification')
   .addItem('Verification...','misenRoute');
    .addToUi();
}

function misenRoute(){
  var f = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();//Ou a la fin .getSheetByName("feuille");
  var plage = f.getRange("L2:S5").getValues();
  var tab = [];
  for(i=0;i<plage.length;i++){
    if(plage[i][6] >= (plage[i][0]*2)){
      if(plage[i][7] == "Abonné"){
        tab.push(plage[i][8]+1);
      }
    }else{
      tab.push(plage[i][8]-1);
    }
  }
  f.getRange("S2:S5").setValues(tab);
}

Bonne Journée

@Imoka

un fois de plus vérifies tes propositions

=SI(Q2>=(L2*2);SI(R2="Abonné;S2+1);S2-1);

non seulement tu es en dépendance circulaire et la fonction n'est pas correctement écrite

je n'ai pas regardé le script

Salutations.

Je vous remercie de vos réponses toutefois, la formule ne veut pas fonctionner, Google Sheet m'affiche :
"Il semble que votre formule contienne une erreur. Si vous ne voulez pas saisir de formule, commencez votre texte avec une apostrophe (')."

J'ai donc essayé le script et le compilateur affiche une erreur, sans me préciser laquelle, au niveau de la ligne 5.

Je vous remercie d'avance pour votre aide.

Parce que sa marche pour moi la formule avec une modif

=SI(H1>-100;1;SI(F1>=(A1*2);SI(G1="Abonné";H1+1);H1-1))
image

Puis comment activer l'itération ou calcul itératif

image image
ci2 image

J'ai activé le calcul itératif dans les paramètres et j'ai quand même des 1 partout qui ne s'incrémente pas lorsqu'on valide les conditions d'incrémentation.

image

Et pour le script, il m'affiche cette erreur maintenant.

Je ne vois pas trop comment régler ce problème.

Il faut exécuter misenRoute, onOpen ne peut pas être exécuter depuis l'éditeur.

Et dans la feuille, il faut corriger la formule vu qu'il a des champs vides.

=SI(ET(R2="Abonné";L2<>"";Q2<>0);SI(S2>-100;1;SI(Q2>=(L2*2);S2+1;S2-1));"")

Et sur une correction de Gilbert en MP:

function onOpen() {
  var ui = SpreadsheetApp.getUi()
    ui.createMenu('📌 Verification')
   .addItem('Verification...','misenRoute')
    .addToUi();
}

Merci à lui

Merci du temps que vous consacrez à mon problème .
Je constate une amélioration car la formule ne m'affiche plus des 1 dans toutes les cellules mais à partir du moment où la cellule "reste à payer" n'est pas vide elle incrémente 1, j'ai mis 20 dans la cellule Q2 pour essayer et ça ne change rien.

image

Et pour le script, il affiche maintenant une autre erreur :

image

Après reflexion:

=SI(ET(R2="Abonné";L2<>"";Q2<>0);SI(Q2>=(L2*2);S2+1;S2-1);"")
51d50564 adc7 4f2c b373 bee81d568a0c

Avec nombre max d’itération: 2

Bonne journée

ça fonctionne, je te remercie de ton aide

Bonjour,

Pour le script, j'ai trouvé ce qui marché pas.

function onOpen() {
  var ui = SpreadsheetApp.getUi()
    ui.createMenu('📌 Verification')
   .addItem('Verification...','misenRoute')
    .addToUi();
}

function misenRoute(){
  var f = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();//Ou a la fin .getSheetByName("feuille");
  var plage = f.getRange("L2:S5").getValues();
  var tab = [];
  for(i=0;i<plage.length;i++){
    if(plage[i][6] >= (plage[i][0]*2)){
      if(plage[i][7] == "Abonné"){
        tab.push([plage[i][8]+1]);
      }
    }else{
      tab.push([plage[i][8]-1]);
    }
  }
  f.getRange("S2:S5").setValues([tab]);
}

Bonne Nuit

Super, je regarde tout ça et je te tiens au jus.
Merci !!!!

Bonne nuit

Voilà

function onOpen() {
  var ui = SpreadsheetApp.getUi()
    ui.createMenu('📌 Verification')
   .addItem('Verification...','misenRoute')
    .addToUi();
}

function misenRoute(){
  var f = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();//Ou a la fin .getSheetByName("feuille");
  var plage = f.getRange("L2:S5").getValues();
  var tab = [];
  for(i=0;i<plage.length;i++){
    if(plage[i][6] >= (plage[i][0]*2)){
      if(plage[i][7] == "Abonné"){
        tab.push([plage[i][8]+1]);
      }
    }else{
      tab.push([plage[i][8]-1]);
    }
  }
  f.getRange("S2:S"+(tab.length+2)).setValues([tab]);
}

Bonne Journée

Bonjour JBS,

Je vous remercie de vos réponses toutefois, la formule ne veut pas fonctionner, Google Sheet m'affiche :...

Malheureusement, si tu ne publies pas un fichier simplifié, on ne peut pas deviner tes paramètres régionaux. Et il se peut que la ponctuation qui est adaptée pour certains pays (FR, Portugal par exemple) ne convienne pas pour la Canada ou la Suisse !!

Et pourtant, au lieu de se plonger dans une solution sophistiquée par script, une formule est plus simple et n'a pas de latence (note qu'un script s'exécute côté serveur).

Rechercher des sujets similaires à "incrementation condition"