Lire résultat cellule dans un script

bonjour,

comment faire pour lire le résultat et non la formule dans la cellule C3 ? pour ce script

Merci pour vos conseil.

function onEdit(event){
  var feuille = event.source.getActiveSheet();
  var cellule = event.source.getActiveRange();
  if (feuille.getName()=='Planning' && cellule.getA1Notation()=='C3'){
    feuille.unhideColumn(feuille.getRange('D4:ADW4'))
    feuille.hideColumns(4, (cellule.getValue()-1)*60)
  }
}

Bonjour,

.getValue() permet de récupérer la valeur, dans le format détécté (string, number, bool, date)

.getDisplayValue() permet de récupérer la valeur affichée mais attention, en texte, il faut donc convertir string > number en amont, voici comment tu pourrais modifier ton script :

function onEdit(event) {
  var feuille = event.source.getActiveSheet();
  var cellule = event.source.getActiveRange();
  if (feuille.getName() === 'Planning' && cellule.getA1Notation() === 'C3') {
    var valeur = parseFloat(cellule.getDisplayValue());
    feuille.unhideColumn(feuille.getRange('D4:ADW4'));
    feuille.hideColumns(4, ((valeur - 1) * 60));
  }
}

Super merci pour cette info je début, bonne journée

Rebonjour, j'aimerais récupérer les donnés que je saisis dans ce script dans l'onglet Bdd du fichier sheet, pouvez vous me dire comment faire ?

Voici le fichier

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

Merci pour le code ça fonctionne.

cal3

Bonjour,

Vous souhaitez que les données rentrées dans le formulaire "Ajouter Congé" s'ajoutent à votre onglet BDD ?

Bonjour,

Oui c'est ça pour l'instant ça remplis le planning mais pas la BDD, c'est du code que j'ai adapté, mais je suis limité merci déjà de me lire et de répondre.

J'ai trouvé ça de STEELSON qui à fait un super boulot mais pour l'adapter

https://www.sheets-pratique.com/fr/telechargements/outils-de-gestion/automatiser-formulaire-sheets-n...

Bonjour, Pierre

Voilà le form.html que j'ai modifié pour les cases à cocher mais il fonctionne plus ???

<!DOCTYPE html>
<html>

<head>
  <?!= rapatrier('css') ?>
</head>
<script>

    function changeColor(s) {
      s.style.color = "#444";
    }

</script>

