Mise en forme avec la derniére ligne

Bonjour,

Je voudrais mettre en forme la ou les derniéres lignes validées. Il s'agit d'inclure des variables pour modifier l'enregistrement de macro.

function Macrosanstitre2() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A2:F25').activate();
  spreadsheet.setCurrentCell(spreadsheet.getRange('F25'));
  var banding = spreadsheet.getRange('A1:F24').getBandings()[0];
  banding.setHeaderRowColor('#63d297')
  .setFirstRowColor('#ffffff')
  .setSecondRowColor('#e7f9ef')
  .setFooterRowColor(null);
};

Pour donner çà

image

Merci

Salut, peux-tu expliquer + en détail le fonctionnement attendu, je ne comprends pas.

Salut,

Ok, je veux mettre la mise en forme du tableau à bandes sur la derniére mesure validée par l'administrateur.

Ok, donc, quand l'administrateur fait un choix en colonne "Réponse" il faut que là où il a fait son dernier choix, cette ligne ait un format différent.

Partant du postulat que seul l'admin ait le droit d'écrire sur cette colonne, voici un fichier exemple (dans ce fichier test tout le monde a le droit) :

https://docs.google.com/spreadsheets/d/1hEGmAs9XYzjiL6Va0QpMZlrfv0LByOC8sR4EkOJpe-c/edit?usp=sharing

Et voici le script brut (non documenté) :

function onEdit(e) {
  const sheet = e.source.getActiveSheet();
  const range = e.range;
  const col = range.getColumn();
  const row = range.getRow();
  console.log(col+" "+row)

  if(col == 3){ // dans cet exemple la colonne de réponse est la 3eme, ce number est A MODIIFER avec ton fichier reel
    formatRow(sheet,row)
  }
}

function formatRow(sheet, row) {
  const allBandings = sheet.getBandings();
  allBandings.forEach(banding => banding.remove());
  var range = sheet.getRange(row, 1, 1, sheet.getMaxColumns());
  range.applyRowBanding(SpreadsheetApp.BandingTheme.LIGHT_GREY)
    .setHeaderRowColor('#63d297')
    .setFirstRowColor('#ffffff')
    .setSecondRowColor('#e7f9ef')
    .setFooterRowColor(null);
}

Non, je ne veux pas colorer la ligne sur laquelle je serais. Je me demande ou as-tu vu que je demandais çà ?

L'administrateur sélectionne la liste déroulante validé ou refusé dans la page admin.

Il appuie sur le bouton valider.

Voilà la partie du code qui valide les questions/mesures validées en page questions (Devenue mesures)

 //transfert mesures validés en réponses 
    for (i=2;i <= dernAdmin;i++)    
     {
        if (feuilAdmin.getRange(i,7).getValue() == "Validé") 
        {
          feuilRep.getRange(dernRep ,1).setValue(dernRep); 
          quest = feuilAdmin.getRange(i,3).getValue();  
            // question
          feuilRep.getRange(dernRep,2).setValue(quest);
          feuilRep.getRange(dernRep,2).setWrapStrategy(SpreadsheetApp.WrapStrategy.WRAP); 
            // retour ligne longue 
          feuilRep.getRange(dernRep,3).setDataValidation(SpreadsheetApp.newDataValidation() 
            // liste déroulante pour/contre/NSPP
          .setAllowInvalid(false)
          .requireValueInList(['Pour', 'Contre' , 'Neutre'], true)
          .build());
           dernRep = dernRep + 1 
          //bordures derniere ligne
          feuilRep.getRange((dernRep,1),(dernRep,6)).activate();
          feuilRep.getActiveRangeList().setBorder(true, true, true, true, true, true, '#000000', feuilRep.BorderStyle.SOLID);  
        }
      }
       var spreadsheet = SpreadsheetApp.getActive();
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('reponses'), true);
     //annonce
   SpreadsheetApp.getUi().alert('Transfert des mesures validées effectué.');

La mise en forme que j'avais inclut ici dans un 1er temps pour mettre les bordures, je veux la remplacer par la couleur du tableau à bande, est à

//bordures derniere ligne
feuilRep.getRange((dernRep,1),(dernRep,6)).activate();
feuilRep.getActiveRangeList().setBorder(true, true, true, true, true, true, '#000000', feuilRep.BorderStyle.SOLID);

Mais il faut sélectionner tout le tableau pour mettre les bandes alternées.

Merci

Je voudrais mettre en forme la ou les derniéres lignes validées. Il s'agit d'inclure des variables pour modifier l'enregistrement de macro.

function Macrosanstitre2() {

var spreadsheet = SpreadsheetApp.getActive();

spreadsheet.getRange('A2:F25').activate();

spreadsheet.setCurrentCell(spreadsheet.getRange('F25'));

var banding = spreadsheet.getRange('A1:F24').getBandings()[0];

banding.setHeaderRowColor('#63d297')

.setFirstRowColor('#ffffff')

.setSecondRowColor('#e7f9ef')

.setFooterRowColor(null);

};

> Salut, peux-tu expliquer + en détail le fonctionnement attendu, je ne comprends pas.

Salut,

Ok, je veux mettre la mise en forme du tableau à bandes sur la derniére mesure validée par l'administrateur.

