Macro mise en couleur cellule
Bonjour,
J'ai une macro qui tourne pour la mise en forme d'un fichier et je voulais ajouter des lignes dans mon code pour mettre automatiquement en couleur (orange) les cellules de la colonne K quand le pourcentage est supérieur à 35%.
Je n'y arrive pas et ne veut pas passer par la mise en forme conditionnelle.
Pouvez-vous m'aider ?
Merci
Bonjour,
Quelque chose du genre :
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let colKRange = sheet.getRange(1, 11, sheet.getLastRow(), 1);
let colKValues = colKRange.getValues();
for (i=0;i<colKValues.length; i++) {
if (colKValues[i][0] >= 0.35) {
colKRange.getCell(i + 1, 1).setBackground('orange');
}
}Super ça fonctionne à la perfection !!! Merci beaucoup
J'en profite pour te demander une variante à savoir dans la même idée mais une mise en couleur si la cellule comporte un mot précis
Bien, sûr, voici l'explication du script, que tu puisses ensuite arriver à tes fins en autonomie :
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();On déclare la feuille dans laquelle on souhaite travailler
let colKRange = sheet.getRange(1, 11, sheet.getLastRow(), 1);On stocke dans une variable que j'ai nommé colKRange la plage qui est dans la feuille précédemment déclarée, on peut mettre des range de cette manière : K1:K100 par exemple, mais là j'ai fais avec des adresses dynamiques, voici la structure : (ligne départ, colonne départ, nb de lignes, nb de colonnes) et comment c'est complété :
1 = 1ère ligne
11 = 11ème colonne (soit la colonne K)
sheet.getLastRow() = au lieu de mettre le nombre de ligne totale, (par ex 1000) j'ai mis une méthode qui comptera le nb de lignes de la feuille pour chaque exectuion.
1 = une seule colonne.
let colKValues = colKRange.getValues();on met les données contenues dans cette plage dans une variable, informatiquement c'est une liste, cela ressemble à ça : [[1],[2],[3]]
for (i=0;i<colKValues.length; i++) {c'est une itération, un script qui s'exectue un nombre de fois précis, dans ce cas, le même nombre que de valeurs en colonne K, la valeur i débute de 0 et va augmenter de 1 à chaque itération.
if (colKValues[i][0] >= 0.35) {C'est une condition, le script après le if (....) { se lancera que si la / les conditions entre parenthèses sont remplies.
Dans ce cas, on vérifie les valeurs une à une de la variable colKValues (on les vérifiées une à une grâce à l'itération) et si la valeur est supérieur à 0,35 c'est bon.
colKRange.getCell(i + 1, 1).setBackground('orange');
}C'est le script qui est lancé si la condition est remplie, donc dans ce cas on sélectionne la cellule qui correspond à l'itération (i) et on met son fond en orange.
Donc, si tu veux que ce soit un mot précis, il faut modifier la condition pour ne pas vérifier le la valeur contenue en colKValues[i][0] est supérieur à 0,35 mais si elle comporte un texte, voici un exemple avec le mot wagon :
if (colKValues[i][0].toString().toLowerCase().includes('wagon')) {Dans ce cas je transforme la valeur contenue en colKValues[i][0] en texte grace à toString(), puis je la mets en minuscule avec toLowerCase() puis si elle contient le mot "wagon".
merci de votre aide !!!
Cela fonctionne