Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mise en forme conditionnelle / valeur d'une cellule

3 réponses
Avatar
PDRT
Bonjour,
Je suis nouveau sur ce NG, avant d'écrire ce post je suis allé faire des
recherches sur google group.
Cela m'a permis entre autres de découvrir l'EXCELLENT MFC-V24.xls de AV
(Merci Alain et tous les contributeurs)... mais sauf erreur de ma part je
n'ai pas trouvé la réponse à ma question.

Mon problème :
Dans les tournois de tennis on affiche les tableaux qui peuvent comporter
plusieurs dizaines ou centaines de joueurs. Pour en faciliter la lecture on
surligne sur l'impression papier le nom/prénom d'un joueur en fonction de
son classement (on a donc 6 ou 7 couleurs à sa disposition)
Ceci est assez gavant à faire et il serait idéal que EXCEL puisse
automatiquement attribuer la couleur de fond d'une cellule comportant le nom
d'un joueur en fonction de son classement.
En principe la valeur de la cellule est "nom prénom clsst" où clsst peut
prendre les valeurs suivantes (alphanumériques) séparée ici par des ";" (du
moins fort au plus fort)

30/5;30/4;30/3;30/2;30/1;30;15/5;15/4;15/3;15/2;15/1;15;5/6;4/6;3/6;2/6;1/6;
0;-2/6;-4/6;-15;-30 plus les "premières séries" mais là c'est moins grave
à mon niveau ;)

Je sais c'est abscons mais c'est comme ça ! (pour plus d'info :
http://www.fft.fr/competitions/classement.html#)

Ceci fait 22 niveaux de classement. Je ne demande pas qu'il y ait 22
couleurs ce qui serait illisible. 6 couleurs serait idéal.

Donc quelqu'un aurait-il une solution. J'ai essayé avec la fonction Mise en
forme conditionnelle... mais je me suis bien embourbé et comme je suis
vierge en VBA...

PS je dispose d'excel 2002 et Windows XP Pro

cordialement

Pascal Derathé

3 réponses

Avatar
Ellimac
Bonjour,

Voilà un problème intéressant. Le code suivant est à
mettre dans la feuille (clic droit sur l'onglet et
visualiser le code) :

Sub Couleurs()
For Each c In Selection
e = Right(c, 1)
a = Right(c, 2)
b = Right(c, 3)
d = Right(c, 4)
If Left(b, 1) = "-" Or Left(d, 1) = "-" Then
c.Interior.ColorIndex = 35
Else
If Left(d, 1) <> "-" And (a = " 0") Or (b = "2/6")
Or _
(b = "1/6") Then
c.Interior.ColorIndex = 36
Else
If a = "30" Or d = "30/2" Or d = "30/1" Then
c.Interior.ColorIndex = 45
Else
If a = "15" Or (Left(d, 2) = "15" And e
< "3") Then
c.Interior.ColorIndex = 37
Else
If a = "/6" And Left(b, 1) > 2 Then
c.Interior.ColorIndex = 38
Else
If Left(d, 2) = 30 And e >= 3 Then
c.Interior.ColorIndex = 39
Else
If Left(d, 2) = 15 And e >= 3
Then
c.Interior.ColorIndex = 43
End If
End If
End If
End If
End If
End If
End If
Next
End Sub


Attention aux passages à la ligne.
N'hésites aps si tu veux que je t'envoie un exemple.

Camille

-----Message d'origine-----
Bonjour,
Je suis nouveau sur ce NG, avant d'écrire ce post je suis
allé faire des

recherches sur google group.
Cela m'a permis entre autres de découvrir l'EXCELLENT MFC-
V24.xls de AV

(Merci Alain et tous les contributeurs)... mais sauf
erreur de ma part je

n'ai pas trouvé la réponse à ma question.

Mon problème :
Dans les tournois de tennis on affiche les tableaux qui
peuvent comporter

plusieurs dizaines ou centaines de joueurs. Pour en
faciliter la lecture on

surligne sur l'impression papier le nom/prénom d'un
joueur en fonction de

son classement (on a donc 6 ou 7 couleurs à sa
disposition)

Ceci est assez gavant à faire et il serait idéal que
EXCEL puisse

automatiquement attribuer la couleur de fond d'une
cellule comportant le nom

d'un joueur en fonction de son classement.
En principe la valeur de la cellule est "nom prénom
clsst" où clsst peut

prendre les valeurs suivantes (alphanumériques) séparée
ici par des ";" (du

moins fort au plus fort)

30/5;30/4;30/3;30/2;30/1;30;15/5;15/4;15/3;15/2;15/1;15;5/
6;4/6;3/6;2/6;1/6;

0;-2/6;-4/6;-15;-30 plus les "premières séries" mais
là c'est moins grave

à mon niveau ;)

Je sais c'est abscons mais c'est comme ça ! (pour plus
d'info :

http://www.fft.fr/competitions/classement.html#)

Ceci fait 22 niveaux de classement. Je ne demande pas
qu'il y ait 22

couleurs ce qui serait illisible. 6 couleurs serait idéal.

Donc quelqu'un aurait-il une solution. J'ai essayé avec
la fonction Mise en

forme conditionnelle... mais je me suis bien embourbé et
comme je suis

vierge en VBA...

PS je dispose d'excel 2002 et Windows XP Pro

cordialement

Pascal Derathé


.



Avatar
PDRT
merci, cela me semble correct

Je regarde ça avec les nouvelles propositions de ELLIMAC et de Denis


"patrick lyon" a écrit dans le message de
news:bjkjq4$
bonjour
j'ai autant de mal que toi mais

a vu de nez

if c = "30/5" or c = "30" or c = "15" Then
c.Interior.ColorIndex = 39
Else
if c = "30/4" or c = "15/5" or c = "5/6" Then
c.Interior.ColorIndex = 38



Avatar
PDRT
Merci Denis ... ta solution fonctionne

Je vais faire des heureux

cordialement


"Denis" a écrit dans le message de
news:h_o7b.6595$
Bonjour,

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Classement As String

Application.ScreenUpdating = False
For Each Cell In Range("A1:A" & Range("A1").End(xlDown).Row)
Cell.Select

' Pour assigner à la variable Classement le classement du joueur
Classement = ActiveCell.Value
If Trim(Classement) <> "" Then
Do
Classement = Trim(Right(Classement, Len(Classement) -
InStr(1, Classement,

" ")))
Loop Until InStr(1, Classement, " ") = 0
End If

'Pour attribuer la couleur selon le classement du joueur
Select Case Classement

' Couleur no.1
Case "30/5", "30", "15", "0"
ActiveCell.Interior.Color = RGB(204, 204, 102)

' Couleur no.2
Case "30/4", "15/5", "5/6", "-2/6"
ActiveCell.Interior.Color = RGB(255, 204, 204)

' Couleur no.3
Case "30/3", "15/4", "4/6", "-4/6"
ActiveCell.Interior.Color = RGB(204, 153, 102)

' Couleur no.4
Case "30/2", "15/3", "3/6", "-15"
ActiveCell.Interior.Color = RGB(128, 255, 0)

' Couleur no.5
Case "30/1", "15/2", "2/6", "-30"
ActiveCell.Interior.Color = RGB(0, 255, 128)

' Couleur no.6
Case "15/1", "1/6"
ActiveCell.Interior.Color = RGB(204, 153, 255)

Case Else
ActiveCell.Interior.Color = RGB(255, 255, 255)
End Select
Next Cell
Target.Select
Application.ScreenUpdating = True
End Sub