OVH Cloud OVH Cloud

Surprenant, nan !!!

12 réponses
Avatar
Patrick BASTARD
Bonsoir, toutes et tous.

Pour faire suite à la réponse de JPS à C15 :

...exécute cette proc et tu sauras tout tout tout sur l'index des
couleurs...

Sub paletteCouleurs()
For i = 1 To 56
With Cells(i, 1).Interior
.ColorIndex = i
End With
Next

J'ai fusionné les cellules A1 à A56 et j'ai lancé cette macro.
Pas de surprise : toute la zone a été colorée en noir.
J'ai ensuite défusionné cette zone, et là :
Surprise : les couleurs ont apparu.

Une explication ?

--
Bien cordialement,
P. Bastard

2 réponses

1 2
Avatar
jps
bonjour jacques
rajoute ceci avant le End Sub et tu ne vois plus le 0

Cells(4, 4).Font.ColorIndex = 2

pourquoi 0? parce que quand la variable "i" = 4, il est quasiment
obligatoire, même dans le beaujolais, que i - 4 = 0...
et même *10, ça fait toujours 0....maintenant, comme je ne comprends rien à
ce *10, si ça pouvait être un nouvel effet de la bonté de pierre de me
l'expliquer....
à suivre
jps

"JacquesH" a écrit dans le message de
news:
Bonjour Pierre,

Merci beaucoup, cela fonctionne très bien et c'est exactement ce que je
voulais.

Il y a cependant un 0 qui apparaît. Ce n'est pas grave, il est facile à
faire disparaître, mais est-ce normal ?

Jacques


Bonjour

Tu dois itérer sur les numéros de ligne et les numéros de colonne.

Dès lors, il faut recalculer l'index des couleurs, en considérant que
dans


ta plage, tu as plus de 57 cellules. Il y avait moyen d'utiliser une
troisième variable pour l'index de couleur, mais j'ai préféré faire le
calcul en partant de i et j, pour l'exemple et surtout pour le
plaisir...


;-)

Voici une macro qui fait cela

Sub Test()
Dim i As Long, j As Long
Dim Couleur_Index As Long

For i = 4 To 11 ' Lignes 4 à 11
For j = 4 To 10 'Colonnes D à J
Couleur_Index = (((i - 4) * 10) + (j - 4)) Mod 57
Cells(i, j).Interior.ColorIndex = Couleur_Index
Cells(i, j) = Couleur_Index
Next j
Next i
End Sub

Cela étant, l'astuce de Patrick ne fonctionne que si les cellules sont
fusionnées avant de spécifier la couleur pour chaque cellule.

Ok?






Avatar
Pierre Fauconnier
Salut JPS,

En fait, j'ai fait très compliqué là ou GeeDee a fait très simple

En considérant que i reprenait la ligne et j la colonne, il fallait qu'une
combinaison de i et j me donne les index de 0 à 56

Cela permet de créer une suite comme suit...
i j Résultat
4 4 0
4 5 1
4 6 2
4 7 3
4 8 4
4 9 5
4 10 6
5 4 10
5 5 11
5 6 12
5 7 13
5 8 14
5 9 15
...

Mais comme, d'une part, on pouvait itérer sur une variable indépendante des
lignes et colonnes, et comme d'autre part Excel comprend que quand tu mets
colorindex = 60, il doit lirecolorindex = 3 ( 60-57 puisqu'il y a 57
couleurs( 0 à 56)), mon clacul savant et mon modulo deviennent totalement
inutiles...



"jps" a écrit dans le message de news:
eb$
bonjour jacques
rajoute ceci avant le End Sub et tu ne vois plus le 0

Cells(4, 4).Font.ColorIndex = 2

pourquoi 0? parce que quand la variable "i" = 4, il est quasiment
obligatoire, même dans le beaujolais, que i - 4 = 0...
et même *10, ça fait toujours 0....maintenant, comme je ne comprends rien
à
ce *10, si ça pouvait être un nouvel effet de la bonté de pierre de me
l'expliquer....
à suivre
jps

"JacquesH" a écrit dans le message
de
news:
Bonjour Pierre,

Merci beaucoup, cela fonctionne très bien et c'est exactement ce que je
voulais.

Il y a cependant un 0 qui apparaît. Ce n'est pas grave, il est facile à
faire disparaître, mais est-ce normal ?

Jacques


Bonjour

Tu dois itérer sur les numéros de ligne et les numéros de colonne.

Dès lors, il faut recalculer l'index des couleurs, en considérant que
dans


ta plage, tu as plus de 57 cellules. Il y avait moyen d'utiliser une
troisième variable pour l'index de couleur, mais j'ai préféré faire le
calcul en partant de i et j, pour l'exemple et surtout pour le
plaisir...


;-)

Voici une macro qui fait cela

Sub Test()
Dim i As Long, j As Long
Dim Couleur_Index As Long

For i = 4 To 11 ' Lignes 4 à 11
For j = 4 To 10 'Colonnes D à J
Couleur_Index = (((i - 4) * 10) + (j - 4)) Mod 57
Cells(i, j).Interior.ColorIndex = Couleur_Index
Cells(i, j) = Couleur_Index
Next j
Next i
End Sub

Cela étant, l'astuce de Patrick ne fonctionne que si les cellules sont
fusionnées avant de spécifier la couleur pour chaque cellule.

Ok?









1 2