Excel 2007: mise en forme conditionnelle pour que chaque ligne affiche des valeurs faibles en jaune, des valeurs élevées en rouge

14

J'ai une feuille de calcul avec environ 300 lignes. Chaque ligne a environ 15 colonnes et chaque cellule contient une valeur numérique. Chaque ligne correspond à un produit.

Je veux obtenir Excel, pour chaque produit, pour mettre en évidence les cellules avec les nombres les plus élevés en rouge et les nombres les plus bas en jaune, avec un dégradé pour les nombres entre les deux. C'est ce qui se passe si je sélectionne une ligne (en particulier, les 15 cellules de la ligne qui contiennent mes données), puis cliquez sur Mise en forme conditionnelle> Échelles de couleurs> Échelle de couleurs rouge-jaune.

Cependant, j'ai 300 lignes et il faudra trop de temps pour sélectionner chaque ligne individuellement et définir la mise en forme conditionnelle. D'un autre côté, si je sélectionne toute la plage et applique la mise en forme conditionnelle, Excel calcule les couleurs en fonction de toute la plage, alors qu'en fait je veux qu'elles soient calculées ligne par ligne. Par exemple, prenez cet exemple de données:

1 2 3
4 5 6
7 8 9

La sortie que je veux, en utilisant Y pour le jaune, O pour l'orange, R pour le rouge, est:

Y O R
Y O R
Y O R

Cependant, si je sélectionne toute la plage et applique la mise en forme conditionnelle, j'obtiens:

Y Y Y
O O O
R R R

Existe-t-il un moyen d'accomplir cela sans le faire une ligne à la fois?

Michael Pavey
la source
@wizlog: C'est vrai. La valeur la plus élevée d'une ligne doit être rouge, la valeur la plus basse de cette ligne doit être jaune et les autres valeurs doivent être quelque part entre les deux (la plus proche de la valeur la plus élevée, la plus rouge).
Michael Pavey
J'aime cette question ... Je vais voir si je peux trouver une réponse ... Il faudra probablement quelques heures avant que je puisse à nouveau vous aider, j'espère que les autres membres de SuperUser vous trouveront une réponse à temps ..
wizlog
J'aime aussi cette question. Mais je ne vois pas d'autre moyen d'aborder cela que d'utiliser une macro. J'espère cependant que quelqu'un me prouve le contraire.
Ellesa

Réponses:

15

Voici une macro qui crée un format conditionnel pour chaque ligne de votre sélection. Pour ce faire, il copie le format de la première ligne dans CHAQUE ligne de la sélection (une par une, pas complètement). Remplacez B1: P1 par la référence à la première ligne de votre tableau de données.

Sub NewCF()
    Range("B1:P1").Copy
    For Each r In Selection.Rows
        r.PasteSpecial (xlPasteFormats)
    Next r
    Application.CutCopyMode = False
End Sub

Pour l'utiliser, mettez en surbrillance les lignes non formatées de votre jeu de données (dans mon cas, B2: P300 ), puis exécutez la macro. Dans l'exemple ci-dessous, notez que les nombres maximum dans les deux premières lignes sont respectivement 5 et 15 ; les deux cellules sont rouge foncé .

Je suis sûr qu'il existe une solution plus rapide que cela, cependant.

entrez la description de l'image ici

Ellesa
la source
1
Merci, cela a fonctionné à merveille. C'est aussi un excellent exemple de la valeur de demander de l'aide en cas de doute ... J'avais été intimidé par l'idée d'utiliser une macro, car je supposais que j'aurais besoin d'apprendre à configurer le formatage conditionnel à partir de zéro. Obtenir la macro juste pour copier le formatage existant est beaucoup plus astucieux :)
Michael Pavey
@MichaelPavey Heureux d'avoir pu aider! Et bienvenue sur Superuser! :)
Ellesa
1
+ 1. Si quelqu'un est intéressé, j'ai développé ce concept sur mon blog: yoursumbuddy.com/conditional-formatting-per-row-color-scales
Doug Glancy
Il est ridicule que ce genre de chose ne soit pas intégré à Excel en tant que fonctionnalité. Est-il si rare de vouloir comparer des lignes de cette manière?
Alex
5