<body>

  <form>
     </select>
    <p>NOM</p>
    <select name="nom" id="nom" onchange="changeColor(this);">
      <option value="" disabled selected >Choisir ...</option>
      <option value="Sébastien" >Sébastien</option>
      <option value="Yannick" >Yannick</option>
      <option value="Jean Louis" >Jean Louis</option>
      <option value="Akim" >Akim</option>
      <option value="Tony" >Tony</option>
      <option value="Farid" >Farid</option>
      <option value="Florence" >Florence</option>
      <option value="Jean Paul" >Jean Paul</option>
      <option value="Laurent" >Laurent</option>
      <option value="Marie" >Marie</option>
      <option value="Jean-Marie" >Jean-Marie</option>
      <option value="Antony" >Antony</option>
      <option value="Patrice" >Patrice</option>
      <option value="Yasmina" >Yasmina</option>
      <option value="Céline " >Céline </option>
      <option value="Terence" >Terence</option>
      <option value="Sullivan" >Sullivan</option>
      <option value="Gaëtan" >Gaëtan</option>
      <option value="Geoffrey" >Geoffrey</option>
      <option value="Olivier" >Olivier</option>
      <option value="Abdellah" >Abdellah</option>
       <option value="Ludovic" >Ludovic</option>
        <option value="Baptiste" >Baptiste</option>

    </select>
    <p>Type de Congés</p>
    <select name="motif" id="motif" onchange="changeColor(this);">
      <option value="" disabled selected >Choisir ...</option>
      <option value="RTT" >RTT</option>
      <option value="C" >C</option>
      <option value="A" >A</option>
      <option value="JNT" >JNT</option>
      <option value="JNT M" >JNT M</option>
      <option value="JNT AM" >JNT AM</option>
      <option value="F" >F</option>
      <option value="CSS" >F</option>
    </select>
    <p>DEBUT</p>
    <input type="date" name="début" value="" onchange="changeColor(this);">
    <p>FIN</p>
    <input type="date" name="fin" value="" onchange="changeColor(this);">
    <br>

    <input type="checkbox" id="case1" name="caseACocher" onchange="updateFrequency()">
    <label for="case1">1 fois par mois</label><br><br>
        <input type="checkbox" id="case2" name="caseACocher" onchange="updateFrequency()">
    <label for="case1">2 fois par mois</label><br><br>
        <input type="checkbox" id="case3" name="caseACocher" onchange="updateFrequency()">
    <label for="case1">3 fois par mois</label><br><br>
        <input type="checkbox" id="case4" name="caseACocher" onchange="updateFrequency()">
    <label for="case1">4 fois par mois</label><br><br>

    <input type="button" value="Ajouter" onclick="ajouter()">
    <br>
    <span class="annuler" onclick="google.script.host.close()">Annuler</span>
  </form>
  <script>
        function updateFrequency() {
      var checkBox = document.getElementById("case1");
      var frequency = checkBox.checked ? "1W" : ""; // Si la case est cochée, mettre "1W", sinon laisser vide
      var checkBox = document.getElementById("case2");
      var frequency = checkBox.checked ? "2W" : ""; // Si la case est cochée, mettre "2W", sinon laisser vide
      var checkBox = document.getElementById("case3");
      var frequency = checkBox.checked ? "3W" : ""; // Si la case est cochée, mettre "3W", sinon laisser vide
      var checkBox = document.getElementById("case4");
      var frequency = checkBox.checked ? "4W" : ""; // Si la case est cochée, mettre "4W", sinon laisser vide
      document.getElementById("motif").value = frequency;

    function ajouter() {
      var donnees = document.forms[0]
      var tab = []
      for (var i=0;i<donnees.length;i++){
        if (donnees[i].type != "button"){
          tab.push(donnees[i].value)
        }
      }
      google.script.run.ajouter(tab);

      document.forms[0].reset()

      google.script.host.close();
    }
  </script>
</body>

</html>

Bonjour,

J'ai été jeter un oeil + le script fonctionne toujours bel et bien pour l'onglet planning, j'ai du coup ajouter quelques lignes afin que les informations soient aussi ajoutées à l'onglet Bdd, ceci dans ta fonction ajouter(tab)

Voici mes rajouts :

...
  var bdd = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Bdd');
  var bddLastRow = bdd.getLastRow()+1;
...
  bdd.getRange(bddLastRow,3).setValue(tab[0]);
  bdd.getRange(bddLastRow,4).setValue(tab[2]);
  bdd.getRange(bddLastRow,5).setValue(tab[3]);
  bdd.getRange(bddLastRow,10).setValue(tab[1]);

Bonjour, Pierre

comment modifier ce script pour récupérer le mail et id_s qui correspond au salarier qui est en colonne H de la feuille Cfg

et le l'écrire dans la feuille bdd en colonne C.

Merci ça fonctionne le code que tu m'a donné super

Bonjour j'ai bien avancé dans mon script grâce à Chat GPT mais il me reste les jours ouvrés à intégrer dans Bdd

voici le script si tu pouvais me dire pourquoi ça fonctionne pas :

function formulaire3() {
  const html = HtmlService
    .createTemplateFromFile('form')
    .evaluate()
    .setWidth(300)
    .setHeight(485);
  SpreadsheetApp.getUi().showModelessDialog(html, 'Ajouter Congé');
}

// permet d'inclure dans les formulaires un autre fichier html, css.html en l'occurrence
function rapatrier(filename){
  return HtmlService.createHtmlOutputFromFile(filename).getContent();
}

function ajouter(tab) {
  console.log(tab[0])
  var planning = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Planning');
  var bdd = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Bdd');
  var cfg = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Cfg'); // Ajout de la feuille Cfg
  var bddLastRow = bdd.getLastRow()+1;
  var salaries = planning.getRange('B:B').getValues().flat();
  var dates = planning.getRange('4:4').getDisplayValues().flat();
  var ligne = salaries.indexOf(tab[0]) + 1;
  var debut = Utilities.formatDate(new Date(tab[2]), Session.getScriptTimeZone(), "dd MMM");
  var du = dates.indexOf(us2fr(debut)) + 1;
  var fin = Utilities.formatDate(new Date(tab[3]), Session.getScriptTimeZone(), "dd MMM");
  var au = dates.indexOf(us2fr(fin)) + 1;
  if (au == 0) { au = du };
  if (du == 0 || ligne == 0) { return };
  for (var i = du; i <= au; i++) { planning.getRange(ligne, i).setValue(tab[1]) };

  // Recherche de l'ID_S et de l'e-mail correspondant dans la feuille Cfg
  var nomSalarie = tab[0];
  var cfgData = cfg.getRange('F:H').getValues(); // Modification de la plage pour inclure la colonne F
  for (var j = 0; j < cfgData.length; j++) {
    if (cfgData[j][1] == nomSalarie) { // Vérification du nom du salarié dans la colonne H (précédemment colonne G)
      var idS = cfgData[j][0]; // Récupération de l'ID_S depuis la colonne F
      var mail = cfgData[j][2]; // Récupération de l'e-mail depuis la colonne H
      break;
    }
  }

  bdd.getRange(bddLastRow,2).setValue(idS); // Écriture de l'ID_S dans la colonne B de la feuille Bdd
  bdd.getRange(bddLastRow,3).setValue(mail); // Écriture de l'e-mail dans la colonne C de la feuille Bdd
  bdd.getRange(bddLastRow,4).setValue(tab[0]);
  bdd.getRange(bddLastRow,5).setValue(tab[2]);
  bdd.getRange(bddLastRow,6).setValue(tab[3]);
  bdd.getRange(bddLastRow,11).setValue(tab[1]);
}

function us2fr(date) {
  moisUS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
  moisFR = ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.']
  return date.replace(date.substring(3), moisFR[moisUS.indexOf(date.substring(3))])
}

function onFormSubmit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Bdd');
  var values = e.values; // Récupérer les valeurs soumises
  var range = sheet.getRange(sheet.getLastRow() + 1, 1, 1, values.length); // Sélectionner la prochaine ligne vide
  range.setValues([values]); // Écrire les valeurs dans la feuille

  var planning = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Planning');
  var ligne = sheet.getRange(sheet.getLastRow(), 1).getRow();
  var debut = new Date(values[3]);
  var fin = new Date(values[4]);
  var motif = values[10];

  for (var i = debut.getDate(); i <= fin.getDate(); i++) {
    planning.getRange(ligne, i + 7).setValue(motif);
  }
}

