Masquer ligne vide après un tri

Bonjours à tous le forum,

Grâce à Steelson j'ai résolu pas mal de chose sur un fichier partagé lien de la discussion https://forum.excel-pratique.com/sheets/selection-d-une-macro-a-partir-d-une-liste-deroulante-172480...

Le problème actuel est celui-ci: le tri d'une colonne en mode décroissant, puisqu'il n'y a que des nombres le tri devrait afficher en premier le nombre le plus élevé puis les nombres inférieur et laisser les lignes vide en dernier pour ensuite les masquer.

image

les lignes 7 à 43 sont vides elle ont été masquée par facilité pour vous montrer, en somme cela pourrait être bon si j'ai une formule pouvant alors ne masquer les lignes où dans la colonne "R" il n'y a pas de chiffre.

Et pouvoir par la suite démasquer ces ligne pour un autre tri.

function Presence_Total() {
  var spreadsheet = SpreadsheetApp.getActive();

  spreadsheet.getRange('1:1').activate();
  spreadsheet.getActiveRangeList().setBackground('#ffffff');
  spreadsheet.getRange('r1').activate();
  spreadsheet.getActiveRangeList().setBackground('#ffff00');
  spreadsheet.getRange('A5:ad55').activate()
  .sort([{column: 18, descending: false}, {column: 3, ascending: true}, {column: 1, ascending: true}, {column: 2, ascending: true}]);

  // cache les colonnes avant la journée sélectionnée

   spreadsheet.getActiveSheet().hideColumns(5); // n'affiche pas la colonne indiquée
    spreadsheet.getActiveSheet().hideColumns(6); // n'affiche pas la colonne indiquée
      spreadsheet.getActiveSheet().hideColumns(7); // n'affiche pas la colonne indiquée
        spreadsheet.getActiveSheet().hideColumns(8); // n'affiche pas la colonne indiquée
          spreadsheet.getActiveSheet().hideColumns(9); // n'affiche pas la colonne indiquée
            spreadsheet.getActiveSheet().hideColumns(10); // n'affiche pas la colonne indiquée
              spreadsheet.getActiveSheet().hideColumns(11); // n'affiche pas la colonne indiquée
                spreadsheet.getActiveSheet().hideColumns(12); // n'affiche pas la colonne indiquée
                  spreadsheet.getActiveSheet().hideColumns(13); // n'affiche pas la colonne indiquée
                    spreadsheet.getActiveSheet().hideColumns(14); // n'affiche pas la colonne indiquée
                      spreadsheet.getActiveSheet().hideColumns(15); // n'affiche pas la colonne indiquée
                        spreadsheet.getActiveSheet().hideColumns(16); // n'affiche pas la colonne indiquée
                           spreadsheet.getActiveSheet().hideColumns(17); // n'affiche pas la colonne indiquée

// colonne après présence totale

   spreadsheet.getActiveSheet().hideColumns(19); // n'affiche pas la colonne indiquée
    spreadsheet.getActiveSheet().hideColumns(20); // n'affiche pas la colonne indiquée
      spreadsheet.getActiveSheet().hideColumns(21); // n'affiche pas la colonne indiquée
        spreadsheet.getActiveSheet().hideColumns(22); // n'affiche pas la colonne indiquée
          spreadsheet.getActiveSheet().hideColumns(23); // n'affiche pas la colonne indiquée
            spreadsheet.getActiveSheet().hideColumns(24); // n'affiche pas la colonne indiquée
              spreadsheet.getActiveSheet().hideColumns(25); // n'affiche pas la colonne indiquée
                spreadsheet.getActiveSheet().hideColumns(26); // n'affiche pas la colonne indiquée
                  spreadsheet.getActiveSheet().hideColumns(27); // n'affiche pas la colonne indiquée
                    spreadsheet.getActiveSheet().hideColumns(28); // n'affiche pas la colonne indiquée
                      spreadsheet.getActiveSheet().hideColumns(29); // n'affiche pas la colonne indiquée
                        spreadsheet.getActiveSheet().hideColumns(30); // n'affiche pas la colonne indiquée

// fin colonne d'après présence totale
  spreadsheet.getRange('R5').activate();
    };

