Filtrer ma collection de jeux vidéos
Bonjour à toutes et à tous,
Je suis collectionneur de jeux vidéos et je travaille actuellement sur un fichier Google Sheet pour référencer ma bibliothèque. Dans le visuel ci-dessous, j'aimerais pouvoir insérer des boutons dans les trois cellules en haut à droite (J'ai, Je n'ai pas, Tous) que lorsque l'on cible dessus cela filtre l'affichage ou non de mes jeux : uniquement ceux que j'ai, uniquement ceux que je n'ai pas et revenir à l'ensemble de la liste.
La particularité de ma présentation (non modifiable, car il y a une surcouche application par dessus le Google Sheet) est qu'un jeu est présenté sur 4 lignes. Voir l'exemple ci-dessous (lignes 4 à 7) :
En revanche, je sais qu'il faut que je me modifie le placement de mes raccourcis (A, B, C, D...) parce que si on filtre un jeu que je n'ai pas et que la lettre est placée devant le raccourci va sauter. Pareil pour le logo de la console.
Si quelqu'un aurait la gentillesse de pouvoir m'écrire le script qui fait le travail dans chacune des trois cellules ça serait top !
Merci infiniment pour votre temps,
Bonne journée à toutes et à tous :)
C'est bon j'ai trouvé la solution, ou plutôt un codeur a trouvé la solution sur un autre site. Il a ajouté un script :
function onEdit(e){
var ss= SpreadsheetApp.getActiveSpreadsheet()
var sheet= ss.getActiveSheet();
if(sheet.getName()=="XBOX"){
var range= sheet.getActiveRange();
if(range.getA1Notation()=="AH1"){
sheet.getRange("AI1").setValue(false);
sheet.getRange("AJ1").setValue(false)
}else if(range.getA1Notation()=="AI1"){
sheet.getRange("AH1").setValue(false)
sheet.getRange("AJ1").setValue(false)
}
else if(range.getA1Notation()=="AJ1"){
sheet.getRange("AH1").setValue(false)
sheet.getRange("AI1").setValue(false)
}
}
}
function hideUnhide() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("XBOX");
var yesoption = sheet.getRange("AH1").getValue();
var nooption = sheet.getRange("AI1").getValue();
var bothoption = sheet.getRange("AJ1").getValue();
if(yesoption==true && nooption ==false && bothoption==false){
refresh(ss,sheet);
hideConditionalRows(ss,sheet,"Non");
SpreadsheetApp.getUi().alert("Voici les jeux présents dans votre collection");
}else if(yesoption==false && nooption ==true && bothoption==false){
refresh(ss,sheet);
hideConditionalRows(ss,sheet,"Oui");
SpreadsheetApp.getUi().alert("Voici les jeux qu'il manque à la collection");
}else if(yesoption==false && nooption ==false && bothoption==true){
refresh(ss,sheet);
SpreadsheetApp.getUi().alert("Voici toute la liste");
}else{
SpreadsheetApp.getUi().alert("Merci de sélectionner une option");
}
}
function hideConditionalRows(ss,sheet,tohide){
var statuses = sheet.getRange("M4:M"+sheet.getLastRow()).getValues().flat();
for(var i=0;i<statuses.length;i++){
if(statuses[i]==tohide){
var index = i+4-1;
sheet.hideRows(index,3);
}
}
}
function refresh(ss,sheet){
for(var i=4;i<=sheet.getLastRow();i++){
try{
sheet.showRows(i);
}catch(e){
Logger.log(e.toString());
}
}
}Voici le résultat :
Bon, je suis bloqué. Plus j'ajoute de lignes à mon fichier, plus le script est lent. Et pour le coup, il a atteint la limite d'exécution des 6 minutes... Il n'y a t-il pas moyen de simplifier le code pour accélérer son traitement? J'ai lu à plusieurs reprises que c'est possible mais j'y connais rien du tout... Aidez-moi s'il vous plaît !
Voici le fichier test en ligne : (lien supprimé)