Merci d'avance bonne journée

Bonjour, voici mon script encore modifié :

function formulaire3() {
  const html = HtmlService
    .createTemplateFromFile('form')
    .evaluate()
    .setWidth(300)
    .setHeight(485);
  SpreadsheetApp.getUi().showModelessDialog(html, 'Ajouter Congé');
}
function getPrenoms() {
  var cfg = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Cfg');
  var prenoms = cfg.getRange('G2:G30').getValues().flat().filter(String);
  return prenoms;
}
function getTypeConges() {
  var cfg = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Cfg');
  var Typeconges = cfg.getRange('D2:D30').getValues().flat().filter(String);
  return Typeconges;
}
// permet d'inclure dans les formulaires un autre fichier html, css.html en l'occurrence
function rapatrier(filename){
  return HtmlService.createHtmlOutputFromFile(filename).getContent();
}

function ajouter(tab) {
  console.log(tab[0])
  var planning = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Planning');
  var bdd = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Bdd');
  var cfg = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Cfg'); // Ajout de la feuille Cfg
  var bddLastRow = bdd.getLastRow()+1;
  var salaries = planning.getRange('B:B').getValues().flat();
  var dates = planning.getRange('4:4').getDisplayValues().flat();
  var ligne = salaries.indexOf(tab[0]) + 1;
  var debut = Utilities.formatDate(new Date(tab[2]), Session.getScriptTimeZone(), "dd MMM");
  var du = dates.indexOf(us2fr(debut)) + 1;
  var fin = Utilities.formatDate(new Date(tab[3]), Session.getScriptTimeZone(), "dd MMM");
  var au = dates.indexOf(us2fr(fin)) + 1;
  if (au == 0) { au = du };
  if (du == 0 || ligne == 0) { return };

  var joursFeries = cfg.getRange('B23:B34').getValues().flat().filter(String).map(function(dateString) {
    return new Date(dateString);
  });

  var nbJoursOuvres = calculerNombreJoursOuvres(new Date(tab[2]), new Date(tab[3]), joursFeries);
  if (nbJoursOuvres == 0 || ligne == 0) { return };

  // Écrire les valeurs dans la plage de cellules à partir de la colonne correspondant à la date 'du'
  for (var i = du; i <= au; i++) { 
    planning.getRange(ligne, i).setValue(tab[1]) 
  };

  // Recherche de l'ID_S et de l'e-mail correspondant dans la feuille Cfg
  var nomSalarie = tab[0];
  var cfgData = cfg.getRange('F:H').getValues(); // Modification de la plage pour inclure la colonne F
  for (var j = 0; j < cfgData.length; j++) {
    if (cfgData[j][1] == nomSalarie) { // Vérification du nom du salarié dans la colonne H (précédemment colonne G)
      var idS = cfgData[j][0]; // Récupération de l'ID_S depuis la colonne F
      var mail = cfgData[j][2]; // Récupération de l'e-mail depuis la colonne H
      break;
    }
  }

  bdd.getRange(bddLastRow,2).setValue(idS); // Écriture de l'ID_S dans la colonne B de la feuille Bdd
  bdd.getRange(bddLastRow,3).setValue(mail); // Écriture de l'e-mail dans la colonne C de la feuille Bdd
  bdd.getRange(bddLastRow,4).setValue(tab[0]);
  bdd.getRange(bddLastRow,5).setValue(tab[2]);
  bdd.getRange(bddLastRow,6).setValue(tab[3]);
  bdd.getRange(bddLastRow,11).setValue(tab[1]);
  bdd.getRange(bddLastRow, 9).setValue(nbJoursOuvres);

bdd.getRange(bddLastRow, 10).setValue(tab[4] ? "1W" : ""); // Valeur de la première case à cocher
bdd.getRange(bddLastRow , 10).setValue(tab[5] ? "2W" : ""); // Valeur de la deuxième case à cocher
bdd.getRange(bddLastRow , 10).setValue(tab[6] ? "3W" : ""); // Valeur de la troisième case à cocher
bdd.getRange(bddLastRow , 10).setValue(tab[7] ? "4W" : ""); // Valeur de la quatrième case à cocher

function us2fr(date) {
  moisUS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
  moisFR = ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.']
  return date.replace(date.substring(3), moisFR[moisUS.indexOf(date.substring(3))])
}

function onFormSubmit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Bdd');
  var values = e.values; // Récupérer les valeurs soumises
  var range = sheet.getRange(sheet.getLastRow() + 1, 1, 1, values.length); // Sélectionner la prochaine ligne vide
  range.setValues([values]); // Écrire les valeurs dans la feuille

  var planning = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Planning');
  var ligne = sheet.getRange(sheet.getLastRow(), 1).getRow();
  var debut = new Date(values[3]);
  var fin = new Date(values[4]);
  var motif = values[10];

  for (var i = debut.getDate(); i <= fin.getDate(); i++) {
    planning.getRange(ligne, i + 7).setValue(motif);
  }
}

