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
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!