Colorer des cellules suivant des conditions

Signaler
Messages postés
3
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
27 septembre 2013
-
Messages postés
14738
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 novembre 2020
-
Bonjour,

Ne connaissant pas grand chose dans le domaine du codage, j'ai du mal a réaliser une idée qui m'aiderait beaucoup dans la vie de tous les jours dans mon travail.

J'ai un tableau Excel d'environ 30 colonnes (A, B, C, ..., AD) et 10 lignes (1, 2, 3, ..., 10). A l'intérieur de chaque ligne est composé de 3 autres lignes (a, b et c). Il faudrait qu'en cliquant sur un bouton certaines cellules de ce tableau se colorient en jaune ou en bleu suivant certaines conditions. Voici ces conditions :

- Les cellules pouvant être coloré ne sont que les cellules A1a, A1c, B1a, B1c, C1a, C1c, ..., AD1a, AD1c & A2a, A2c, B2a, B2c, ... AD2a, AD2c & ... & A10a, A10c, B10a, B10c, ... AD10a, AD10c.

- Une cellule déjà colorée ne peut pas être re-colorée. Elle serait comme inactive, verrouillée, qu'on ne prendrait plus en compte.

- Sur chaque colonne (A, B, C, ..., AD), il ne peut pas y avoir plus de 4 cellules jaune et pas plus de 4 cellules bleues.

- Sur chaque colonne (A, B, C, ..., AD), il ne peut pas y avoir plus de 2 cellules "a" de chaque ligne bleue (A1a, A2a, ..., A10a pour la colonne A par exemple), pas plus de 2 cellules "a" de chaque ligne jaune (A1a, A2a, ..., A10a pour la colonne A par exemple), pas plus de 2 cellules "c" de chaque ligne bleue (A1c, A2c, ..., A10c pour la colonne A par exemple) et pas plus de 2 cellules "c" de chaque ligne jaune (A1c, A2c, ..., A10c pour la colonne A par exemple).

- Sur chaque ligne (1, 2, ..., 10) il doit y avoir environ 50% de cellules colorées (jaune ou bleue peu importe) en "a" et environ 50% de cellules colorées (jaune ou bleue peu importe) en "c".

- Sur chaque ligne (1, 2, ..., 10) il doit y avoir environ 50% de cellules jaune et 50% de cellules bleues ("a" et "c" confondu).

C'est pas si simple que ça et encore moins à expliquer. J'ai hâte de lire vos réponses.

Cordialement Robin.

5 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,,
Ni clair, ni précis, à commencer par :
" A l'intérieur de chaque ligne est composé de 3 autres lignes (a, b et c)"
de toutes manières : veux-tu bien nous montrer ce que (le code) tu as au moçins tenté d'écrire ? (c'est ici la règle).
Messages postés
14738
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 novembre 2020
148
Bonsoir,

Malgré les termes (pas très) agressifs de Ucfoutu, le message est clair, on vient ici pour exposer un problème cerné.
As-tu déjà utiliser l'enregistreur de macro d'Excel pour voir le code générer et l'adapter ?

Ensuite, en fonction de tes recherches, reviens ici pour que l'on voit ton code et que l'on t'aide.
Messages postés
3
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
27 septembre 2013

Voici ce que j'ai déjà codé :

Sub Hello()
MsgBox "Lancer le 50-50"

Dim J As Long
Dim I As Integer

Randomize
For J = 3 To 45
For I = 3 To 25
Cells(J, I).Interior.Color = RGB(83, 142, 213) And RGB(255, 255, 0)
Next I
Next J

Range( _
"B6:Y6,B10:Y10,B14:Y14,B18:Y18,B22:Y22,B26:Y26,B30:Y30,B34:Y34,B38:Y38,B42:Y42" _
).Select
Range("B42").Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With

Range( _
"C4:Y4,C8:Y8,C12:Y12,C16:Y16,C20:Y20,C24:Y24,F28:Y28,C28:E28,C32:Y32,C36:Y36,C40:Y40,C44:Y44" _
).Select
Range("C44").Activate
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With

End Sub



Mais je n'arrive pas :
- à ajouter la couleur jaune (255,255,0) ou rien.
- à mettre les probabilités comme pas plus de 4 cases jaune sur une colonne
- pas plus de 4 cases bleues sur une colonnes

Pour ce qui est des lignes ou j'ai peut être été mal compris. Une ligne principale, représentant une personne, est composée de 3 lignes (I3,I4,I5 ou I7,I8,I9,...)
I3 et I5 ou I7 et I9,... sont comme associées et fonctionnent ensemble. C'est à dire que sur ces deux lignes (I3 et I5 ou I7 et I9,... ) il doit y avoir 50% de cases colorées sur la première (I3, I7, ...) et 50% sur l'autre (I5, I9, ...). Il ne peut y a voir une case coloré en I3 et en I5 par exemple. Ça doit les colorer en jaune ou bleu aléatoirement en essayant d'en faire quand même autant. C'est à dire quasiment autant de jaune que de bleu sur les deux lignes (I3 et I5, I7 et I9,...).

J'espère avoir été un peu plus claire...
Messages postés
14738
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 novembre 2020
148
Bonjour,

Penses à utiliser la balise de code, c'est plus pratique.

Je répond à ta question :
Cells(J, I).Interior.Color = RGB(83, 142, 213) And RGB(255, 255, 0)
En gros, tu ferais
Cells(J, I).Interior.Color = RGB(83, 142, 0)
Ce serait la même chose.

Pas besoin de Activate no Select dans :

Range( _
"B6:Y6,B10:Y10,B14:Y14,B18:Y18,B22:Y22,B26:Y26,B30:Y30,B34:Y34,B38:Y38,B42:Y42" _
).Select
Range("B42").Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With 


With Range( _
"B6:Y6,B10:Y10,B14:Y14,B18:Y18,B22:Y22,B26:Y26,B30:Y30,B34:Y34,B38:Y38,B42:Y42" _
).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With 

Ou encore :
Dim lSelection As Range
Set lSelection = Range( _
"B6:Y6,B10:Y10,B14:Y14,B18:Y18,B22:Y22,B26:Y26,B30:Y30,B34:Y34,B38:Y38,B42:Y42" _
)
With lSelection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With 


Fait la même chose.

Regardes du coté de "For Each", de "Randomize" et de "Rnd".

On peut discuter avec celui qui sait.
On peut discuter avec celui qui ne sait pas.
On ne peut pas discuter avec celui qui croit savoir.
En VB.NET pensez à activer "Option Explicit" et "Option Strict"
Messages postés
3
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
27 septembre 2013

Je suis venu ici pour trouver de l'aide et non pour me faire agresser. Si tu ne sais pas répondre, si tu ne comprends pas mon problème rien ne t'oblige à répondre.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bien...
Bonne chance.