Bonsoir,
J'ai programmé une macro qui trace une surface 3D. Je voudrais gérer les couleurs de la légende de ce graphique de manière à avoir un joli dégradé.
Le problème est que le nombre de niveaux dans mon graphique 3D n'est jamais le même. Donc il faut que je recalcule les couleurs de mon dégradé à chaque fois que le nombre de niveaux varie. Pour ce faire, voici comment j'ai procédé.
Au départ, j'ai choisi dans la palette de couleur une saturation et une luminance. Puis en faisant varier la teinte, j'ai trouvé les bornes de mon dégradé.
Le problème est à présent de passer d'un codage TSL à un codage RGB.
En fait c'est juste un changement de repère comme c'est expliqué ici.
Voici le code qui me permet de passer de TSL à RGB:
Cela fonctionne mais ne me donne pas entièrement satisfaction: les changements de couleur sont trop brusques, on dirait qu'il n'y a pas de réel dégradé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 Option Explicit Sub degrade() Dim T As Integer 'Teinte Dim S As Integer 'Saturation Dim L As Integer 'Luminance Dim T0 As Single Dim GM As Single 'Grand M Dim pm As Single 'Petit m Dim Delta As Single Dim Vmax As Integer Dim Tmax As Integer Dim Lmax As Integer Dim Smax As Integer Dim i As Integer Dim R As Integer Dim G As Integer Dim B As Integer Vmax = 255 Tmax = 240 Lmax = 240 Smax = 240 S = 201 L = 138 For T = 0 To 175 T0 = 6 * T / Tmax If L <= Lmax / 2 Then GM = Vmax * (L / Lmax) * (1 + S / Smax) pm = Vmax * (L / Lmax) * (1 - S / Smax) ElseIf L > Lmax / 2 Then GM = Vmax * ((L / Lmax) * (1 - S / Smax) + S / Smax) pm = Vmax * ((L / Lmax) * (1 + S / Smax) - S / Smax) End If Delta = GM - pm i = Int(T0) Select Case i Case 0 B = pm G = pm + T0 * Delta R = GM Case 1 B = pm R = pm + (2 - T0) * Delta G = GM Case 2 R = pm B = pm + (T0 - 2) * Delta G = GM Case 3 R = pm G = pm + (4 - T0) * Delta B = GM Case 4 G = pm R = pm + (T0 - 4) * Delta B = GM Case 5 G = pm B = pm + (6 - T0) * Delta R = GM End Select Application.Workbooks(1).Worksheets(1).Cells(T + 1, 1).Interior.Color = RGB(R, G, B) Next End Sub
J'ai cherché sur le forum mais j'ai pas trouvé grand chose sur les dégradés et le tutoriel de SilkyRoad ne correspond pas vraiment à ce que je veux faire.
Merci.
Partager