Comment définir une mise en forme conditionnelle sur une cellule particulière qui dépend de la valeur d'une autre cellule?

69

Dans mon exemple, j'aimerais formater de manière conditionnelle les cellules de la colonne B. Ceux marqués avec x doivent être formatés en fonction de la valeur dans la colonne A (dans l'exemple, la valeur est 1):

A | B
1 | x
2 | 
3 | 
1 | x
1 | x
4 | 
8 |

// x can be any value and is here merely to mark the cell that should be formatted

REMARQUE IMPORTANTE 2014 : La mise en forme conditionnelle basée sur une formule pouvant inclure d'autres cellules est désormais possible dans Google Sheets et fonctionne de manière très similaire au fonctionnement des feuilles de calcul Excel. Cette réponse explique son utilisation.

Robert Koritnik
la source
3
Puisque vous avez ajouté cette note de 2014, pensez également à déplacer la coche vers une réponse décrivant l'approche moderne.

Réponses:

50

La mise en forme conditionnelle complexe peut être réalisée dans Google Spreadsheets à l'aide de Google Apps Script. Par exemple, vous pouvez écrire une fonction qui modifie la couleur d'arrière-plan d'une ligne entière en fonction de la valeur de l'une de ses cellules, ce que je ne pense pas possible avec le menu "Changer la couleur avec des règles". Vous voudrez probablement définir des déclencheurs pour cette fonction tels que "Sur édition", "Sur ouverture" et "Sur formulaire de soumission".

Documentation sur la fonction setBackgroundRGB ()

UPDATE: voici un exemple de script Google Apps permettant de modifier la couleur d'arrière-plan d'une ligne entière en fonction de la valeur de la colonne A. Si la valeur est positive, utilisez le vert. Si vide, blanc. Sinon, rouge. Consultez les résultats dans cette feuille de calcul Google publique . (Vous devrez être connecté pour que le script s'exécute, mais sans vous connecter, vous pouvez toujours voir les résultats).

function colorAll() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var endRow = sheet.getLastRow();

  for (var r = startRow; r <= endRow; r++) {
    colorRow(r);
  }
}

function colorRow(r){
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange(r, 1, 1, 3);

  var data = dataRange.getValues();
  var row = data[0];

  if(row[0] === ""){
    dataRange.setBackgroundRGB(255, 255, 255);
  }else if(row[0] > 0){
    dataRange.setBackgroundRGB(192, 255, 192);
  }else{
    dataRange.setBackgroundRGB(255, 192, 192);
  }

  SpreadsheetApp.flush(); 
}

function onEdit(event)
{
  var r = event.source.getActiveRange().getRowIndex();
  if (r >= 2) {
    colorRow(r);
  }
}

function onOpen(){
  colorAll();
}

Un séjour sobre

Liam
la source
J'ai eu une erreur sur la ligne 13: var dataRange = sheet.getRange (r, 1, 1, 3); Si je souhaite utiliser ce script pour colorer une ligne en fonction d'un nom spécifique (par exemple, David), comment pourrais-je le changer? Et je changerais probablement la police au lieu de l'arrière-plan: setFontColor De plus, comment puis-je exécuter le script sur ma feuille de calcul? Merci
2
Le lien vers l'exemple n'est plus valide. Comment utilisez-vous ce script une fois qu'il est créé? Cela manque à cette réponse.
Daniel Williams
3
Il existe maintenant une option plus simple pour les cas d'utilisation les plus courants, décrite dans ma réponse ci-dessous.
Sam Brightman
1
Le lien Google Spreadsheet est malheureusement rompu. Ce serait bien d'avoir une courte description sur la façon d'utiliser / activer les scripts. Néanmoins, bonne réponse qui fonctionne. :)
brimborium
19

