Automatisation de fonctions triage sur GoogleSheet
Bonjour,
Je découvre Google Sheets et essaye de me faire mon petit tableau en ajoutant des fonctions automatisées pour simplifier la lecture et la mise à jour de celui-ci.
Je vais d'abord vous montrer un tableau d'exemple
Un tableau de base avec divers évènements se déroulant sur une journée ou plus.
Je souhaite appliquer le tri suivant:
- Avoir en priorité le statut "En cours", puis "A prévoir", puis "Terminé".
- Avoir ensuite en priorité un classement chronologique de la colonne D
- Et enfin avoir en priorité un classement chronologique de la colonne E.
Ce qui doit normalement donner ceci
En plus de ceci, j'aimerai que cela soit automatisé de telle manière que lorsque j'ouvre le google sheet, il fait un tri, en fonction de la date du jour (du coup, mise à jour à chaque connexion). Et, cerise sur le gâteau, j'aimerai que le statut se mette automatiquement, en fonction de la date du jour et des informations renseignées (j'aimerai que seules les colonnes A, B, D et E soient ouvertes à l'édition et verrouiller la colonne C)
Ce qui aboutirait le lendemain à ce tableau:
Un évènement ne peut passer en statut "Terminé" que lorsque sa date de fin est antérieure à la date du jour.
Et aussi, j'aimerai qu'à chaque nouvelle entrée que j'inscris dans le tableau, celle-ci soit triée et rangée à l'emplacement où elle devrait se trouver (pas besoin de chercher l'endroit exact moi-même, je vais juste en dernière ligne et ajoute une entrée qui est automatiquement retriée par le macro ou script)
J'ai essayé de tripoter et chercher sur le net des solutions, dans des forums, mais je n'ai pas réussi à trouver mon bonheur (surtout que certaines réponses dataient parfois d'il y 6-7 ans... ça a un peu changé entre temps.). Alors si l'un d'entre vous à une solution, je suis preneur ! Ca m'évitera de tout faire à la mano !
Merci pour m'avoir lu, et tenter de m'aider
Bonne journée à tous :)
Bonjour,
Pour mettre à jour automatiquement ton statut, tu peux utiliser ça :
=map(D2:D100;E2:E100;LAMBDA(m;n;if(AND(m<>"";n<>"");if(and(m<=today();n>=today());"En cours";if(n>TODAY();"À prévoir";"Terminé"));"")))https://docs.google.com/spreadsheets/d/1boY4Y23AEvLgALvVVCe0gPZa9BvTwaf9SM0eH6SyBu4/edit?usp=sharing
Pour le tri, il faut passer par un script avec un déclencheur.
Peut-être que Pierre sera inspiré ???
Cordialement,
Fil.
Salut @Filoche
Ça se fait avec un script, je l'ai ajouté à ton fichier test.
Il suffit ensuite d'aller dans le menu Apps Script à droite dans la section "Déclencheurs" (c'est le logo en forme de réveil) puis ajouter un déclencheur, au choix à l'ouverture ou bien quotidien.
Voici pour info le script :
function trierTableau() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var plage = sheet.getRange('A2:E'); // plage des données à trier
var data = plage.getValues().filter(row => row.join('') !== '');
var statusOrder = { "En cours": 0, "À prévoir": 1, "Terminé": 2 }; // liste des status et leur ordre
data.sort((a, b) => {
var status = statusOrder[a[2]] - statusOrder[b[2]];
if (status !== 0) return status;
var date = new Date(a[3]) - new Date(b[3]);
if (date !== 0) return date;
return new Date(a[4]) - new Date(b[4]);
});
sheet.getRange(2, 1, data.length, data[0].length).setValues(data);
sheet.getRange('C2:C').clearContent();
sheet.getRange('C2').setFormula('=MAP(D2:D100;E2:E100;LAMBDA(m;n;IF(AND(m<>"";n<>"");IF(AND(m<=TODAY();n>=TODAY());"En cours";IF(n>TODAY();"À prévoir";"Terminé"));"")))'); // formule qui applique le status
}