Mise en forme conditionnelle en script
Bonjour à tous,
Je fais appel à vous car j'ai besoin d'effectuer une mise en forme conditionnelle en fonction de texte, tout cela en script.
Par exemple, dans ma cellule A2:
- Si le texte COMMENCE par XF, BF, EF, GF, FF, LF, VF alors je veux que la cellule soit de couleur bleue
- Si le texte CONTIENT FQ, GF13, FC11alors je veux que la cellule soit de couleur verte
J'ai d'autres conditions, mais ces deux-là sont les principales.
Pouvez-vous m'indiquer quelles sont les commandes app script que je dois utiliser pour cela?
Je vous remercie d'avance :-)
Bonjour,
Voir la bible sur les "rule"
https://developers.google.com/apps-script/reference/spreadsheet/conditional-format-rule-builder
Bonjour,
En A2 (texte en A1)
=SI(REGEXMATCH(A1;"^XF")=VRAI;1;SI(REGEXMATCH(A1;"^BF")=VRAI;1;SI(REGEXMATCH(A1;"^EF")=VRAI;1;SI(REGEXMATCH(A1;"^FF")=VRAI;1;SI(REGEXMATCH(A1;"^LF")=VRAI;1;SI(REGEXMATCH(A1;"^VF")=VRAI;1;SI(REGEXMATCH(A1;"FQ")=VRAI;2;SI(REGEXMATCH(A1;"GF13")=VRAI;2;SI(REGEXMATCH(A1;"FC11")=VRAI;2;0)))))))))
App script
function couleur(cellule) {
if(cellule === '1') {
document.cellule.style.color = "blue";
} else if(cellule === '2') {
document.cellule.style.color = "green";
} //Les document.cellule sont une traduction de document.getElementById(id).style.color en html
}
//Exécution de la fonction
couleur(A2);
Je te conseille de tester, si sa marche pas dis le.
Bonne Journée
Voilà un exemple d'une condition commençant par p
// Si valeur commence par p --> Couleur bleue
var ruleS1DP = SpreadsheetApp.newConditionalFormatRule()
.whenFormulaSatisfied('=COUNTIF($I2;"p*")>0') // Définir la colonne servant de condition
.setBackground("#0000ff")
.setRanges([rangeS1])
.build();
var rulesS1DP = sheet.getConditionalFormatRules();
rulesS1DP.push(ruleS1DP);
sheet.setConditionalFormatRules(rulesS1DP);
Merci à vous tous pour les retours! C'est top et j'ai plusieurs possibilités!
J'ai fait ceci:
function coursetypeflightstart() {
var spreadsheet = SpreadsheetApp.getActive();
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
var range = sheetParameters.getRange("AF2");
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextStartsWith("EF")
.setBackground("blue")
.setRanges([range])
.build();
var rules = sheetParameters.getConditionalFormatRules();
rules.push(rule);
sheetParameters.setConditionalFormatRules(rules);
sheetParameters.getRange("AG2").setValue("FLIGHT");
}
Par contre, puis-je mettre plusieurs conditions dans le .whenTextStartsWith (par exemple: que le texte de ma valeur commence par "EF", ou "XF", ou "GF, etc...)?
Ou bien suis-je obligé de créer une fonction par critère (ça m'étonnerai quand même) ?
Bonjour,
mets les en plusieurs lignes
.whenTextStartsWith("EF")
.whenTextStartsWith("XF")
etc.
Parfait comme toujours!!!
Merci beaucoup :-)
une autre solution avec une boucle et un array
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Feuille 2');
var rangeS1 = sheet.getRange("A2:J20");
//si valeur texte contient "df,hs,op" --> couleur bleue claire
var sheet = SpreadsheetApp.getActiveSheet();
var sel =["df","hs","op"]
for (var i = 0;i<sel.length;i++){
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextContains(sel[i])
.setBackground("#B7E1CD")
.setRanges([rangeS1])
.build();
var rules = sheet.getConditionalFormatRules();
rules.push(rule);
sheet.setConditionalFormatRules(rules);
}
Mince, c'est moi qui ait eu le "solde" ... je te mets une note positive, tu as tout fait et j'ai appris comment faire. La boucle est intéressante car on peut y mettre des couleurs différentes du coup !
Merci.
Du coup, j'ai fait une fonction pour chaque cas (démarre avec tel critère et/ou contient tel critère):
//CHAMP: "Course Type" Affichage du type de cours (en "clair") en fonction du "Course Type" (en brut)
function coursetypeFlightstart(){
var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
var rangeS1 = sheetParameters.getRange("AF2");
var sel =["XF","BF","EF","GF","FF","LF","VF"]
for (var i = 0;i<sel.length;i++){
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextStartsWith(sel[i])
.setBackground("blue")
.setRanges([rangeS1])
.build();
var rules = sheetParameters.getConditionalFormatRules();
rules.push(rule);
sheetParameters.setConditionalFormatRules(rules);
sheetParameters.getRange('AG2').setValue("FLIGHT");
}
};
// -------------------------------------------------------------------------------------------------------
//CHAMP: "Course Type" Affichage du type de cours (en "clair") en fonction du "Course Type" (en brut)
function coursetypeFlightcontain(){
var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
var rangeS1 = sheetParameters.getRange("AF2");
var sel =["FC4","FQ"]
for (var i = 0;i<sel.length;i++){
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextContains(sel[i])
.setBackground("blue")
.setRanges([rangeS1])
.build();
var rules = sheetParameters.getConditionalFormatRules();
rules.push(rule);
sheetParameters.setConditionalFormatRules(rules);
sheetParameters.getRange('AG2').setValue("FLIGHT");
}
};
// -------------------------------------------------------------------------------------------------------
//CHAMP: "Course Type" Affichage du type de cours (en "clair") en fonction du "Course Type" (en brut)
function coursetypecabincontain(){
var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
var rangeS1 = sheetParameters.getRange("AF2");
var sel =["FC11","FC3"]
for (var i = 0;i<sel.length;i++){
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextContains(sel[i])
.setBackground("yellow")
.setRanges([rangeS1])
.build();
var rules = sheetParameters.getConditionalFormatRules();
rules.push(rule);
sheetParameters.setConditionalFormatRules(rules);
sheetParameters.getRange('AG2').setValue("CABIN");
}
};
// -------------------------------------------------------------------------------------------------------
//CHAMP: "Course Type" Affichage du type de cours (en "clair") en fonction du "Course Type" (en brut)
function coursetypeperfostart(){
var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
var rangeS1 = sheetParameters.getRange("AF2");
var sel =["XG04","XG10A2","LM39","XG15","XG40"]
for (var i = 0;i<sel.length;i++){
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextStartsWith(sel[i])
.setBackground("red")
.setRanges([rangeS1])
.build();
var rules = sheetParameters.getConditionalFormatRules();
rules.push(rule);
sheetParameters.setConditionalFormatRules(rules);
sheetParameters.getRange('AG2').setValue("PERFORMANCE");
}
};
// -------------------------------------------------------------------------------------------------------
//CHAMP: "Course Type" Affichage du type de cours (en "clair") en fonction du "Course Type" (en brut)
function coursetypeperfocontain(){
var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
var rangeS1 = sheetParameters.getRange("AF2");
var sel =["G","G13","G39"]
for (var i = 0;i<sel.length;i++){
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextContains(sel[i])
.setBackground("red")
.setRanges([rangeS1])
.build();
var rules = sheetParameters.getConditionalFormatRules();
rules.push(rule);
sheetParameters.setConditionalFormatRules(rules);
sheetParameters.getRange('AG2').setValue("PERFORMANCE");
}
};
// -------------------------------------------------------------------------------------------------------
Du coup, ça fonctionne mais est-ce optimisé selon vous?
De plus, je souhaiterai qu'en fonction de la couleur donnée, cela me mette une correspondance dans une autre cellule:
- bleu => FLIGHT
- jaune => CABIN
- rouge => PERFORMANCE
- vert => MAINTENANCE
- orange => STRUCTURE
Dois-je utiliser une fonction onEdit ou bien est-il possible d'inclure cela dans la fonction de mise en forme?
Re :-),
J'ai fait une fonction pour chaque cas (démarre avec tel critère et/ou contient tel critère):
//CHAMP: "Course Type" Affichage du type de cours (en "clair") en fonction du "Course Type" (en brut)
function coursetypeFlightstart(){
var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
var rangeS1 = sheetParameters.getRange("AF2");
var sel =["XF","BF","EF","GF","FF","LF","VF"]
for (var i = 0;i<sel.length;i++){
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextStartsWith(sel[i])
.setBackground("blue")
.setRanges([rangeS1])
.build();
var rules = sheetParameters.getConditionalFormatRules();
rules.push(rule);
sheetParameters.setConditionalFormatRules(rules);
sheetParameters.getRange('AG2').setValue("FLIGHT");
}
};
// -------------------------------------------------------------------------------------------------------
//CHAMP: "Course Type" Affichage du type de cours (en "clair") en fonction du "Course Type" (en brut)
function coursetypeFlightcontain(){
var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
var rangeS1 = sheetParameters.getRange("AF2");
var sel =["FC4","FQ"]
for (var i = 0;i<sel.length;i++){
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextContains(sel[i])
.setBackground("blue")
.setRanges([rangeS1])
.build();
var rules = sheetParameters.getConditionalFormatRules();
rules.push(rule);
sheetParameters.setConditionalFormatRules(rules);
sheetParameters.getRange('AG2').setValue("FLIGHT");
}
};
// -------------------------------------------------------------------------------------------------------
//CHAMP: "Course Type" Affichage du type de cours (en "clair") en fonction du "Course Type" (en brut)
function coursetypecabincontain(){
var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
var rangeS1 = sheetParameters.getRange("AF2");
var sel =["FC11","FC3"]
for (var i = 0;i<sel.length;i++){
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextContains(sel[i])
.setBackground("yellow")
.setRanges([rangeS1])
.build();
var rules = sheetParameters.getConditionalFormatRules();
rules.push(rule);
sheetParameters.setConditionalFormatRules(rules);
sheetParameters.getRange('AG2').setValue("CABIN");
}
};
// -------------------------------------------------------------------------------------------------------
//CHAMP: "Course Type" Affichage du type de cours (en "clair") en fonction du "Course Type" (en brut)
function coursetypeperfostart(){
var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
var rangeS1 = sheetParameters.getRange("AF2");
var sel =["XG04","XG10A2","LM39","XG15","XG40"]
for (var i = 0;i<sel.length;i++){
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextStartsWith(sel[i])
.setBackground("red")
.setRanges([rangeS1])
.build();
var rules = sheetParameters.getConditionalFormatRules();
rules.push(rule);
sheetParameters.setConditionalFormatRules(rules);
sheetParameters.getRange('AG2').setValue("PERFORMANCE");
}
};
// -------------------------------------------------------------------------------------------------------
//CHAMP: "Course Type" Affichage du type de cours (en "clair") en fonction du "Course Type" (en brut)
function coursetypeperfocontain(){
var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
var rangeS1 = sheetParameters.getRange("AF2");
var sel =["G","G13","G39"]
for (var i = 0;i<sel.length;i++){
var rule = SpreadsheetApp.newConditionalFormatRule()
.whenTextContains(sel[i])
.setBackground("red")
.setRanges([rangeS1])
.build();
var rules = sheetParameters.getConditionalFormatRules();
rules.push(rule);
sheetParameters.setConditionalFormatRules(rules);
sheetParameters.getRange('AG2').setValue("PERFORMANCE");
}
};
// -------------------------------------------------------------------------------------------------------
Du coup, ça fonctionne mais est-ce optimisé selon vous?
De plus, je souhaiterai qu'en fonction de la couleur donnée, cela me mette une correspondance dans une autre cellule:
- bleu => FLIGHT
- jaune => CABIN
- rouge => PERFORMANCE
- vert => MAINTENANCE
- orange => STRUCTURE
Dois-je utiliser une fonction onEdit ou bien est-il possible d'inclure cela dans la fonction de mise en forme?
Bonjour,
Peut-être est-ce clair dans votre esprit mais c'est un peut confus pour nous .
pourquoi cette ligne dans le code et à quoi elle sert ?
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
les couleurs :
- vert => MAINTENANCE
- orange => STRUCTURE
sont obtenues comment ?
comment sont lancées ces functions ?
Enfin difficile de vous aider sans avoir le fichier
Voilà le lien vers le fichier: https://docs.google.com/spreadsheets/d/17JKLuW59Sh93ULtAo6XKWqx1bI8yUotkOz_VLANG_lM/edit?usp=sharing
Ce n'est pas la version sur laquelle je travaille (car je suis sur un site sécurisé) et j'ai dû changer des infos pour des raisons de confidentialités, mais sinon c'est presque identique.
La ligne indiquée était mise car je prévoyais de faire une action sur la feuille indiquée (j'aurais effectivement du l'enlever pour ne pas perturber).
Pour tester, il faut choisir:
- dans LOAN TYPE: Course Loan
- dans COURSE N°: choisir un numéro de cours. Celui-ci donne le type de cours dans la colonne AF2 de la feuille "PARAMETERS", et en fonction de l'acronyme indiqué, la mise en forme conditionnelle s'effectue.
En plus de cela, je voudrais faire une correspondance de couleur comme ceci:
- bleu => FLIGHT (affiché dans "Loan Interface" en C13 et dans "PARAMETERS" en AG2)
- jaune => CABIN (affiché dans "Loan Interface" en C13 et dans "PARAMETERS" en AG2)
- rouge => PERFORMANCE (affiché dans "Loan Interface" en C13 et dans "PARAMETERS" en AG2)
- vert => MAINTENANCE (affiché dans "Loan Interface" en C13 et dans "PARAMETERS" en AG2)
- orange => STRUCTURE (affiché dans "Loan Interface" en C13 et dans "PARAMETERS" en AG2)
J'espère que le script vous aidera...
Je ne sais pas ce que sont des MEFC (je suis débutant en App Script) :-(
Pour les accès, j'ai refait le partage de fichier...
https://docs.google.com/spreadsheets/d/17JKLuW59Sh93ULtAo6XKWqx1bI8yUotkOz_VLANG_lM/edit?usp=sharing
Mise En Forme Conditionnelle
existent aussi en GSheets et pas qu'en Apps Google Script
Ah ok merci.
Alors oui il y a des formules, et les MEFC sont du coup "scriptées".
Je préfère faire un maximum d'actions via script.
J'ai essayé de faire une action (un message) en fonction des couleurs récupérées dans la cellule AF2, mais ça ne fonctionne pas...
Est-ce possible de faire une action en fonction de la couleur d'une cellule?
function coursetype(e){
var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
if(e.range.getRow() == 12 && e.range.getColumn() == 3){
if (sheetLoanRec.getRange('C12').getValue()!==""){
if (sheetParameters.getRange('AF2').getBackground()=='blue'){
Browser.msgBox("Blue FLIGHT");
return;
}
if (sheetParameters.getRange('AF2').getBackground()=='yellow'){
Browser.msgBox("Yellow CABIN");
return;
}
if (sheetParameters.getRange('AF2').getBackground()=='red'){
Browser.msgBox("Red PERFORMANCE");
return;
}
if (sheetParameters.getRange('AF2').getBackground()=='green'){
Browser.msgBox("Green MAINTENANCE");
return;
}
if (sheetParameters.getRange('AF2').getBackground()=='orange'){
Browser.msgBox("Orange STRUCTURE");
return;
}
} else {
}
} else {
}
};