CHECKLIST auto qui écrit une/des donnée dans une cellule

Salut,

J'aimerais avoir une sorte de checklist avec exemple (Carl, Hélène, Daniel, Joel)

Chacun de ses nom peuvent être coché ou décoché -> Si cocher elle se retrouve dans la cellule sélectionnée au départ.

Si il y a plusieurs nom de coché j'aimerais qu'ils soit séparé comme ceci (Carl, Hélène, Daniel, Joel)

J'espère avoir été assez clair.

Est-ce que c'est possible!? Merci!

https://docs.google.com/spreadsheets/d/1cqE17uAs9WEEDMSPfpShqDl3l8-fh1L_eMWto2nz7ww/edit?usp=sharing

Bonjour,

On peut imaginer en "side-bar" la liste des noms avec des check-boxes ... je vais faire une maquette

code.gs

function onOpen(e) {
  SpreadsheetApp.getUi()
    .createMenu('🎭NOMS🎭')
    .addItem('Afficher', 'showSidebar')
    .addToUi();
}

function showSidebar(){
  var ui = SpreadsheetApp.getUi();
  var html = HtmlService
    .createTemplateFromFile("index")
    .evaluate();
  html.setTitle("Liste des noms :");
  ui.showSidebar(html);
} 

function mettreNoms(noms) {
  var f = SpreadsheetApp.getActiveSheet();
  var r = f.getActiveRange();
  if (f.getRange(3,r.getColumn(),1,1).getValue()=="NOTIFICATION"){r.setValue(noms);}
}

et index.html

<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  <style>
    body{margin:12px;}
  </style>
</head>

<body>
  <p>Votre choix </p>
  <form>
    <input type="checkbox" name="coche" value="Carl" />Carl<br>
    <input type="checkbox" name="coche" value="Hélène" />Hélène<br>
    <input type="checkbox" name="coche" value="Daniel" />Daniel<br>
    <input type="checkbox" name="coche" value="Thomas" />Thomas<br>
  </form>

  <br>
  <div id="lastButtonBlock" class="block">
    <button onclick="myFunction()" class ="action button actionButton" > VALIDER </button>
    <button onclick="google.script.host.close()" class ="create deleteButton actionButton" > Fermer la liste </button>
  </div>
  <br>

  <div class="sidebar bottom">
    <span class="gray">Mike Steelson en 2021</span>
  </div>

<script>
function myFunction() {
  var noms = document.forms[0];
  var txt = "";
  for (var i = 0; i < noms.length; i++) {
    if (noms[i].checked) {
      txt = txt + noms[i].value + ',' ; 
    }
  }
  //alert(txt.substring(0,txt.length-1))
  if (txt!='') {google.script.run.mettreNoms(txt.substring(0,txt.length-1))}
  for (i=0; i < noms.length; i++){
    if(noms[i].type == 'checkbox') { 
      noms[i].checked = false
    };
  }
};
</script>

</body>
</html>

prends une copie du fichier https://docs.google.com/spreadsheets/d/1hsVqMfPk_xFEDGuyiVGxqvWFNzcrWBEOFMke07lkXxQ/copy

je vais essayer de mettre les noms dans un onglet spécifique pour ne pas avoir à aller dans le fichier index

Salut,

Wow merci ça marche parfaitement.

Je vais essayer de comprendre comment ça fonctionne maintenant

Merci!

J'y ai maintenant ajouté un onglet avec les noms dans un onglet.

Salut,

Parfait!

Entk c'est vraiment plus compliqué que vba avec Excel, du moins pour moi haha!

Pour pousser encore plus loin, est-ce que ça serait possible que tout les noms cocher est une notification par mail 1 journée à l'avance par rapport à la date de notification, sans passer par Excel, comme je m'attendais à faire.

