Boite de dialogue date

Bonjour,

J'aimerais avec une boite de dialogue de ce type

image

rentrer dans mon agenda les dates choisies

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

Merci

Bonjour,

La solution la plus simple : va dans outils > créer un formulaire, les données arriveront dans un onglet, o pourra ensuite les reporter sur le planning

Bonjour, merci pour la proposition, on ne peux pas faire comme avec excel une boite de dialogue ?

Si bien sûr, mais c'est tellement plus simple de le faire avec une form qui est faite pour cela ...

Ce n'est pas toujours judicieux de faire "comme excel" car il peut exister des possibilités meilleures et plus simples à mettre en œuvre.

Fais un essai de ton côté, je te ferai la boite de dialogue du mien ... encore que tu trouveras ici le tuto de Sébastien https://www.sheets-pratique.com/fr/codes/sidebar

génial, j'ai vu que tu avais commencé

reste à faire les liste déroulantes

oui mais je ne sais pas comment faire le reste pour intégrer dans le planning

et ce n'est pas une barre latérale

oui mais je ne sais pas comment faire le reste pour intégrer dans le planning

je m'en occupe ... demain

et ce n'est pas une barre latérale

je vais le faire aussi mais c'est un poil plus long

Comme je joue sur les 2 tableaux en même temps, j'ai commencé à remettre au carré

  • le menu
  • et le formulaire en y ajoutant des dates et en changeant le script de validation
image image

je continuerai demain avec l'insertion des données dans le planning

Pour le google form

// ceci est pour traiter les réponses au formulaire "Google Form"
// mettre un déclencheur
function onFormSubmit(e){
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getActiveRange().getRow();
  var column = e.values.length;
  SpreadsheetApp.flush();
  var planning = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Planning')
  var ligne = sheet.getRange(row,column+1).getValue()
  var du = sheet.getRange(row,column+2).getValue()
  var au = sheet.getRange(row,column+3).getValue()
  var motif = sheet.getRange(row,column-1).getValue()
  for (var i=du;i<=au;i++) {planning.getRange(ligne,i).setValue(motif)}
}

il faut

  • compléter les listes déroulantes
    • tu peux supprimer celles sur l'onglet "réponses au formulaire 2"
    • mais les compléter sur le google form
  • mettre un déclencheur sur la fonction comme suit
  • rentrer les données sur le google form
image

pourquoi 2 lignes pour Sébastien ?

Super le menu me convient très bien

compléter les listes déroulantes -> FAIT

tu peux supprimer celles sur l'onglet "réponses au formulaire 2" -> on peut supprimer le formulaire ?

mais les compléter sur le google form -> FAIT

mettre un déclencheur sur la fonction comme suit -> FAIT

rentrer les données sur le google form -> FAIT

tu peux supprimer celles sur l'onglet "réponses au formulaire 2" -> on peut supprimer le formulaire ?

non non, surtout pas, le formulaire déverse dans cert onglet, par contre les validations ne sont pas utiles ici => je viens de le faire

je vais attaquer l'autre formulaire, mais c'est plus complexe ! (pour autant rien à voir avec les userform excel)

Pour le formulaire en boite de dialogue

// ceci est pour traiter les réponses au formulaire "boite de dialogue"
function ajouter(tab) {
  var planning = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Planning')
  var salaries = planning.getRange('B:B').getValues().flat()
  var dates = planning.getRange('15:15').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]) }
}
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))])
}

Il faut compléter là encore les listes déroulantes

    <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="Caroline" >Caroline</option>
    </select>
    <p>Congé</p>
    <select name="motif" id="motif" onchange="changeColor(this);">
      <option value="" disabled selected >Choisir ...</option>
      <option value="RTT" >RTT</option>
      <option value="F" >F</option>
    </select>

et si tu reproduis cela dans un autre fichier, veiller au respect de ta time zone dans appscript.json que l'on peut faire apparaître en cochant la 3ème checkbox dans les paramètres du projet (voir icone engrenage à gauche)

{
  "timeZone": "Europe/Paris",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

Pour la liste déroulante dans quel fichier HTML il faut la coller

Car dans le form.html c'est fait

Je viens de faire un test ça fonctionne Merci beaucoup et j'ai appris encore plein de chose

ok, c'est parfait donc

à l'usage tu me diras quelle est la solution la meilleure entre boite de dialogue et google form et pourquoi

Salut,

Si ce n'est pas trop compliqué à rajouter faire une récurrence personnalisée

recurence2

Merci encore

Comment tu accèdes à cette personnalisation ? C'est un montage photo ? Dans ce cas, il faut que tu ajoutes des questions comme

  • fréquence (en semaines)
  • jusque telle date

ensuite il ne faut pas trop se compliquer le bazar sous peine de ne plus en maîtriser la maintenance


du reste, globalement, je ne procède jamais comme tu le fais,

  • j'enrichis plutôt une base de données,
  • ensuite dans un onglet avec une liste déroulante (semaine ou mois), j'affiche ce qu'il y a dans la base de données
  • l'avantage c'est aussi de faire des synthèses sur le nbre de jours par motif d'absence et salarié à partir de la base de données
Rechercher des sujets similaires à "boite dialogue date"