Menu

MFC AVEC VBA : Colorer 2 cellules contigües en fonction de la valeur d'une trois [Résolu]

Messages postés
39
Date d'inscription
samedi 26 octobre 2013
Dernière intervention
23 novembre 2018
- - Dernière réponse : amiralS
Messages postés
39
Date d'inscription
samedi 26 octobre 2013
Dernière intervention
23 novembre 2018
- 12 nov. 2018 à 18:47
Bonjour,
Je voudrais mettre en couleur la police de trois cellules contigües en fonction de la valeur prise par une des trois (la plus à droite)
Sur ma feuille excel j'ai des résultats d'un cross. Huit tableaux accolés avec pour chaque niveau de classe et sexe.
Une colonne: Places puis à la droite de celle ci une colonne Noms et à la droite de celle ci une colonne classes qui doit me servir de valeur de référence pour une mise en forme conditionnelle

A = Places B = Noms C= Classes ( les classes de 3ème Filles - 301/302/303/304)
D = Places E = Noms F = Classes ( les classes de 3ème Garçons - 301/302/303/304)
G = Places H = Noms I = Classes ( les classes de 4ème Filles - 401/402/403/404)
J = Places K = Noms L = Classes ( les classes de 4ème Garçons - 401/402/403/404)
M = Places N = Noms O = Classes ( les classes de 5ème Filles - 501/502/503/504)
P = Places Q = Noms R = Classes ( les classes de 5ème Garçons - 501/502/503/504)
S = Places T = Noms U = Classes ( les classes de 6ème Filles - 601/602/603/604/605/606)
V = Places W = Noms X = Classes ( les classes de 6ème Garçons - 601/602/603/604/605/606)

Je voudrais par exemple si je prends comme référence 302 (la classe de 302) que chaque référence "302" prenne une couleur (bleue par exemple) et que les deux cellules qui se trouve à sa gauche prennent aussi cette couleur. Quand je parle de la couleur c'est le texte que je veux mettre en couleur.
J'aimerai pouvoir mettre en forme toute la feuille d'un seul coup avec toutes les classes sachant que je peux mettre des couleurs identiques pour 301/401/501/601(le 01 est commun aux différents niveaux) idem pour 02/03/04 - 605 et 606 sont uniques. Les colonnes vont de A à X et j'ai au plus une centaine de lignes dans une colonne.

Merci pour votre aide
Afficher la suite 

Votre réponse

4 réponses

Messages postés
15671
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
15 février 2019
3607
0
Merci
Bonjour

Sans voir le classeur, on ne peut guère t'aider

en attendant, il semble que la couleur serait fonction de l'unité (pour 504--->)

Si oui le principe serait

Niv = Cells(2, "E") Mod 100

Select Case Niv
Case 1
ActiveCell.Font.Color = -16776961 'rouge

Case 2
ActiveCell.Font.Color = -6279056 'violet
'etc jusquu'à 6

End Select


a complèter pour les 2 cellules à gauche et ce que l'on veut peut-^tre en voyant le classeur avec des explications précises du fonctionnement voulu

Mettre le classeur sans données confidentielles en pièce jointe sur 
https://mon-partage.fr/
Puis faire un clic « copier le raccourci » et lecoller dans votre message







amiralS
Messages postés
39
Date d'inscription
samedi 26 octobre 2013
Dernière intervention
23 novembre 2018
-
Commenter la réponse de michel_m
Messages postés
39
Date d'inscription
samedi 26 octobre 2013
Dernière intervention
23 novembre 2018
0
Merci
Ce code fonctionne mais c'est fastidieux et il doit être possible de faire plus court.

Sub couleurClasse()
Dim finligne As Byte
Dim NumeroLigne As Byte

finligne = ActiveSheet.UsedRange.Rows.Count + 1 'Variable nombre de lignes
NumeroLigne = 2 'Variable ligne en cours
While NumeroLigne < finligne

If Range("c" & NumeroLigne).Value = "302" Then
Range("B" & NumeroLigne).Font.Color = RGB(0, 0, 255)
Range("a" & NumeroLigne).Font.Color = RGB(0, 0, 255)
Range("c" & NumeroLigne).Font.Color = RGB(0, 0, 255)
End If
If Range("c" & NumeroLigne).Value = "304" Then
Range("B" & NumeroLigne).Font.Color = RGB(255, 0, 0)
Range("a" & NumeroLigne).Font.Color = RGB(255, 0, 0)
Range("c" & NumeroLigne).Font.Color = RGB(255, 0, 0)
End If
If Range("c" & NumeroLigne).Value = "301" Then
Range("B" & NumeroLigne).Font.Color = RGB(255, 0, 255)
Range("a" & NumeroLigne).Font.Color = RGB(255, 0, 255)
Range("c" & NumeroLigne).Font.Color = RGB(255, 0, 255)
End If

If Range("F" & NumeroLigne).Value = "302" Then
Range("D" & NumeroLigne).Font.Color = RGB(0, 0, 255)
Range("E" & NumeroLigne).Font.Color = RGB(0, 0, 255)
Range("F" & NumeroLigne).Font.Color = RGB(0, 0, 255)
End If