La nouvelle version de Google Sheets vous permet de le faire, comme décrit ici . Vous devez d'abord activer les nouvelles feuilles de calcul dans les paramètres de votre pilote Google, comme décrit dans l'article. Ensuite, vous pouvez sélectionner "Formule personnalisée est" parmi les options de mise en forme conditionnelle et entrer n’importe quelle formule (n’oubliez pas d’ajouter le =préfixe!). Les références de cellule sans $préfixes sont ajustées automatiquement lorsqu’elles sont appliquées aux plages comme prévu.

Il semble que le support pour la migration d'ancien vers le nouveau fasse défaut - il ne s'applique qu'aux nouvelles feuilles et j'ai constaté que seules les valeurs pouvaient être copiées de l'une à l'autre. Copier une feuille entière peut être une option.

Sam Brightman
la source
1
Merci de l'avoir signalé. Cela fonctionne vraiment exactement comme je le veux.
Robert Koritnik
À cette époque, la plupart des feuilles de calcul anciennes étaient migrées vers les nouvelles feuilles de calcul Google. Par conséquent, la note sur la prise en charge de la migration est obsolète.
Rubén
2

J'ai écrit cette application Web, Color Code + , avec Apps-Script, pour couvrir la plupart des besoins de mise en forme conditionnels de base. Ajoutez à cela quelques règles et il va cracher sur le code que vous pouvez ensuite coller dans votre feuille de calcul, sous Outilséditeur de script ... . ( Fil d'aide sur les forums Google.)

Bryan P
la source
1

Les règles de format conditionnel de Google Sheets ressemblent à ceci si vous souhaitez formater de manière conditionnelle avec un arrière-plan rouge si la somme dans deux cellules est différente de celle dans la troisième cellule:

Règles de format conditionnelles Google Sheets avec une seule couleur et une formule personnalisée

ViliusK
la source
0

Mise en forme conditionnelle - formule personnalisée

range 2:227

= if($i:$i = "Duplicate",True,False)

sélectionnez la couleur sur laquelle vous souhaitez mettre la ligne en surbrillance.

Hari R
la source
0

(Février 2017) Comme mentionné dans une autre réponse, Google Sheets permet désormais aux utilisateurs d'ajouter le formatage conditionnel directement à partir de l'interface utilisateur, que ce soit sur un ordinateur de bureau / ordinateur portable, un appareil Android ou iOS. Cependant, le reste de cette réponse est principalement destiné aux développeurs, car vous pouvez écrire des applications "do" à la mise en forme conditionnelle.

Avec l'API v4 (et plus récente) de Google Sheets , les développeurs peuvent désormais écrire des applications qui respectent les règles de mise en forme conditionnelle CRUD. Consultez le guide et les exemples de pages pour plus de détails, ainsi que les documents de référence (rechercher {add,update,delete}ConditionalFormatRule). Le guide présente cet extrait Python (en supposant un ID de fichier de SHEET_IDet en SHEETStant que point de terminaison du service d'API):

myRange = {
    'sheetId': 0,
    'startRowIndex': 1,
    'endRowIndex': 11,
    'startColumnIndex': 0,
    'endColumnIndex': 4,
}

reqs = [
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {'textFormat': {'foregroundColor': {'red': 0.8}}}
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=GT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {
                    'backgroundColor': {'red': 1, 'green': 0.4, 'blue': 0.4}
                },
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=LT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
]

SHEETS.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID,
        body={'requests': reqs}).execute()

En plus de Python, les API Google prennent en charge diverses langues . Vous disposez donc d'options. Quoi qu'il en soit, cet exemple de code formate une feuille (voir image ci-dessous) de sorte que les plus jeunes par rapport à l'âge médian soient surlignés en rouge clair, tandis que ceux situés au-dessus de la médiane affichent leurs données en rouge.

Exemple de mise en forme conditionnelle

NOTE: ma réponse ici est identique à celle de SO sur cette question, sauf que j'ai abandonné le message d'intérêt public car il n'a pas besoin de vivre à> 1 endroit.