Merci d'avance pour votre aide

mbell

Bonjour,

je n'ai pas compris,

as-tu un fichier exemple, ce serait plus simple !

Bonsoir Steelson,

oui bien sûr j'avais oublier de mettre le lien : https://docs.google.com/spreadsheets/d/1StuNNzfJ7b_uqTYk3uJEQnMhkHj9rjWJ68Qrbg7-TCY/edit#gid=2316930...

Merci de bien vouloir regarder

Accès refusé !

Bonjour Steelson,

Désolé hier soir voilà ce que j'ai fait:

image

Donc logiquement ti y avait accès dois je faire autre chose pour que tu puisse accéder au fichier?

mbell

ok cela fonctionne, je regarde un peu plus tard

j'ai pris une copie compte tenu de la complexité de la feuille et du code

Déjà, ceci ne fonctionne pas

spreadsheet.getActiveSheet().unhideColumn

il faut écrire

spreadsheet.getActiveSheet().unhideColumn(spreadsheet.getActiveSheet().getRange('A:AD'))

voir la documentation https://developers.google.com/apps-script/reference/spreadsheet/sheet#unhidecolumncolumn

Les activate sont inutiles, n'hésite pas à simplifier le code, cela ralentit au mieux, mais parfois ils peuvent faire des dégâts.

  // sélectionne la colonne présence à ce jour
  spreadsheet.getRange('E5:E55').clear({ contentsOnly: true });

  // active la ligne 1
  spreadsheet.getRange('1:1').setBackground('#ffffff'); // blanc

  // sélectionne la cellule a mettre en couleur
  spreadsheet.getRange('f1').setBackground('#ffff00'); // jaune

ceci est mis 2 fois, c'est redondant

var spreadsheet = SpreadsheetApp.getActive();

cela ne produit pas d'erreur mais nuit à la visibilité


pourquoi y a-t-il u écart de cellules ici ?

  spreadsheet.getRange('s4:s55').copyTo(................., SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); 
  spreadsheet.getRange('s4:s5').copyTo(................, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false); 

re: Steelson,

Comme décrit dans ma présentation je ne suis pas programmeur et je fais de mon mieux même si parfois sa fonctionne tant mieux et d'autre fois non .

Pour te répondre modifie sur une série "D6" par exemple ainsi je pourrais essayer d'adapter pour les autres.

spreadsheet.getRange('s4:s55').copyTo(................., SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

spreadsheet.getRange('s4:s5').copyTo(................, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);

Erreur le deuxième est également à "s55"

spreadsheet.getActiveSheet().unhideColumn(spreadsheet.getActiveSheet().getRange('A:AD'))

je vais corriger.

Je n'ai pas écrit ce code j'ai essayer d'adapter en faisant des enregistrement de macro pour certaine fonction recherché puis j'ai modifier.

C'est vrai qu'il y a des formules redondante mais je ne sais pas faire la différence lorsque je lance la macro dans l'éditeur elle fonctionne sans erreur.

Mais merci quand même pour ton aide.

mbell

Bon ...ton problème de tri c'est normal, dans un tri alphanumérique descendant, l'espace se situe avant les chiffres !

Comment résoudre cela ? la solution la plus simple est de ne pas mettre d'espace mais un 0, si je prends la colonne AA avec laquelle j'ai travaillée, il faudrait mettre comme formule ceci

=IF($A5="";0;IF(COUNTIF($F5:N5;"Présent")=0;0;COUNTIF($F5:N5;"Présent")))

et cela fonctionnera.

Si tu ne veux pas afficher le 0, il faut alors changer le format en 0;-0; et cela fonctionnera

Re: Steelson,

encore une fois merci beaucoup pour ton aide car le résultat est super.

Je vais regarder s'il y a encore une chose ou l'autre à modifier mais je crois qu'avec un fichier comme cela par rapport a avant la fédération sera contente.

mbell

Rechercher des sujets similaires à "masquer ligne vide tri"