If Range("f" & NumeroLigne).Value = "304" Then
Range("d" & NumeroLigne).Font.Color = RGB(255, 0, 0)
Range("e" & NumeroLigne).Font.Color = RGB(255, 0, 0)
Range("f" & NumeroLigne).Font.Color = RGB(255, 0, 0)
End If
If Range("f" & NumeroLigne).Value = "301" Then
Range("d" & NumeroLigne).Font.Color = RGB(255, 0, 255)
Range("e" & NumeroLigne).Font.Color = RGB(255, 0, 255)
Range("f" & NumeroLigne).Font.Color = RGB(255, 0, 255)
End If

If Range("i" & NumeroLigne).Value = "402" Then
Range("g" & NumeroLigne).Font.Color = RGB(0, 0, 255)
Range("h" & NumeroLigne).Font.Color = RGB(0, 0, 255)
Range("i" & NumeroLigne).Font.Color = RGB(0, 0, 255)
End If
If Range("i" & NumeroLigne).Value = "404" Then
Range("g" & NumeroLigne).Font.Color = RGB(255, 0, 0)
Range("h" & NumeroLigne).Font.Color = RGB(255, 0, 0)
Range("i" & NumeroLigne).Font.Color = RGB(255, 0, 0)
End If
If Range("i" & NumeroLigne).Value = "401" Then
Range("g" & NumeroLigne).Font.Color = RGB(255, 0, 255)
Range("h" & NumeroLigne).Font.Color = RGB(255, 0, 255)
Range("i" & NumeroLigne).Font.Color = RGB(255, 0, 255)
End If
If Range("l" & NumeroLigne).Value = "402" Then
Range("j" & NumeroLigne).Font.Color = RGB(0, 0, 255)
Range("k" & NumeroLigne).Font.Color = RGB(0, 0, 255)
Range("l" & NumeroLigne).Font.Color = RGB(0, 0, 255)
End If
If Range("l" & NumeroLigne).Value = "404" Then
Range("j" & NumeroLigne).Font.Color = RGB(255, 0, 0)
Range("k" & NumeroLigne).Font.Color = RGB(255, 0, 0)
Range("l" & NumeroLigne).Font.Color = RGB(255, 0, 0)
End If
If Range("l" & NumeroLigne).Value = "401" Then
Range("j" & NumeroLigne).Font.Color = RGB(255, 0, 255)
Range("k" & NumeroLigne).Font.Color = RGB(255, 0, 255)
Range("l" & NumeroLigne).Font.Color = RGB(255, 0, 255)
End If

ETC...
NumeroLigne = NumeroLigne + 1

Wend

End Sub
Commenter la réponse de amiralS
Messages postés
15671
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
15 février 2019
3607
0
Merci
Bonjour Amirals



https://mon-partage.fr/f/pLdfGI9m/

mais je regrette de t'avoir aider pour avoir taxé mon aide de "fastidieux", un grand Merci pour ta réaction assez typique de ton milieu professionnel

eriiic
Messages postés
22385
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
16 février 2019
7204 -
Bonjour,

J'ajouterai que ce n'est fastidieux que si on ne sait pas optimiser un code, et qu'en plus on n'applique pas ce qui est préconisé ;-)
eric
amiralS
Messages postés
39
Date d'inscription
samedi 26 octobre 2013
Dernière intervention
23 novembre 2018
-
Bonsoir,
Je suis désolé qu'une incompréhension se soit glissée dans la discussion. Je voulais d'abord lever le doute sur une phrase "Ce code fonctionne mais c'est fastidieux et il doit être possible de faire plus court." qui voulait qualifier ma manière de procéder et donc d'apprendre à simplifier mon code et qui a été comprise autrement et j'en suis responsable.
Ensuite je viens de récupérer le classeur avec ton code, clair et court pour réaliser la mise en couleur des divers classes. Il fonctionne très bien.
Je te remercie pour cette contribution.

amiralS
Commenter la réponse de michel_m
Messages postés
39
Date d'inscription
samedi 26 octobre 2013
Dernière intervention
23 novembre 2018
0
Merci
Bonjour,

Il y a une incompréhension qui amène à vos commentaires et je reconnais mon erreur.la première phrase de ma réponse "Ce code fonctionne mais c'est fastidieux et il doit être possible de faire plus court" j'aurais dû la mettre en fin de message pour montrer qu'elle s'appliquait à ma méthode et non à vos réponseS
Pour ma part je veux juste dire que pour faire avancer les choses j'ai d'abord accédé à la demande de michel_m en joignant un fichier exemple puis comme je n'attends pas que l'on fasse le travail à ma place, je cherche en même temps pour apprendre. j'ai mis dans une réponse ce que j'avais élaboré comme solution à mon problème et c'est MA méthode que je trouve fastidieuse. Volontairement j'ai rempli le cadre intitulé "Votre réponse" (donc la mienne pour moi et ainsi informer les contributeurs de ce que je fais de mon côté) et non les cadres "commenter la réponse de michel_m" , et "commenter la réponse eriiic".

Je vous remercie d'avoir pris le temps de me répondre
amiralS
eriiic
Messages postés
22385
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
16 février 2019
7204 -
wow, bonne défense.
Ton avocat est cru et tu n'es pas cuit :-)
eric
Commenter la réponse de amiralS