RGB Excel VB [Résolu]

cs_eldim 961 Messages postés lundi 30 mai 2005Date d'inscription 21 août 2014 Dernière intervention - 24 janv. 2006 à 11:40 - Dernière réponse : Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention
- 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...
Afficher la suite 

17 réponses

Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 24 janv. 2006 à 14:46
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 24 janv. 2006 à 15:14
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 24 janv. 2006 à 12:39
0
Utile
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
cs_eldim 961 Messages postés lundi 30 mai 2005Date d'inscription 21 août 2014 Dernière intervention - 24 janv. 2006 à 13:48
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 24 janv. 2006 à 13:52
0
Utile
"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
cs_eldim 961 Messages postés lundi 30 mai 2005Date d'inscription 21 août 2014 Dernière intervention - 24 janv. 2006 à 13:59
0
Utile
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ï
cs_eldim 961 Messages postés lundi 30 mai 2005Date d'inscription 21 août 2014 Dernière intervention - 24 janv. 2006 à 14:28
0
Utile
Comment peut-on faire pour convertir ça : 16777215
en ça (reconnaissable par VBExcel comme étant une valeur de couleur) : &H00FFFFFF&
cs_eldim 961 Messages postés lundi 30 mai 2005Date d'inscription 21 août 2014 Dernière intervention - 24 janv. 2006 à 15:03
0
Utile
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+
cs_eldim 961 Messages postés lundi 30 mai 2005Date d'inscription 21 août 2014 Dernière intervention - 24 janv. 2006 à 15:15
0
Utile
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é...
cs_eldim 961 Messages postés lundi 30 mai 2005Date d'inscription 21 août 2014 Dernière intervention - 24 janv. 2006 à 15:20
0
Utile
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+
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 24 janv. 2006 à 15:25
0
Utile
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
cs_eldim 961 Messages postés lundi 30 mai 2005Date d'inscription 21 août 2014 Dernière intervention - 15 févr. 2006 à 09:12
0
Utile
ç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..
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 15 févr. 2006 à 09:23
0
Utile
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
cs_eldim 961 Messages postés lundi 30 mai 2005Date d'inscription 21 août 2014 Dernière intervention - 15 févr. 2006 à 09:37
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 15 févr. 2006 à 13:16
0
Utile
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
cs_eldim 961 Messages postés lundi 30 mai 2005Date d'inscription 21 août 2014 Dernière intervention - 15 févr. 2006 à 13:48
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 15 févr. 2006 à 13:57
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.