[VBA] Colorer des Cellules Excel suivant plusieurs conditions...

Fermé
S;Amer Messages postés 4 Date d'inscription lundi 30 septembre 2013 Statut Membre Dernière intervention 2 octobre 2013 - 30 sept. 2013 à 20:12
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 - 3 oct. 2013 à 09:38
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) principal représentant une personne. A l'intérieur de chacune de ces lignes il y 3 autres lignes (a, b et c) donc 10 fois a,b et c (j'espère être assez claire dans mon explication...). Il faudrait qu'en cliquant sur un bouton ou en activant la macro, certaines cellules de ce tableau se colorient en jaune ou en bleu de façon automatique mais 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 qui serait déjà colorée dans le tableau avant de lancer la macro 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" bleue (A1a, A2a, ..., A10a pour la colonne A par exemple), pas plus de 2 cellules "a" jaune (A1a, A2a, ..., A10a pour la colonne A par exemple), pas plus de 2 cellules "c" bleue (A1c, A2c, ..., A10c pour la colonne A par exemple) et pas plus de 2 cellules "c" 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.

Voici le début de mon codage

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, 255)
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
A voir également:

2 réponses

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
Modifié par Zoul67 le 30/09/2013 à 21:55
Bonsoir,

Après avoir pris une aspirine, je crois avoir remarqué une anomalie...

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".
soit 30 cellules par ligne principale (1,...,10), càd 300 cellules colorées en tout.

Par ailleurs :
- 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.
soit 8 cellules colorées max par colonne, càd 240 cellules colorées max en tout.

Par ailleurs, c'est assez difficile de faire une macro basée sur des "environ"... si tu as des précisions/corrections à apporter, n'hésite pas.

dans la vie de tous les jours dans mon travail
Funky, ce travail !

A+
0
S;Amer Messages postés 4 Date d'inscription lundi 30 septembre 2013 Statut Membre Dernière intervention 2 octobre 2013
1 oct. 2013 à 17:01
Bonjour,

En effet j'ai du mal détailler.

- Sur une ligne principale (1,2,3...,10) il doit y avoir qu'une case de coloré "a" et "c" confondu. C'est à dire qu'au total sur chaque ligne il ne peut pas y avoir une case de coloré en "a" et en "c". C'est soit l'une soit l'autre. Ce qui fait un total de 30 cellules de colorées en bleue ou en jaune.

- Du coup j'enlève le "environ". Il doit y avoir donc 50% de cellules jaunes et 50% de cellules bleues sur chaque ligne principale (1,2,3,...,10).
ET
50% de cellules colorées en "a" et 50% de cellules colorées en "c".
(Par exemple : 8 cellules jaune en "a", 4 cellules bleue en "a", 4 cellules jaunes en "c" et 8 cellules bleue en "c").

- Le format du tableau :
* colonne : commence en C et fini en Y.
* lignes : commence en 3 et fini en 41. Sachant que les 10 lignes principales sont 1(3,4,5), 2(7,8,9), 3(11,12,13),..., 10(39,40,41).

- Sur les colonnes c'est exacte, il y a au total 200 cellules colorées dans le tableau. Sachant qu'il doit y avoir 4 cellules jaunes et 4 cellules bleues par colonnes (pas plus pas moins)
ET
2 cellules jaunes sur l'ensemble des 10 lignes en "a" ainsi que 2 cellules jaunes sur l'ensemble des 10 lignes en "c" et 2 cellules bleue sur l'ensemble des 10 lignes en "a" ainsi que 2 cellules bleue sur l'ensemble des 10 lignes en "c".

J'espère avoir apporté toutes les précisions nécessaire mais oui comme tu dis Funky ce travail. J'essaye de faire tout ça manuellement mais ça me prend un temps fou à chaque fois.
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
1 oct. 2013 à 19:40
Bonsoir,

Je crois qu'il y a encore une imprécision dans l'énoncé.

