RGB Excel VB

Résolu
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 - 24 janv. 2006 à 11:40
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 15 févr. 2006 à 13:57
Bonjour,

J'ai un petit soucis :
Lorsque je récupère la couleur d'un control VB et que j'essai de l'affecter à une cellule excel la couleur est différente

j'ai essayé en convertissant la valeur du control VB en RGB en faisant :
Dim N As Long, Ref As Integer
Ref = 256
N = CLng(Valeur)
R = N Mod Ref
G = (N / Ref) Mod Ref
B = ((N / Ref) ^ 2) Mod Ref


RGB(R, G, B)

Mais la couleur est différente aussi

Heu, au secours...
A voir également:

17 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 janv. 2006 à 14:46
Comme je te l'ai dit, Excel utilise des palettes.
si tu modifie la propriété Color de ta cellule, Excel va chercher dans sa palette, la couleur la plus proche, et l'utiliser.
ca explique pourquoi la valeur affectée est différente de la valeur récupérée par la suite

si tu veux utiliser une couleur issue d'une valeur RGB, il te faudra donc la placer dans la palette....

soit en faisant :
ActiveWorkbook.Colors(1) = RGB(238, 145, 154)
r.Interior.Color = RGB(238, 145, 154)

soit en faisant :
ActiveWorkbook.Colors(1) = RGB(238, 145, 154)
r.Interior.ColorIndex = 1

(le 1 est ici arbitraire)

Renfield
Admin CodeS-SourceS - MVP Visual Basic
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 janv. 2006 à 15:14
OleTranslateColor permet simplement de convertir les constantes correspondant aux couleurs systeme (vbWindowBackground, etc) en leur valeur RGB...

là, tu changes d'énoncé ^^

Renfield
Admin CodeS-SourceS - MVP Visual Basic
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 janv. 2006 à 12:39
VB utilise la notation Bleu Vert Rouge....

Excel utilise des palettes

la cause de ton probleme doit se trouver entre les deux

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
24 janv. 2006 à 13:48
Merci pour ta réponse, mais je viens de trouver ce qui cloche :
Excel est mal foutu : V=Cells(1,1).interior.color
ne donne pas la même couleur dans l'autre sens :
Cells(1,1).interior.color=V

Il faut passer une valeur hexadecimal à Excel

Va falloir que je travail là dessus vu que j'ai pas encore regarder la conversion d'un long en Hexa
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 janv. 2006 à 13:52
"il faut passer une valeur hexadecimale"

j'en doute.... hexa ou pas, c'est juste un changement de forme (de base, pour etre exact).... la valeur est la même ...

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
24 janv. 2006 à 13:59
Ben fais un test tu verras...
Affecte une couleur à une cellule
Et par le code donne la même valeur de couleur à une autre...
Et si ça marche je suis tout ouï
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
24 janv. 2006 à 14:28
Comment peut-on faire pour convertir ça : 16777215
en ça (reconnaissable par VBExcel comme étant une valeur de couleur) : &H00FFFFFF&
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
24 janv. 2006 à 15:03
Non je viens de trouver ce qu'il faut :
Private Declare Function TranslateColor Lib "olepro32.dll" Alias "OleTranslateColor" _
(ByVal clr As OLE_COLOR, ByVal palet As Long, col As Long) As Long


Public Function fnTranslateColor(ByVal C)
On Error GoTo Er
Dim RealColor As Long
Dim L As Long
L = CLng(C)
TranslateColor L, 0, RealColor
fnTranslateColor = RealColor
Exit Function
Er:
modMsg.fnMsgCr Err.Description
End Function

Merci tout de même de ton aide
A+
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
24 janv. 2006 à 15:15
oups mais heu pourquoi ça semble fonctionné ?...
le rgb je l'ai testé déja (comme je l'ai au départ)
mais ça n'avait pas bien marché...
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
24 janv. 2006 à 15:20
Ah ok je vois pourquoi...
Il fallait faire :
red = rgbValue And &HFF&
green = (rgbValue And &HFF00&) \ &HFF&
blue = rgbValue \ &HFF00&

C'est donc bien une question de RGB

Merci beaucoup de ton aide
A+
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 janv. 2006 à 15:25
le TranslateColor peut etre utiliser.... il faut tester si tu as affaire a une couleur systeme ou non, et recuperer la valeur RGB en conséquence (en utilisant TranslateColor ou non)

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
15 févr. 2006 à 09:12
ça merde encore...
Y a plein de couleurs qui ne passent pas... exemple : 12632319
ou encore : 12640511

Avec mon code :
...
fMAIN.Cells(Y, X).Interior.Color = modColor.fnConvColor(Fond)
...
Public Sub sbConvRGB(Valeur, ByRef R As Integer, ByRef G As Integer, ByRef B As Integer)
On Error Resume Next
Dim N As Long, Ref As Integer
Ref = 256
N = CLng(Valeur)
R = N And &HFF&
G = (N And &HFF00&) \ &HFF&
B = N \ &HFF00&
End Sub


Public Function fnConvColor(Valeur)
On Error Resume Next
Dim R As Integer, G As Integer, B As Integer
sbConvRGB Valeur, R, G, B
fnConvColor = RGB(R, G, B)
End Function

besoins d'aide..
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 févr. 2006 à 09:23
si tu veux utiliser une couleur issue d'une valeur RGB, il te faudra donc la placer dans la palette....

soit en faisant :
ActiveWorkbook.Colors(1) = RGB(238, 145, 154)
r.Interior.Color = RGB(238, 145, 154)

soit en faisant :
ActiveWorkbook.Colors(1) = RGB(238, 145, 154)
r.Interior.ColorIndex = 1

(le 1 est ici arbitraire)

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
15 févr. 2006 à 09:37
le problème de ta technique c'est que ça change les index
or ça limite les couleurs à 56
sans compté que ça modifie les couleurs de référence d'excel...

donc gros problème
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 févr. 2006 à 13:16
Excel joue avec une palette...
si tes couleurs 12640511 ou 12632319 ne sont pas dans la palette, Excel va prendre la couleur la plus proche s'y trouvant.

il n'est nullement interdit de moficier la palette, pour arriver a tes fins.... (cette palette est propre a ton classeur)

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
15 févr. 2006 à 13:48
le problème est que je voulais gérer 72 couleur or Excel n'en gère que 56. En plus, ces 72 couleurs ne devais pas interférer avec les couleurs d'excel pré-établies.

Bref j'ai du changer d'optique et faire un truc plus null

car lorsque je changeais un index de la palette ça changeait toutes les cellules dont la propriété color correspondait à ce colorindex

(Bref j'espère qu'ils vont s'améliorer de ce coté là avec la nouvelle version managée)

Merci quand même de ton aide et de ton attention
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 févr. 2006 à 13:57
je connaissai pas cette limite de 56 couleurs, et ne comprend pas pourquoi Excel a conservé cette contrainte, de la palette...

72 couleurs, ca passera donc pas, dsl que tes efforts aient été anéantis

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
Rejoignez-nous