Affiche date automatiquement sur 52 Semaines

Désolé, à chaque copie ça me refait la même chose.

Voici la raison

var annees = nomClasseur.split(" ")[2].split("-")

il faut que le nom de la copie ne soit pas Copie de _______

mais respecte la codification initiale, sinon annees devient n'importe quoi !

Ah zut, bon je vais faire une copie sans copie de______

un grand merci Mike, je fais ça demain et je te tiens informé. Bonne soirée

Solution = remplace

var annees = nomClasseur.split(" ")[2].split("-")

par

var annees = nomClasseur.match(/\d+/g)

Génial ! ça fonctionne, c'est même plus fluide, j'ai copier/coller 51 feuilles et le chargement de "mysheetname" et des dates se fait en même temps et en moins de 3 secondes.

Un grand merci pour ton aide, toujours aussi précieuse.

Merci Alexander de m'avoir guidé jusque ici (On vient de se parler par mail).

Bonjour "Stalievitch".
J'aurai besoin de tes services avec un fichier similaire à celui d'Alexander. J'avance bien sur mon fichier mais plus je le développe et plus je me trouve confronté à plusieurs difficultés.
Serais-tu ok pour m'aider?

Partage ton fichier en exposant ton problème.

https://www.sheets-pratique.com/fr/cours/partage

Cdt

Alex

Merci Alexander de m'avoir guidé jusque ici (On vient de se parler par mail).

Bonjour "Stalievitch".
J'aurai besoin de tes services avec un fichier similaire à celui d'Alexander.

Alexander est compétent (je suivrai ce fil si besoin).

Un grand merci.
Je prépare mon fichier, puis le vous le partage.
Je vais faire une copie pour qu'on puisse "jouer".

Encore Merci.

Je vous donne quelques explications.
Je suis gérant d'un magasin et j'ai des étudiants (voir fichier).
J'ai 2 planificateurs qui s'occupent d'établir des horaires.
Les étudiants doivent compléter les souhaits d'horaires minimum 3 semaines avant la date du jour (les semaines avec un signe "rouge" sont bloquées et les étudiants ne savent plus rien ajouter ou modifier).
Je voudrais que les semaines en cours soient affichées et celles qui sont passées soient masquées (pas supprimées). Après 1 an, la nouvelle semaine 1 doit venir écraser la semaine 1 de l'année précédente.
J'ai également placé un bouton "ajouter semaine" mais je voudrais le supprimer et l'automatiser sur 1 an.

Petit problème supplémentaire, la feuille "template" contient le prénom des étudiants mais si j'en ai un nouveau en cours d'année qui commence, je doit l'ajouter sur chaque feuille ce qui devient fastidieux.

ça fait 2 ans que je suis sur ce fichier que j'améliore de jour en jour mais là, je bloque.
J'espère avoir été clair et que je ne suis pas trop exigeant :)
A bientôt.

image

il faudrait a minima le mettre en lecture

Ouppps. Voilà c'est fait.

Merci.

Bonjour,

Je voudrais que les semaines en cours soient affichées et celles qui sont passées soient masquées (pas supprimées).

Pour masquer les semaines passées,

  • Cela se fait directement à l'ouverture du fichier
  • je m'appuie sur la date en J3 de chaque feuille que je compare à aujourd'hui
  • J'ai toutefois ajouté un menu en haut à droite (menu auquel on pourra ajouter les autres fonctions (je ne suis pas fan des boutons)
  • Note bien que certaines années ont 53 semaines
code repris ci-dessous

Petit problème supplémentaire, la feuille "template" contient le prénom des étudiants mais si j'en ai un nouveau en cours d'année qui commence, je doit l'ajouter sur chaque feuille ce qui devient fastidieux.

Il y a plusieurs façons de faire, mais j'ai quelques questions

  1. sur quelles feuilles reporte-t-on le nouvel arrivant ? toutes ou seulement les futures (cela dépend de comment tu vas passer d'une année à l'autre)
  2. doit-on aussi prévoir de retirer des étudiants ?
  3. je suppose qu'on doit ensuite trier les feuilles (ce n'est pas un problème)

nota : mais c'est mon propre avis ... j'avoue que j'évite toujours de créer des feuilles individuelles par mois ou par semaine, je préfère une seule feuille et une pseudo-base de données (tableau où les infos sont renseignées à la queue leu leu) et dans laquelle je vais puiser les infos pour les afficher dans un planning qui se met à jour selon une période de temps (mois ou semaine). L'avantage est également de faire des synthèses sur l'année (ou plus)

Avec l'ajout d'un étudiant

voir ci-dessous
Whaou, tu as fait du super boulot.
  1. sur quelles feuilles reporte-t-on le nouvel arrivant ? toutes ou seulement les futures (cela dépend de comment tu vas passer d'une année à l'autre)
    L'idéal aurait été que l'ajout se fasse sur le 'Template". Ensuite, que cela se copie automatiquement sur les autres pages. J'avais déjà testé avec "IMPORTRANGE" mais les données se décalaient et les souhaits des students ne correspondaient plus.
  2. doit-on aussi prévoir de retirer des étudiants ?
    Oui, certains students arrêtent en cours de route. Encore une fois, via le 'Template' serait le mieux. Quand on retire un student, il se retire sur toutes les autres feuilles.
  3. je suppose qu'on doit ensuite trier les feuilles (ce n'est pas un problème)
    Alors le tri, c'est top. Mais je dois encore vérifier si mes planificateurs ont accès à cette fonction (je teste demain).

    Je vais tester tout ça car je dois encore voir avec les différentes autorisations si ça marche. En effet, j'ai toutes les autorisations, mes planificateurs ont certains accès et les students sont plus limités.

    Encore merci. J'ai encore mille idées mais bon... Top boulot.

