Colorer des cellules suivant des conditions

S.Amer123 Messages postés 3 Date d'inscription jeudi 26 septembre 2013 Statut Membre Dernière intervention 27 septembre 2013 - 26 sept. 2013 à 21:27
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 28 sept. 2013 à 16:01
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 sept. 2013 à 21:40
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).
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
26 sept. 2013 à 23:23
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.
0
S.Amer123 Messages postés 3 Date d'inscription jeudi 26 septembre 2013 Statut Membre Dernière intervention 27 septembre 2013
27 sept. 2013 à 12:28
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...
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
Modifié par NHenry le 28/09/2013 à 16:02
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"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
S.Amer123 Messages postés 3 Date d'inscription jeudi 26 septembre 2013 Statut Membre Dernière intervention 27 septembre 2013
26 sept. 2013 à 22:27
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.
-2
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 sept. 2013 à 13:23
Bien...
Bonne chance.
0
Rejoignez-nous