Planning Mise en forme conditionnelle

Bonjour,

J'ai plusieurs demandes svp :

- Je voudrais que si la journée est un samedi , un dimanche ou un vendredi N, la colonne se grise car se sont des jours non travaillés (au moins samedi, dimanche) , je crois que c'est possible en mise en forme conditionnelle

- je voudrais que la date en C2 ait 2 barres rouges de chaque coté dans le planning. J'ai une mise en forme conditionnelle pour que la date du jour soit mise en valeur mais je voudrais que la date de fin soit pareil svp. Egalement, si possible , qu'en indiquant si la date de fin est en J ou N que ca vienne mettre en évidence la bonne date (J ou N)

8aide.xlsx (76.07 Ko)

Bonjour,

Je me permets de relancer svp

Bonjour,

C'est pour Excel ou Google sheets ?


7demande-aide.xlsx (30.77 Ko)

Bonjour,

C'est sur google sheets

J'ai pu avancer mais j'ai encore des besoins : j'aimerais que la date du jour soit mis en valeur :

- date du jour mis en valeur mais Jour ou Nuit (nuit après 15h) ==> pour ca j'ai fait une formule en C1 qui dit que si l'heure maintenant est sup à 15H alors N autrement J sauf que la case C1 ne s'actualise pas et ne passe pas de J à N .

- date du jour J ou N encadré en rouge au lieu de remplissage ( j'ai pas réussi donc j'ai mis colorié en gris)

Bonjour,

Tu peux utiliser 2 MFC pour colorer les dates du jour en "J" et "N" :

=ET($F$2:$AB$2=AUJOURDHUI();$F$3:$AB$3="J";HEURE(MAINTENANT())<15)
=ET($F$2:$AB$2=AUJOURDHUI();$F$3:$AB$3="N";HEURE(MAINTENANT())>=15)

Si tu veux encadrer les cellules en rouge, il faudra passer par un script...

Cordialement,

Fil.

Bonjour ,

Merci beaucoup ca fonctionne !

si je fais un script pour entourer en rouge , ce sera pas en permanence vu qu'une macro ca doit s'activer c'est ca ?

Tu peux mettre un déclencheur. Par exemple, à l'ouverture du fichier ou si modification...

Ah super !

Je ne sais pas faire les macros (uniquement en enregistrement automatique) . Est-ce que tu sais comment lui dire que c'est en fonction de la date B3 et C3(J ou N) qu'il doit venir trouver dans le planning ?

Merci

Les scripts ne sont pas dans mon domaine de compétences... 🥲

Merci quand même :)

Bonjour,

Si j'ai bien compris, la colonne correspondant aux 2 critères :

- la date (située en B1)
- le cycle jour/nuit (situé en C1)

Dois être encadré en rouge, si oui, voici un script :

function encadrer2Conditions() {
  // on déclare le fichier, la feuille
  const ss = SpreadsheetApp.getActiveSpreadsheet(); 
  const sheet = ss.getSheetByName("Suivi Activité");

  // on déclare les valeurs référence, date et cycle, le nb de colonnes
  const date = sheet.getRange('B1').getValue().getTime();
  const cycle =  sheet.getRange('C1').getValue();
  const nbColonnes = sheet.getLastColumn();

  // Supprimer toutes les bordures de zone de travail en remettant des lignes grise
  var range = sheet.getRange(5,6,sheet.getMaxRows(),nbColonnes);
  range.setBorder(true, true, false, false, false, true, "#CCCCCC", SpreadsheetApp.BorderStyle.SOLID)

  // on créé une liste avec les dates des colonnes, ligne 2 et jusqu'à la dernière colonne de la feuille
  var dateColonnes = sheet.getRange(2,6,1,sheet.getLastColumn()).getValues()[0];

  // on itère sur chaque donnée de dateColonnes et on compare premièrement à la date référence
  for (i=0;i<dateColonnes.length;i++){
    if (dateColonnes[i] instanceof Date && dateColonnes[i].getTime() === date){
      // si cette condition est remplie, on compare la référence cycle à la donnée située en ligne 3, colonne i+6
      if (cycle===sheet.getRange(3,i+6).getValue()){
        // si OK aussi, on stocke dans une varaibl l'adresse de la colonne entière
        var colonneCible = sheet.getRange(1, i+6, sheet.getMaxRows(), 1);
        // on applique la mise en forme voulue, dans ce cas, encadré en rouge
        colonneCible.setBorder(true, true, true, true, true, true, "red", SpreadsheetApp.BorderStyle.SOLID); }
    }
  }
}