La façon la plus simple d'y parvenir est de copier / coller progressivement. Tout d'abord, formatez 1 ligne comme vous le souhaitez. Copiez et collez ensuite la mise en forme uniquement sur SEULEMENT une deuxième ligne. Copiez maintenant les DEUX lignes 1 et 2 et collez la mise en forme sur les lignes 3 et 4. Rincez et répétez, copiez 4, passé 4, copiez 8, collez 8, copiez 16, collez 16. Une fois que vous avez obtenu une quantité décente comme 16, collez-le plusieurs fois pour obtenir jusqu'à 64 ou 128. Ensuite, vous pouvez les copier et coller leur mise en forme, et vous couvrir de façon exponentielle plus de territoire qu'auparavant.

Ce n'est pas élégant, et d'après mon expérience, les ressources nécessaires pour formater conditionnellement la ligne de manger commencent à être maximisées autour de 2500 lignes ... mais cela fait le travail.

Je souhaite juste qu'il y ait une logique qui n'a pas créé un format conditionnel séparé pour chaque ligne, monopolisant les ressources ...

Poultron
la source
Je pense que l'OP a dit "Cependant, j'ai 300 lignes et il faudra trop de temps pour sélectionner chaque ligne individuellement et définir la mise en forme conditionnelle." dans la question
Prasanna
@Poultron, merci! Pour ajouter à cela: En utilisant Ctrl / Cmd + Maj + Haut / droite, vous pouvez facilement sélectionner toutes les lignes et colonnes précédentes, vous n'avez donc pas besoin de compter les lignes précédentes. Ensuite, lorsque vous êtes prêt à coller, placez simplement le curseur dans la première cellule sous les lignes déjà formatées et le format de collage spécial uniquement, il s'étendra pour couvrir autant de lignes que copiées. Ctrl / Cmd + Shift + V se souviendra également de la dernière pâte spéciale que vous souhaitez utiliser, de sorte que l'ensemble du processus se déroule assez rapidement. Je viens de l'utiliser sur deux feuilles de calcul de 600 lignes chacune.
Oskar Austegard
Je l'ai fait sur une table avec environ 100 lignes et cela a fonctionné à merveille. A seulement pris 7 itérations de Format Painter.
mskfisher
0

Je viens de trouver ceci et d'autres exemples sur la façon de le faire via VBA et cela m'a fait réfléchir et j'ai trouvé un moyen relativement rapide et indolore de faire la même chose sans avoir à connaître ou copier un script.

Appliquez la mise en forme conditionnelle souhaitée à la ligne souhaitée, puis mettez en surbrillance la ligne entière. Cliquez avec le bouton droit de la souris n'importe où le long de la bordure (la souris doit être l'icône Déplacer) et faites-la glisser vers la ligne suivante. Dans le menu contextuel qui apparaît, sélectionnez "Copier ici en tant que formats uniquement". Vous devez maintenant appliquer séparément votre format conditionnel aux deux lignes. Continuez ensuite à le faire récursivement, sauf que vous pouvez maintenant sélectionner et copier 2 lignes ou plus à la fois.

Ce n'est pas un accord unique comme le code ci-dessus, mais il est exponentiellement plus rapide que de faire une ligne à la fois. J'espère que cela t'aides.

Chris S
la source
0

Vous pouvez également appliquer la mise en forme de condition à une ligne. Mettez à nouveau la ligne en surbrillance et double-cliquez sur "Format Painter" pour la verrouiller. Utilisez la touche fléchée vers le bas pour appliquer la condition aux autres lignes.

Car mon entreprise bloque généralement les macros dans Excel, donc cela fonctionne pour moi. j'espère que cela vous aide aussi.

Genx
la source