Non, je ne veux pas colorer la ligne sur laquelle je serais. Je me demande ou as-tu vu que je demandais çà ?

Dans tes précédents messages par exemple, le script ne colore pas la ligne où tu es, mais colore la dernière ligne où tu mets une réponse colonne C.

Bref, si maintenant je lis le script que tu as partagé, il semble insérer une ligne contenant plusieurs données dans la feuille "feuilRep".

Ce que tu veux faire c'est appliquer un style a toute la feuille "feuilRep" un fois ta / tes lignes insérées ? Si oui, ajoute cette fonction :

function formatTableau(feuille) {
  var range = feuille.getDataRange();
  var numRows = range.getNumRows();
  var numColumns = range.getNumColumns();
  var headerRange = feuille.getRange(1, 1, 1, numColumns);
  headerRange.setBackground('#63d297'); // Couleur de l'en-tête
  headerRange.setFontColor('#000000'); // Couleur du texte de l'en-tête

  for (var i = 2; i <= numRows; i++) { // itération sur le corp du tableau, à partir de la ligne 2
    var backgroundColor = (i % 2 === 0) ? '#ffffff' : '#e7f9ef'; // Couleurs alternées
    var rowRange = feuille.getRange(i, 1, 1, numColumns);
    rowRange.setBackground(backgroundColor);
  }
}

Puis, dans ta fonction principale, au moment où tu veux formater la feuille (donc après avoir inséré tes lignes), tu l'exécutes comme ceci :

formatTableau(feuilRep);

Merci çà fonctionne bien.

Seulement je pensais que çà mettrait les bordures, mais non. Et avec moi çà passe pas.

// bordures
    for (var i = 2 ; i <= numRows; i++) 
    {
    var border(true, true, true, true, true, true, '#000000', SpreadsheetApp.BorderStyle.SOLID); // bordures
    }

Mais tu vas sûrement trouvé

Merci

J'ai trouvé, en mettant le code de la der,iére ligne dans celui pour les couleurs alternées.

   for (var i = 2; i <= numRows; i++) // itération sur le corp du tableau, à partir de la ligne 2
  { 
    var backgroundColor = (i % 2 === 0) ? '#ffffff' : '#e7f9ef'; // Couleurs alternées
    var rowRange = feuille.getRange(i, 1, 1, numColumns);
    rowRange.setBackground(backgroundColor);
    rowRange.setBorder(true, true, true, true, true, true, '#000000', SpreadsheetApp.BorderStyle.SOLID); // bordures
  }

Fausse joie, j'étais sûrement tombé sur une ligne paire.

function bordures() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A24:C24').activate();
  spreadsheet.getActiveRangeList().setBorder(true, true, true, true, true, true, '#000000', SpreadsheetApp.BorderStyle.SOLID);
};

Quelqu'un pour transformer le chiffre 24 en variable pour les bordures ?

Bonjour,

Tu veux appliquer ton style sur une feuille ou une plage ?

De ce que je lis :

si maintenant je lis le script que tu as partagé, il semble insérer une ligne contenant plusieurs données dans la feuille "feuilRep".

Ce que tu veux faire c'est appliquer un style a toute la feuille "feuilRep" un fois ta / tes lignes insérées ?

Si c'est le cas, il te suffit d'ajouter un .setBorder() au même endroit où tu appliques les couleurs, voici le script modifié en ce sens :

function formatTableau(feuille) {
  var range = feuille.getDataRange();
  var numRows = range.getNumRows();
  var numColumns = range.getNumColumns();
  var headerRange = feuille.getRange(1, 1, 1, numColumns);
  headerRange.setBackground('#63d297'); // Couleur de l'en-tête
  headerRange.setFontColor('#000000'); // Couleur du texte de l'en-tête

  for (var i = 2; i <= numRows; i++) { // itération sur le corp du tableau, à partir de la ligne 2
    var backgroundColor = (i % 2 === 0) ? '#ffffff' : '#e7f9ef'; // Couleurs alternées
    var rowRange = feuille.getRange(i, 1, 1, numColumns);
    rowRange.setBackground(backgroundColor);
    rowRange.setBorder(true, true, true, true, true, true, '#000000', SpreadsheetApp.BorderStyle.SOLID);
  }
}

Merci pour ta réponse.

Mais çà fonctionne pas désolé.

Désolé mais si ça fonctionne

https://docs.google.com/spreadsheets/d/1d6GQ5KB3W0oRVez92zehMm32MdJd5Fs7aGJYktsH2us/edit?usp=sharing

je te laisse tester, tu peux supprimer, ajouter des données, quand tu cliques sur le bouton appliquer format, le tableau va se mettre à jour parfaitement.

Non çà ne bouge pas pour moi, appliquer le format.

image

Normal, tu es en anonyme, il faut être connecté pour exécuter des scripts :

image

étant connecté j'ai cliqué sur le bouton et :

image

et si je supprime plusieurs lignes :

image

Etc... :

image

Ok, c'est bon, j'ai pu voir mon erreur avec ton code: Je n'avais pas vu que j'avais une fonction séparée dans le code.

Merci Mr

Rechercher des sujets similaires à "mise forme derniere ligne"