Utilisation de la fonction While

Bonjour tout le monde!

Je rencontre une difficulté avec les scripts Google.

Pour faire simple, je souhaite réaliser une boucle qui s'exécute tant que la condition est fausse.

Jusque là, rien de bien compliqué.

Sauf que j'ai besoin que cette boucle se fasse en fonction de la valeur d'une cellule en particulier.

Voici les données :

Je détermine une variable Top.

Ma macro attribue des valeurs aléatoires à deux colonnes de cellules.

Ma condition : les valeurs aléatoires ne doivent pas appairer certaines cellules entre elles.

Donc, par une simple formule de conditions [si(C1 = G1; "Relance" ; "Ok")] , je détermine si l'appariement est ma convenance.

Je détermine une valeur en L9 : le nombre de "Ok".

Ma boucle doit tourner tant que le nombre en L9 ne correspond pas à ma variable Top.

Voici mon code actuel :

var alea = range.getCell(6, 9).getValue();
while (alea <> 'OK')
    for (var i = 1; i <= Top; i++) {
      var c = classeur.getRange('H' + i).setValue(Math.random());
      }
      spreadsheet.getActiveSheet().hideColumns(spreadsheet.getRange('G:H').getColumn(), spreadsheet.getRange('A:B').getNumColumns());
      spreadsheet.getRange('I1').setFormula( '=index($G$1:$G$' + Top + ';RANK($H1;$H$1:$H$' + Top + ');1)')
      spreadsheet.getRange('I1').autoFill(spreadsheet.getRange('I1:I' + Top), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
      spreadsheet.getRange('L1').setFormula( '=if(I1<>C1;"OK";"Relance")')
      spreadsheet.getRange('L1').autoFill(spreadsheet.getRange('L1:L' + Top), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
    spreadsheet.getRange('L9').setFormula( '=if(countif(L1:L' + Top + ';"OK")=' + Top + ';"OK";"Relance")')
    }

Le hic, c'est que la ligne

while (alea <> 'Ok')

renvoie une erreur de syntaxe que je ne trouve pas.

Des idées?

Vous remerciant par avance des vos réponses!!

Benjen

Bonjour,

Le hic, c'est que la ligne

while (alea <> 'Ok')

renvoie une erreur de syntaxe que je ne trouve pas.

Des idées?

Essaie avec :

while (alea != 'Ok')

Cordialement,

Merci Sébastien!

Rapide et clair, comme toujours!!

Bon je rouvre le sujet, car c'est quand même en lien.

Ma boucle While ne fonctionne pas.

Je vous colle mon code ci-dessous.

Lorsque j'exécute mon script, la boucle While boucle sans exécuter les instructions dans la boucle.

Une idée pour m'éclairer?

 var classeur = SpreadsheetApp.getActiveSpreadsheet();
 var spreadsheet = SpreadsheetApp.getActive();
 var sheet = SpreadsheetApp.getActiveSheet();
 spreadsheet.getRange('L9').setFormula( '=if(countif(L1:L8;"OK")=' + Top + ';"OK";"Relance")');

  //Détermination de la position des premiers de poules
  for (var i = 1; i <= 8; i++) {
    var c = classeur.getRange('B' + i).setValue(Math.random());
  }
  spreadsheet.getRange('C1').setFormula( '=index($A$1:$A$8;RANK($B1;$B$1:$B$8);1)')
  spreadsheet.getRange('C1').autoFill(spreadsheet.getRange('C1:C8'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
  var range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns());
  var alea = range.getCell(9, 12).getValue();
  while (alea != 'OK'){ 
  //Détermination de la position des secondes de poules
    for (var i = 1; i <= 8; i++) {
      var c = classeur.getRange('H' + i).setValue(Math.random());
    spreadsheet.getActiveSheet().hideColumns(spreadsheet.getRange('G:H').getColumn(), 
    spreadsheet.getRange('A:B').getNumColumns());
    spreadsheet.getRange('I' + i).setFormula( '=index($G$1:$G$8;RANK($H' + i + ';$H$1:$H$8);1)')
    spreadsheet.getRange('L' + i).setFormula( '=if(I' + i + '<>C' + i + ';"OK";"Relance")')
    }
  }
}

Bonjour tout le monde!

J'ai trouvé une solution à mon problème.

Plutôt que d'imbriquer mes boucles, je les ai scindées.

Ce qui donne ceci :

 //Détermination de la position des secondes de poules
    for (var i = 1; i <= Top; i++) {
    var c = classeur.getRange('I' + i).setValue(Math.random());
  }
    spreadsheet.getRange('J1').setFormula( '=index($H$1:$H$' + Top + ';RANK($I1;$I$1:$I$' + Top + ');1)');
    spreadsheet.getRange('J1').autoFill(spreadsheet.getRange('J1:J' + Top), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
    spreadsheet.getRange('M1').setFormula( '=if(D1<>J1;"OK";"Relance")');
    spreadsheet.getRange('M1').autoFill(spreadsheet.getRange('M1:M' + Top), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);

  //On vérifie que les seconds de poule n'affrontent pas les premiers de poules, si oui, on retire au sort
  while (spreadsheet.getRange('A1').getValue() != spreadsheet.getRange('N1').getValue()){
    for (var i = 1; i <= Top; i++) {
      var c = classeur.getRange('I' + i).setValue(Math.random());
    }
  }

Si ça peut servir à certaines personnes!

Rechercher des sujets similaires à "utilisation fonction while"