function calculerNombreJoursOuvres(debut, fin, joursFeries) {
  var joursOuvres = 0;
  var currentDate = new Date(debut);
  var endDate = new Date(fin);

  while (currentDate <= endDate) {
    var jourSemaine = currentDate.getDay();
    if (jourSemaine != 0 && jourSemaine != 6 && !estJourFerie(currentDate, joursFeries)) {
      joursOuvres++;
    }
    currentDate.setDate(currentDate.getDate() + 1);
  }

  return joursOuvres;
}

function estJourFerie(date, joursFeries) {
  var jourFerie = false;
  for (var i = 0; i < joursFeries.length; i++) {
    if (date.getFullYear() === joursFeries[i].getFullYear() &&
        date.getMonth() === joursFeries[i].getMonth() &&
        date.getDate() === joursFeries[i].getDate()) {
      jourFerie = true;
      break;
    }
  }
  return jourFerie;
}}

je n'arrive pas à comprendre comment fonctionne les "cases à cocher" je vais chercher

Bonjour, isChecked() renvoi true / false sur une variable contenant une cellule où il y a une case.

Par exemple :

var celluleCase = sheet.getRange('A1');
if(celluleCase.isChecked()) {
  // faire quelque chose si la cellule est cochée 
}

Dans cet exemple j'ai testé une cellule, mais il est bien sur possible de tester une plage entière avec forEach(), une boucle for/while.

Rechercher des sujets similaires à "lire resultat script"