MFC AVEC VBA : Colorer 2 cellules contigües en fonction de la valeur d'une trois

Résolu/Fermé
amiralS Messages postés 46 Date d'inscription samedi 26 octobre 2013 Statut Membre Dernière intervention 21 février 2020 - 11 nov. 2018 à 17:26
amiralS Messages postés 46 Date d'inscription samedi 26 octobre 2013 Statut Membre Dernière intervention 21 février 2020 - 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
A voir également:

4 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 11 nov. 2018 à 18:43
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







0
amiralS Messages postés 46 Date d'inscription samedi 26 octobre 2013 Statut Membre Dernière intervention 21 février 2020 2
11 nov. 2018 à 19:33
Le fichier exemple

https://mon-partage.fr/f/rwQTMA0Q/
0
amiralS Messages postés 46 Date d'inscription samedi 26 octobre 2013 Statut Membre Dernière intervention 21 février 2020 2
11 nov. 2018 à 20:23
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 12 nov. 2018 à 09:39
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

0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 240
12 nov. 2018 à 09:50
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
0
amiralS Messages postés 46 Date d'inscription samedi 26 octobre 2013 Statut Membre Dernière intervention 21 février 2020 2
12 nov. 2018 à 18:47
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
0
amiralS Messages postés 46 Date d'inscription samedi 26 octobre 2013 Statut Membre Dernière intervention 21 février 2020 2
12 nov. 2018 à 15:35
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
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 240
12 nov. 2018 à 16:15
wow, bonne défense.
Ton avocat est cru et tu n'es pas cuit :-)
eric
0