no problem ! je vais ajouter les adresses email en face des noms (je vais le faire d'ici demain matin)

l'avantage ici, c'est qu'on ne sera pas obligé d'ouvrir l fichier pour envoyer les mails, tu peux les programmer à l'heure que tu veux

ce n'est pas plus complexe que le vba, mais ici on est dans un cas où il y a un script mais aussi une page html, et les 2 doivent se communiquer des infos !

J'en suis à identifier les personnes concernées, voir onglet NOTIF

=iferror(arrayformula(unique(trim(flatten(split(query({indirect(B1&"!B:D");indirect(B1&"!E:G");indirect(B1&"!H:J");indirect(B1&"!K:M");indirect(B1&"!N:P")},"select Col3 where Col1 = DATE '"&TEXT(A1,"yyyy-MM-dd")&"' ",0),","))))),"")

que veux-tu indiquer dans le mail ? y aura-t-il une indication des colonnes C, F, I etc. qui sont aujourd'hui vides ?

J'aimerais avoir

  • Salut, "la personne en notification"
  • "les indications (qui seront rempli)"

Ensuite je pense que ça va être tout, je vais surement pouvoir me débrouiller pour la suite, en voyant de quel façon tu procède.

Merci de prendre tout ce temps pour ce projet!

Les indications sont celles des colonnes C, F, I etc. ? Si oui, il va falloir alors modifier les formules ci-dessus.

Sans réponse, je considère donc qu'en effet les indications à porter sur la mail sont celles des colonnes indiquées ci-dessus

Voici un script

function notifier(){
  // lendemain
  var cel = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('NOTIF').getRange('C1').getValue();
  var mois = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('NOTIF').getRange('B1').getValue();
  // sauvegarde des noms et emails dans un array
  var f = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('NOMS');
  var noms = f.getRange(2,1,f.getLastRow()-1,2).getValues();
  // sauvegarde des données du jour dans un array
  var f = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(mois);
  var r = f.getRange(cel)
  var data = f.getRange(r.getRow(),r.getColumn()+1,5,2).getValues();
  // construction des données de base qui, quoi, quand, email
  for (var i=0;i<data.length;i++){
    if (data[i][0]!=''){
      var liste = data[i][1].split(',');
      for (var n=0;n<liste.length;n++){
        for (var x=0;x<noms.length;x++){
          if(noms[x][0]==liste[n].trim()){
            var qui = noms[x][0]
            var quoi =data[i][0]
            var email = noms[x][1]
            var quand = Utilities.formatDate(r.getValue(), "GMT-5", "EEE dd/MM/yyyy hh:mm a") // AM/PM
            Logger.log(qui + ' ' + email + ' ' + quoi + ' ' + quand)
            GmailApp.sendEmail(email, 'Notification', 'Bonjour ' + qui + '\n' + quoi + '\n' + quand)
          }
        }
      }
    }
  }
}
  • nécessite une feuille NOTIF avec en A1 la date de demain, en B1 le mois considéré (j'ai fait une table car ma feuille me donnait les mois en anglais, attention j'y ai mis les accents !), en C1 la première cellule
  • j'ai eu pas mal de difficultés au départ avec ta structure d feuille mensuelle que j'ai donc retouchée avant de trouver une solution, donc reprends ta feuille d'origine maintenant
  • si c'est ok, tu peux mettre un trigger quotidien à l'hure que tu souhaites, même fichier fermé les mails devraient partir (vérifie cependant que la date se remet bien à jour fichier fermé sinon je la mettrai dans la macro)

Salut,

Sans réponse, je considère donc qu'en effet les indications à porter sur la mail sont celles des colonnes indiquées ci-dessus

En effet! Désolé à l'heure que tu m'as répondu je venais juste de finir de travailler.

si c'est ok, tu peux mettre un trigger quotidien à l'hure que tu souhaites, même fichier fermé les mails devraient partir (vérifie cependant que la date se remet bien à jour fichier fermé sinon je la mettrai dans la macro)

Le fichier sera ouvert au moins une fois le matin, même que plusieurs personnes s'en servira.

nécessite une feuille NOTIF avec en A1 la date de demain, en B1 le mois considéré (j'ai fait une table car ma feuille me donnait les mois en anglais, attention j'y ai mis les accents !), en C1 la première cellule

j'ai eu pas mal de difficultés au départ avec ta structure d feuille mensuelle que j'ai donc retouchée avant de trouver une solution, donc reprends ta feuille d'origine maintenant

Ça fonctionne parfaitement. Un grand merci!

Je vais laisser le sujet ouvert au cas ou.

Bonjour,

J'ai créer une variable date mais je n'ai pas trouver comment l'afficher au format "yyyy/mm/jj"

var date = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('NOTIF').getRange('A1').getValue();

Ou bien, est-ce que c'est possible de rajouter un jour (+1) à la variable "quand" ?

var quand = Utilities.formatDate(r.getValue(), "GMT-5", "EEE dd/MM/yyyy hh:mm a") // AM/PM

La date s'affiche comme ceci dans le mail -> Fri Apr 16 2021 00:00:00 GMT-0400 (heure d’été de l’Est)

J'aimerais avoir la date d'aujourd'hui +1 en variable comme ça je pourrais la rajouter dans le mail.

Merci!

essaie comme ceci

var quand = Utilities.formatDate(new Date()+1, "GMT-5", "EEE dd/MM/yyyy hh:mm a") // AM/PM

Bonjour,

est-ce ok avec ceci

N'oublie pas de clore ce fil de discussion en cliquant sur

Bonjour,

Exception: Les paramètres (String,String,String) ne correspondent pas à la signature de la méthode "Utilities.formatDate".

J'ai ce message d'erreur avec

var quand = Utilities.formatDate(new Date()+1, "GMT-5", "EEE dd/MM/yyyy hh:mm a") // AM/PM

correction

  var maintenant = new Date().getTime();
  var quand = Utilities.formatDate(new Date(maintenant + 86400000), "GMT-5", "EEE dd/MM/yyyy hh:mm a") // AM/PM

Ça fonctionne!

Maintenant mon boss aimerait qu'il puisse choisir une date à laquelle il serait notifié.

Est-ce que ce serais beaucoup compliqué pour toi de faire cette modification?

Tu pourrais utiliser les dates qui sont marquer dans les colonnes "date de notification"

Je te remercie d'avance...!

pas de soucis, je te fais cela ce soir ...

Rechercher des sujets similaires à "checklist auto qui ecrit donnee"