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

10 réponses

1 2
Avatar
jps
bonsoir patrick
vite fait car je retourne au match...
tout noir parce que ta fusion équivaut à reproduire la couleur de A1 et A1
correspond au noir ; mais c'est vrai que le fait de défusionner n'était pas
obligé de te redonner des couleurs...si je puis dire
une fois de plus, excel a des raisons que la raison ne connaît pas
jps

"Patrick BASTARD" a écrit dans le
message de news:
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




Avatar
JacquesH
Bonjour,

J'ai été très intéressé par cette "trouvaille" et cela m'a fait penser
à une application éventuelle.

Mais est-ce possible de le réaliser sur une zone autre que 56 cellules
consécutives dans une colonne. Par exemple : une zone de D4 à J11, soit
7 x 8 cellules ?

J'ai essayé :
For i = D4 To J11
With Cells(i, 1).Interior
.ColorIndex = i
End With
Next

Mais cela bloque sur la seconde ligne et évidemment, je ne sais pas quoi
modifier (et surtout par quoi le faire).

Merci d'avance.

Jacques

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 ?



Avatar
Pierre Fauconnier
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?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

Merci d'avance.

Jacques

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 ?





Avatar
JacquesH
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
En fait, il faut supprimer la ligne
cells(i,j) = index_couleur
et tu n'auras plus de problèmes de 0 qui apparaît.

J'avais ajouté cette ligne pour que l'on puisse voir le code couleur dans la
cellule ( pour les cellules noires, dont le code est 0 )

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"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
Modeste
Bonsour®JacquesH
par exemple :

Sub JH()
i = 1
For Each cellule In Range("D4:J11")
cellule.Interior.ColorIndex = i
i = i + 1
Next
End Sub

;o))
@+
Avatar
JacquesH
Ok, tout est parfait,
Merci encore une fois.

Jacques

En fait, il faut supprimer la ligne
cells(i,j) = index_couleur
et tu n'auras plus de problèmes de 0 qui apparaît.

J'avais ajouté cette ligne pour que l'on puisse voir le code couleur dans la
cellule ( pour les cellules noires, dont le code est 0 )

Ok?




Avatar
Pierre Fauconnier
Quelle concision... ;-)

Bravo et merci


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Modeste" a écrit dans le message de news:

Bonsour®JacquesH
par exemple :

Sub JH()
i = 1
For Each cellule In Range("D4:J11")
cellule.Interior.ColorIndex = i
i = i + 1
Next
End Sub

;o))
@+




Avatar
JacquesH
Merci également.

Jacques

Bonsour®JacquesH
par exemple :

Sub JH()
i = 1
For Each cellule In Range("D4:J11")
cellule.Interior.ColorIndex = i
i = i + 1
Next
End Sub

;o))
@+




Avatar
Pierre Fauconnier
Le seul avantage que je vois à ma méthode est que l'on peut choisir l'ordre
d'itération des cellules en mettant
for i = ...
for j = ...

ou
for j = ...
for i = ...

et en ajoutant ta variable pour le colorindex, puisqu'il semble que VBA
calcule lui-même le modulo lorsque l'on dépasse 56, ce que j'ignorais...

Bo, d'ac, c'est juste pour justifier mes cogitations...

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Modeste" a écrit dans le message de news:

Bonsour®JacquesH
par exemple :

Sub JH()
i = 1
For Each cellule In Range("D4:J11")
cellule.Interior.ColorIndex = i
i = i + 1
Next
End Sub

;o))
@+




1 2