Avec la suppression

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('↓ M E N U ↓')
    .addItem('👉 Masquer semaines passées', 'masquer')
    .addItem('👉 Tout afficher', 'toutAfficher')
    .addSeparator()
    .addItem('👉 Ajouter un étudiant', 'ajoutEtudiant')
    .addItem('👉 Supprimer un étudiant', 'suppEtudiant')
    .addToUi();
  masquer();
}
// la comparaison se fait sur la date en J3
function masquer() {
  var doc=SpreadsheetApp.getActiveSpreadsheet()
  var feuilles=doc.getSheets()
  var today = Utilities.formatDate(new Date, "GMT+1", "yyyy-MM-dd") 
  feuilles.forEach(function(feuille){
    if (feuille.getName()!='Template'){
      var d = Utilities.formatDate(feuille.getRange('J3').getValue(), "GMT+1", "yyyy-MM-dd")
      if (!feuille.isSheetHidden() && d<today){feuille.hideSheet()}
    }
  })
}
function toutAfficher(){
  var doc=SpreadsheetApp.getActiveSpreadsheet()
  var feuilles=doc.getSheets()
  feuilles.forEach(function(feuille){
    if (feuille.isSheetHidden()){feuille.showSheet()}
  })
}
function ajoutEtudiant() {
  const nom = Browser.inputBox("Ajout d'un étudiant", 'Entrez le nom :', Browser.Buttons.OK_CANCEL);
  if (nom=='cancel'){return}
  var doc=SpreadsheetApp.getActiveSpreadsheet()
  var feuilles=doc.getSheets()
  msg = ''
  feuilles.forEach(function(feuille){
    var der = feuille.getLastDataRow()
    var liste = feuille.getRange('A5:A'+der).getValues().join().split(',')
    if (liste.indexOf(nom)==-1){
      feuille.getRange('A'+(der+1)).setValue(nom)
      trier(feuille,1,5)
    }
    else {msg+=feuille.getName()+', '}
  })
  if (msg==''){msg = 'Ajout terminé avec succès !'}
  else {msg = '"' + nom + '" déjà présent dans : ' + msg}
  Browser.msgBox(msg)
}
function suppEtudiant() {
  const nom = Browser.inputBox("Ajout d'un étudiant", 'Entrez le nom :', Browser.Buttons.OK_CANCEL);
  if (nom=='cancel'){return}
  var doc=SpreadsheetApp.getActiveSpreadsheet()
  var feuilles=doc.getSheets()
  msg = ''
  feuilles.forEach(function(feuille){
    var der = feuille.getLastDataRow()
    var liste = feuille.getRange('A5:A'+der).getValues().join().split(',')
    if (liste.indexOf(nom)!=-1){
      var ligne = liste.indexOf(nom) + 5
      feuille.getRange('A'+ligne+':K'+ligne).clearContent()
      trier(feuille,1,5)
    }
    else {msg+=feuille.getName()+', '}
  })
  if (msg==''){msg = 'Sppression terminée avec succès !'}
  else {msg = '"' + nom + '" absent dans : ' + msg}
  Browser.msgBox(msg)
}
Object.prototype.getLastDataRow = function(col){
  var lastRow = this.getLastRow();
  if (col == null){col='A'}
  var range = this.getRange(col + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }  
}
function trier(feuille,colonne,depuisLigne){
  var range = feuille.getRange(depuisLigne, 1, feuille.getLastRow() - (depuisLigne-1), feuille.getLastColumn());
  range.sort({column: colonne, ascending: true});
}

Super, je suis admiratif
Je me débrouille un peu mais je voudrais arriver à savoir faire ce que tu fais.

Pour le script qui supprime les semaines passées, il y a un petit bug. La semaine 52 ne s'efface jamais. Il efface bien les semaine 50,51, 1, 2.... mais pas la 52. Je pense que ça vient du fait qu'il y a un décalage entre le système Anglais qui est différent du système français. Je m'explique : au changement d'année, certains pays adopte que la semaine à cheval entre 2021 et 2022 soit la semaine 1 et dans d'autres la semaine 53.
Si tu veux, je peux te donner accès en écriture.

Merci.

Pour le script qui supprime les semaines passées, il y a un petit bug. La semaine 52 ne s'efface jamais. Il efface bien les semaine 50,51, 1, 2.... mais pas la 52. Je pense que ça vient du fait qu'il y a un décalage entre le système Anglais qui est différent du système français.

je suis surpris car à aucun moment je ne tiens compte du n° de semaine, mais uniquement de la valeur dans J3

      var d = Utilities.formatDate(feuille.getRange('J3').getValue(), "GMT+1", "yyyy-MM-dd")
      if (!feuille.isSheetHidden() && d<today){feuille.hideSheet()}

quelle est la valeur dans A2 et J3 de la feuille 52 ?

Bonjour,

@Snake 259

Ta semaine 52 et du 26/12/2022 au 01/01/2023 hors dans le script la comparaison se fait sur la date en J3

Rechercher des sujets similaires à "affiche date automatiquement semaines"