XL 2016 Color par Vba

karinette

XLDnaute Occasionnel
Bonjour à tous.
J'ai une macro qui me colorise mes cellules via le code du Colorindex :

Sub p_f()
Dim plage As Range
Set plage = Intersect(Selection, Range("C8:AK44"))
If Not Intersect(ActiveCell, Range("C8:AK44")) Is Nothing Then
ActiveSheet.Unprotect "w*w*w*"
With plage.Interior
.ColorIndex = Range("OPTIONS!D42").Value
.Pattern = xlSolid
End With
plage.Font.ColorIndex = 0
plage.Font.Bold = True
plage.FormulaR1C1 = Range("OPTIONS!C42").Value
ActiveSheet.Protect "w*w*w*", UserInterfaceOnly:=True
Else
MsgBox "Mauvaise plage de selection"
End If
End Sub


Ce que j'aimerais, c'est remplacer la valeur de la cellule D42 par une valeur Hex du type "#FFFFFF".
J'ai essayé de modifier des bouts de code mais sans succès ...
Merci de votre aide
 

karinette

XLDnaute Occasionnel
Bonjour
une piste à essayer
pour les valeur hex ou rgb, au lieu de .colorindex, utilise la propriété .Color

Oui, j'ai trouvé ça qui fonctionne :

.Color = hexa_color("#FF99FF")

Il me fallait juste l'autre macro qui allait avec :

Function hexa_color(ByVal hexa) 'Returns -1 in case of error

If Len(hexa) = 7 Then hexa = Mid(hexa, 2, 6) 'If color with #

If Len(hexa) = 6 Then

num_array = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f")

char1 = LCase(Mid(hexa, 1, 1))
char2 = LCase(Mid(hexa, 2, 1))
char3 = LCase(Mid(hexa, 3, 1))
char4 = LCase(Mid(hexa, 4, 1))
char5 = LCase(Mid(hexa, 5, 1))
char6 = LCase(Mid(hexa, 6, 1))

For i = 0 To 15
If (char1 = num_array(i)) Then position1 = i
If (char2 = num_array(i)) Then position2 = i
If (char3 = num_array(i)) Then position3 = i
If (char4 = num_array(i)) Then position4 = i
If (char5 = num_array(i)) Then position5 = i
If (char6 = num_array(i)) Then position6 = i
Next

If IsEmpty(position1) Or IsEmpty(position2) Or IsEmpty(position3) Or IsEmpty(position4) Or IsEmpty(position5) Or IsEmpty(position6) Then
hexa_color = -1
Else
hexa_color = RGB(position1 * 16 + position2, position3 * 16 + position4, position5 * 16 + position6)
End If

Else
hexa_color = -1
End If

End Function

 

Dranreb

XLDnaute Barbatruc
Bonjour.
Il y a plus simple en VBA pour convertir un String hexadécimal Hx en Long :
.Color = Val("&H" & Hx & "&")
Attention lorsqu'un code couleur hexa d'un source externe à VBA commence par "#", le rouge et le bleu y sont souvent intervertis.

Citons aussi mon module de classe Couleur capable de calculer un code de couleur à partir de 3 spécifications intuitives E, A et F ou E, H et J.
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
99

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG