cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 2014
-
24 janv. 2006 à 11:40
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 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
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202172 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
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 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ï
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 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
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202172 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)
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 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
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 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...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202172 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)
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 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)