Sur une ligne principale (1,2,3...,10) il doit y avoir qu'une case de coloré "a" et "c" confondu. C'est à dire qu'au total sur chaque ligne il ne peut pas y avoir une case de coloré en "a" et en "c". C'est soit l'une soit l'autre. Ce qui fait un total de 30 cellules de colorées en bleue ou en jaune.
Un total de 30 par ligne principale... soit 300 en tout ; veux-tu dire un max de 30 ? Et que un couple (a,c) peut être incolore (ça semblerait confirmé par 4 cellules jaunes + 4 cellules bleues par colonne alors qu'il y a 10 lignes => mais 8 cellules par colonne pour un total de 200 cellules colorées amène à seulement 25 colonnes ?!

Dans tous les cas, ça fait de l'aléatoire à deux dimensions... pas évident !
0
S;Amer Messages postés 4 Date d'inscription lundi 30 septembre 2013 Statut Membre Dernière intervention 2 octobre 2013
2 oct. 2013 à 12:24
Bonjour,

Effectivement vous avez raison il y a une erreur dans ce que j'ai écrit.

Sur le tableau qui fait 25 colonnes il y a au total 200 cellules colorés. Sur les lignes principales il peut en effet y avoir une case "a" et une case "c" vide !!!

La condition sur les colonnes est exacte,
MAIS
la conditions sur les lignes est fausse. Voici la réalité :

- Sur une ligne principale (1,2,3...,10) il doit y avoir qu'une case de coloré "a" et "c" confondu. C'est à dire qu'au total sur chaque ligne il ne peut pas y avoir une case de coloré en "a" et en "c". C'est soit l'une soit l'autre.
MAIS
il peut y avoir un ensemble vide. C'est à dire que en "a" et "c" il n'y a aucune case de colorée.

- Il doit y avoir donc 50% de cellules jaunes et 50% de cellules bleues sur chaque ligne principale (1,2,3,...,10).
ET
50% de cellules colorées en "a" et 50% de cellules colorées en "c".

- Il doit y avoir le même nombre de cellules colorées (plus ou moins 2) sur chaque ligne principales.
(Exemple : ligne 1 : 4 cellules colorées en "a" et 7 cellules colorées en "c"
ligne 2 : 8 cellules colorées en "a" et 4 celules colorées en "c" ...

Mais oui en effet ca reste un codage compliqué c'est pour ça que je viens ici chercher de l'aide. Mais si c'est beaucoup trop compliqué je continuerais dans le manuelle ;)
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
2 oct. 2013 à 13:28
50% de cellules colorées en "a" et 50% de cellules colorées en "c".
est en contradiction avec
4 cellules colorées en "a" et 7 cellules colorées en "c" ...
0
S;Amer Messages postés 4 Date d'inscription lundi 30 septembre 2013 Statut Membre Dernière intervention 2 octobre 2013
2 oct. 2013 à 23:21
Effectivement c'est ça d'écrire trop vite. Désolé je voulais dire

Exemple :
ligne 1 : 5 cellules colorées en "a" et 5 cellules colorées en "c"
ligne 2 : 6 cellules colorées en "a" et 6 cellules colorées en "c"
ligne 3 :6 cellules colorées en "a" et 6 cellules colorées en "c"
...

Ce qui fait le 50% en "a" et le 50% en "c" avec le meme nombre de cellule colorée (+ ou - deux) sur chaque ligne principale.
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
3 oct. 2013 à 09:38
Bonjour,

Je pense qu'il faut créer le caractère aléatoire sur les lignes dans un premier temps, et vérifier que cette sortie aléatoire respecte les critères sur les colonnes.
Pour l'aléatoire sous VBA, je n'ai entendu que de la fonction Rnd.
Donc dans un premier temps forme un mot ("bbbbbjjjjjoo...") avec :
- nb "b", nb étant le nombre de cellules bleues
- nj "j", nj étant le nombre de cellules jaunes
- no "o", no étant le nombre de couples vides (a,c) pour ainsi traiter toutes les colonnes d'une ligne principale
Passe ce mot à la moulinette 'anagramme' (cf. https://forums.commentcamarche.net/forum/affich-26275966-suite-de-lettre-aleatoire-parmi-une-liste-definie#3)
Fais de même avec le mot "aaaaaccccc" avec na=nc=nb.
Ceci te permet de créer les associations b-a b-c j-a j-c pour chaque ligne et de colorer en conséquence.

Pour les conditions sur les colonnes, on verra plus tard.

A+
0