Google Sheet Apps Script : Stocker et reprendre les valeurs d'une boucle for

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

J’essaye de réaliser un formulaire sur Sheets qui me créera un tableau en fonction des réponses.

Mon problème, c’est que je n’arrive pas à récupérer les réponses d’une boucle.

J’ai créé le script suivant :


function parametrage()
{

  var ui = SpreadsheetApp.getUi();

  var result = ui.prompt(
    "CONFIGURATION GÉNÉRALE",
    'Entrer le nombre de bassins',
    ui.ButtonSet.OK_CANCEL);

  var button = result.getSelectedButton();
  var text = result.getResponseText();

  if (button == ui.Button.OK)
{
for (i = 1; i <= text; i++)
{
  var result = ui.prompt(
    "CONFIGURATION GÉNÉRALE",
    'Nom du bassin n°'+i + ' ?',
    ui.ButtonSet.OK_CANCEL)

  var nomsBassins = result.getResponseText();

}
SpreadsheetApp.getUi().alert('nom du bassin : ' + nomsBassins);
}
}

Dans cet exemple, après avoir demandé les noms des bassins, je n’arrive pas à récupérer ses différentes valeurs pour les mettre sur un UI Alert par exemple.

Cela me donne que la dernière valeur au lieu de tous les noms de bassins.

Voilà, je ne sais pas si c’est compréhensible, je suis à dispo si ce n’est pas clair.

Bien à vous.

+0 -0

Bonjour

Il faudrait que tu stockes les valeurs dans un tableau puis faire une boucle pour itérer sur ces valeurs :


var nomsBassins = []; // tableau dans lequel on va stocker les valeurs

for (i = 1; i <= text; i++)
{
  var result = ui.prompt(
    "CONFIGURATION GÉNÉRALE",
    'Nom du bassin n°'+i + ' ?',
    ui.ButtonSet.OK_CANCEL)
     //ajout de la valeur au tableau
    nomsBassins.push(result.getResponseText());
}
// on parcours le tableau et on affiche les différentes valeurs
for (i = 0; i < nomsBassins.length ; i++)
{
    SpreadsheetApp.getUi().alert('nom du bassin : ' + nomsBassins[i]);
}

Pour rappel, je ne connais pas Google script donc il y a peut être quelques erreurs de syntaxe mais la logique devrait être correcte

+1 -0

Super ! Parfait merci beaucoup DonKnacki; ca a marché.

J’avais pris le "ui.alert" pour me servir d’exemple.

J’ai voulu reporter les noms de bassins à partir de la cellule A1, puis B1 etc : je me suis pris de cette façon selon tes explications:

function parametrage()
{

  var sheet = SpreadsheetApp.getActive().getSheetByName('PLANNING DES ACTIVTES');
  
  var ui = SpreadsheetApp.getUi();

  var result = ui.prompt(
    "CONFIGURATION GÉNÉRALE",
    'Entrer le nombre de bassins',
    ui.ButtonSet.OK_CANCEL);


  var button = result.getSelectedButton();
  var text = result.getResponseText();
  var nomsBassins = [];

  if (button == ui.Button.OK)
{
for (i = 1; i <= text; i++)
{
  var result = ui.prompt(
    "CONFIGURATION GÉNÉRALE",
    'Nom du bassin n°'+i + ' ?',
    ui.ButtonSet.OK_CANCEL);

    nomsBassins.push(result.getResponseText());

}
for (i=0; i < nomsBassins.length; i++);
{
var BassinsRange = sheet.getRange(1,i);

BassinsRange.setValue(nomsBassins);
}
}
}

Cela me renvoi : TypeError: Cannot read property 'getRange' of null (pour le .getRange).

+0 -0

L’erreur indique que la variable sheet est null
Du coup, tu es sur de la ligne suivante ?


  var sheet = SpreadsheetApp.getActive().getSheetByName('PLANNING DES ACTIVTES');

Il manque pas un I à ACTIVITÉS?

Attention aussi, dans la boucle, tu as fais un appel au tableau et non à un de ces éléments

for (i=0; i<nomsBassins.length; i++);
{

var col = parseInt(i)+1;
var BassinsRange = sheet.getRange(1,col);

BassinsRange.setValue(nomsBassins[i]);
}
+0 -0

Salut DonKnacki, merci encore !

Le "i" d’activités était effectivement manquant !

Pourtant j’ai du le relire une cinquantaine de fois en cherchant :B => MERCI

J’ai intégré ta proposition, mais cela ne semble pas fonctionner.

Rien ne s’inscrit en cellule A1, B1, C1 etc…

Je ne l’avais pas vu avant mais tu as un ; juste après ton for qui fait qu’on entre pas dans la boucle

suffit de le retirer

for (i=0; i<nomsBassins.length; i++)
{
   var col = parseInt(i)+1;
   var BassinsRange = sheet.getRange(1,col);
   BassinsRange.setValue(nomsBassins[i]);
}
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte