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,

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 beaucoup :-)

Parfait comme toujours!!!

Merci beaucoup :-)

Non, prends le script avec la boucle de Gilbert, il semble que ma solution ne tienne compte que d'un seul, désolé.

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...

est-ce un truc du genre avec des formules et des MEFC

l'accès au fichier n'est pas autorisé.

mefcplus

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 {
  }
};
Rechercher des sujets similaires à "mise forme conditionnelle script"