wescpy
la source
Il y a plusieurs réponses à cette question également sur la question posée. Quelle est la "autre réponse" à laquelle cette réponse fait référence? (: Par ailleurs, bien que les personnes qui visitent ce site puissent écrire du code, je pense que la plupart d'entre elles le font en tant que "développement utilisateur final", comme dans les fonctions personnalisées / définies par l'utilisateur. Je ne suis pas sûr que des termes tels que CRUDest connu par la plupart d'entre eux et qu'ils pourraient trouver utile tous les détails supplémentaires inclus dans cette réponse
Rubén
0

Pour aborder les spécificités du Q dans les "nouvelles" feuilles, je suggère d'effacer toute mise en forme conditionnelle de B: B, en sélectionnant ColonneB et en appliquant une formule personnalisée :

=A1=1

avec formatage de choix et Done.

nuts
la source
0

Lors de la modification de la mise en forme conditionnelle, sélectionnez Formule personnalisée et utilisez les options suivantes ...

=if(A1 = 1 , true)

Sélectionnez vos couleurs et vous avez terminé.

utilisateur3246197
la source
-1

Modifier en réponse à la clarification de la question:

Dans la fenêtre de votre feuille de calcul Google, vous trouverez un menu Format avec l'option "Changer la couleur avec des règles". C’est aussi technique que le formatage conditionnel de Google Spreadsheet. Autant que je sache, il n’existe aucun moyen de colorer une cellule en fonction de la valeur d’une autre - Google ne vous permet pas de saisir des formules pour d’autres cellules.

Sauf si vous insérez d'autres données dans la colonne B, vous pouvez toujours rendre toutes les colonnes B égales à la colonne A, puis utilisez l'option "Changer la couleur avec des règles" pour colorer toutes les cellules avec la valeur 1 avec des couleurs similaires, c'est-à-dire fond rouge et texte rouge lorsque la valeur est 1, fond blanc et texte blanc lorsque ce n'est pas le cas, masquant efficacement la valeur dans la colonne B. Cela vous donnera l'aspect que vous souhaitez.

Dans Excel, vous pouvez faire ce que vous voulez. En utilisant vos données comme exemple, j'ai formaté conditionnellement B1 lorsque cette formule est vraie:

=IF(A1=1,true,false)

puis faites glisser la mise en forme vers le bas, ce qui met en surbrillance uniquement les cellules de B où il s'agit d'un voisin de la colonne A égal à 1.

Excel peut le faire, mais pas Google


Réponse originale

Je ne sais pas si vous pouvez le faire en 2 colonnes, mais je sais que vous pouvez le faire en 3:

 A  |  B  |  C
----------------
 1  |  f  |  x

Dans la colonne B, vous pouvez utiliser la IFformule pour voir si un x a été placé dans la colonne C appropriée:

=IF(C1="x",A1,"") 

La IFformule comporte 3 parties: le test, la valeur then et la valeur else . Dans l'exemple ci-dessus, la formule vérifie s'il existe une xcolonne dans la colonne C. Si c'est le cas, il entre la valeur de A1, sinon, il entre en blanc. Peu importe s'il xs'agit de majuscules ou de minuscules.

Une fois que vous avez entré cette formule en haut de votre liste, vous pouvez utiliser la fonction de glissement pour faire glisser la formule vers le bas pour le reste de votre liste. Avec la cellule surlignée en bleu, déplacez votre souris sur le carré dans le coin inférieur droit jusqu'à ce que le curseur devienne une croix. Ensuite, maintenez le bouton de la souris enfoncé tout en faisant glisser pour copier la formule dans les cellules ci-dessous.

Jared Harley
la source
1
Je pense que vous m'avez mal compris. La question concerne la mise en forme conditionnelle et non le placement de valeurs dans les cellules.
Robert Koritnik
1
Pour le moment, cette réponse est obsolète. Voir Appliquer des règles de mise en forme conditionnelles - Aide Éditeurs Docs
Rubén