Ajout d'une ligne (amélioration d'un script) dans un filtre

Bonjour,

Le script suivant me permet d'ajouter une ligne sur la page NEUF depuis la page SAISIES d'un certain nombre de données. Jusque là tout va bien.

Mon problème :

Dans la page NEUF j'ai des filtres sur mes colonnes et à chaque insert de ligne (via ce script), il m'ajoute cette ligne en dernière position sauf qu'elle se retrouve en dehors de ma zone de filtre.

Donc à chaque nouvelle ligne créée je dois manuellement "supprimer le filtre" puis "recréer le filtre" sur cette page.

La solution serait d'insérer cette ligne non pas en dernière ligne mais en avant dernière position...et je n'ai pas trouvé comment faire.

Si quelqu'un pouvait m'aider ce serait parfait pour moi. Par avance merci.

function enregistrerneuf() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var formulaire = ss.getSheetByName('SAISIES')
  var bdd = ss.getSheetByName('NEUF')
  bdd.appendRow([
    formulaire.getRange('F25').getValue(),
    formulaire.getRange('J25').getValue(),
    formulaire.getRange('L25').getValue(),
    formulaire.getRange('K23').getValue(),
    formulaire.getRange('K24').getValue(),
    formulaire.getRange('F27').getValue(),
    formulaire.getRange('F23').getValue(),
    formulaire.getRange('J23').getValue(),
    formulaire.getRange('F29').getValue(),
    formulaire.getRange('J29').getValue(),
    formulaire.getRange('J30').getValue(),
    formulaire.getRange('J27').getValue(),
    ])
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var formulaire = ss.getSheetByName('SAISIES')
  var ranges = ['F23:F29', 'J23:J29', 'L25']
  for (var i = 0; i < ranges.length; i++) {
    formulaire.getRange(ranges[i]).clearContent()
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('F23').activate();
  }
}

Bonjour, essai "créer une vue filtrée", si utilisation fréquente, tu peux même la nommer pour la retrouver facilement.

creer un vue filtree

Si ça rentre dans tes conditions de filtre elle pourrait s'ajouter, mais pas sur.

Cdlt

Alex

Bonjour,

Merci d'avoir pris du temps pour me donner une piste de réponse mais mon niveau ne me permet pas de comprendre ce que tu me proposes (même si j'ai pris le temps d'essayer !).

Voici le fichier exemple (raccourci) sur lequel je travaille tous les jours, ce sera plus pratique pour comprendre (https://docs.google.com/spreadsheets/d/1JDkeefFIWuGde8P0RZNwtZeeOvRiHUp41ybAuxVRBuM/edit#gid=2290946...)

Fonctionnement du fichier exemple :

1- je remplis des données dans la feuille saisie

2- je clique sur le bouton NEUF ou REPA

3- ça créé une ligne dans la page NEUF ou REPA

4- une fois la ligne créée je vais sur la page correspondante et je copie la formule de la colonne E vers le bas car les lignes sont classées par ordre chronologique

5- comme la ligne créée ne se trouve pas dans la zone de filtre alors je clique sur le menu Données/supprimer le filtre, puis Données/créer un filtre

6- ensuite je fais un tri de mes lignes de A à Z et mon fichier est prêt

Donc ma demande est que vous m'aidiez à créer cette ligne afin qu'elle se retrouve directement comprise dans le filtre de la page, je ferai donc l'économie de l'action n°5

Bonjour,

Votre problématique doit venir de .appendrow() qui insère les data après la zone de filtre, pouvez-vous autoriser l'accès a votre fichier que je jette un oeil afin de régler ceci + il est sans doute possible de trouver une solution pour l'étape 4 aussi.

Bonjour et merci de votre aide.

Le partage est fait

Oups, j'ai oublié de répondre à mon test, ça fonctionne comme énoncé ci-dessus, avec un ARRAYFORMULA pour ne plus avoir à copier la formule en E

Bonjour et merci pour le calcul automatique de la formule en E, ça faisait parti de mes demandes.

Par contre quand tu dis "ça fonctionne comme énoncé ci-dessus" tu voulais dire quoi ? Car pour ma demande principale ça ne fonctionne pas, quand je créé une ligne, elle ne s'intègre pas dans la zone de filtre de la page.

Je viens de faire le test dans l'onglet "NEUF" et "REPA" et ça fonctionne, il ne faut plus filtrer avec l'icone 1(qui est en gris clair) mais l'icone 2 "Vue Filtrée" (qui est en gris foncé)

vue filtree

Bonjour,

Une alternative sinon, serai de trier la plage après chaque ajout de la nouvelle ligne :

function ajoutneuf2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var formulaire = ss.getSheetByName('SAISIES')
  var bdd = ss.getSheetByName('NEUF')
  bdd.appendRow([
    formulaire.getRange('D4').getValue(),
    formulaire.getRange('D6').getValue(),
    formulaire.getRange('D8').getValue(),
    formulaire.getRange('E9').getValue(),
    formulaire.getRange('E10').getValue(),
    formulaire.getRange('D10').getValue(),
    formulaire.getRange('D2').getValue(),
    formulaire.getRange('D12').getValue(),
    ])
  var range = bdd.getRange(2, 1, bdd.getLastRow() - 1, bdd.getLastColumn());
  range.sort({ column: 1, ascending: true });
  effacer();
}

PS : afin d'effacer les données dans ta feuille SAISIES tu as fait un script effacer() autant donc remplacer ces lignes :

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var formulaire = ss.getSheetByName('SAISIES')
  var ranges = ['D2:D12']
  for (var i = 0; i < ranges.length; i++) {
    formulaire.getRange(ranges[i]).clearContent()
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('D2').activate();

par un simple appel à la fonction effacer :

  effacer();

Bonjour,

Désolé pour cette réponse tardive mais je suis débordé au boulot en ce moment. J'ai regardé le post d'Alexander et pour le moment je n'arrive pas au résultat en passant par les vues filtrées car je ne connais pas ce fonctionnement. Je me renseigne ce we et revient vous dire.

Et je n'ai pas encore testé la proposition de PierreLepinay, je reviens ici dès que je peux.

En tout cas merci beaucoup

Encore merci à tous d'avoir cherché des solutions.

Je ne connaissais pas le fonctionnement des vues filtrées, c'est puissant mais je trouve que si techniquement Alexander répond au problème initial, d'un point de vue de la manière dont j'utilise cette page en filtrant sans arrêt le tableau par plein de colonnes différentes, au bout du compte je recréé une nouvelle difficulté que je voulais résoudre à la base.

C'est en testant le script de PierreLepinay (ajoutneuf2) que la solution s'est elle-même imposée. J'ai juste changé

range.sort({ column: 1, ascending: true });

par

range.sort({ column: 5, ascending: true });

Ainsi, avec l'arrayformula, non seulement la ligne se créé dans NEUF avec le calcul du temps mais elle se filtre directement par la colonne 5.

C'est donc impeccable, encore merci à vous tous.

Rechercher des sujets similaires à "ajout ligne amelioration script filtre"