Merci beaucoup , ca marche très bien :)

Est-ce qu'il serait possible :

- limiter les bords rouge entre la ligne 8 et 37?

- pour les lignes 2 , 3 et 4, je voudrais uniquement faire un remplissage rouge ==> ça je pense le faire en MFC , ou c'est mieux avec le script ?

Est-ce qu'il existe des cours pour s'améliorer ? Car je n'ai pas tout compris à ton script , par exemple la différence entre "var" et "cons" ou encore ce que veut dire les formules du type "sheet.getRange(5,6,sheet.getMaxRows(),nbColonnes)"

merci

Bonjour,

Voici les modifications :

- limiter les bords rouge entre la ligne 8 et 37?

       
REMPLACER : 
var colonneCible = sheet.getRange(1, i+6, sheet.getMaxRows(), 1);

PAR : 
var colonneCible = sheet.getRange(8, i+6, 37, 1);

- pour les lignes 2 , 3 et 4, je voudrais uniquement faire un remplissage rouge ==> ça je pense le faire en MFC , ou c'est mieux avec le script ?

Tout dépend des conditions, de la taille du fichier, des MFC sont bien pour des fichiers limités en taille, c'est bien plus simple à mettre en place et modifier.

Pour les fichiers plus lourds, une MFC ralenti fortement l'exécution et un script est plus optimisé.

Est-ce qu'il existe des cours pour s'améliorer ?

Concernant les cours, ce site comporte beaucoup d'informations, voici le début du cours :

https://www.sheets-pratique.com/fr/apps-script/introduction

par exemple la différence entre "var" et "cons"

var = une variable, la donnée contenue peut être modifiée durant l'exécution. (il est aussi possible d'utiliser let)

const = une constante, n'est pas amené à être modifié, permet un gain de rapidité par rapport à une variable.

sheet.getRange(5,6,sheet.getMaxRows(),nbColonnes)"

Alors, la ligne complète, c'est : var range = sheet.getRange(5,6,sheet.getMaxRows(),nbColonnes);

Donc, je stocke dans une variable "var = range" une plage, qui se situe dans la feuille sheet "sheet.getRange" puis, 2 solutions pour annoncer une plage, soit de manière standard : A1:B10 par ex, soit, en indiquant : numéro de ligne départ, numéro de colonne départ, nombre de lignes, nombre de colonnes, pour reprendre l'exemple A1:B10 cela donne : 1,1,10,2

Donc, dans ce cas, la ligne départ est la 5ème (sous l'en-tête), la colonne départ la 6ème, puis le nombre de lignes, au lieu de mettre un nombre je mets toutes les lignes de la feuille à l'aide de getMaxRows() et enfin le nombre de colonnes, j'avais déjà récupéré et stocké cette donnée précédemment dans la variable nbColonnes : const nbColonnes = sheet.getLastColumn();

J'aurais très bien pu écrire : var range = sheet.getRange(F5:AC37); mais, dans ce cas, si votre fichier évolue, que ce soit le nombre de colonnes ou de ligne, il faut aller dans le script, modifier la plage, ce qui n'est pas très pratique, donc je préfère utiliser des positions relatives, qui évoluent en cas de modification.

Pour terminer sur cette ligne, stocker cette plage dans la variable range permet ensuite de réinitialiser le format, en y appliquant des lignes de bordures grises, car sinon, jour après jour, le script va encadrer en rouge le jour + cycle actuel, mais les anciens le resterons :

range.setBorder(true, true, false, false, false, true, "#CCCCCC", SpreadsheetApp.BorderStyle.SOLID)
Rechercher des sujets similaires à "planning mise forme conditionnelle"