J'ai un tableur de symboles et de couleurs hexagonales correspondantes. Je veux remplir la cellule elle-même (ou celle à côté) avec la couleur hexadécimale à l'intérieur de la cellule. J'ai lu un peu sur le "formatage conditionnel", et je pense que c'est le moyen de le faire.
Comment pourrais-je atteindre le résultat que je voudrais?
Ne peut être atteint avec la mise en forme conditionnelle pour toutes les couleurs.
En supposant que: La ligne 1 contient des étiquettes de données, que le jeu de données ne comporte pas d'espaces vides, la couleur HEX correspond au remplissage et non à la police. et que vous n’avez pas besoin de le faire souvent, la macro ColourCells peut convenir:
Sub ColourCells()
Dim HowMany As Integer
On Error Resume Next
Application.DisplayAlerts = False
HowMany = Application.InputBox _
(Prompt:="Enter last row number.", Title:="To apply to how many rows?", Type:=1)
On Error GoTo 0
Application.DisplayAlerts = True
If HowMany = 0 Then
Exit Sub
Else
Dim i As Integer
For i = 2 To HowMany
Cells(i, 3).Interior.Color = RGB(Cells(i, 3), Cells(i, 4), Cells(i, 5))
Next i
End If
End Sub
et entrez la valeur souhaitée pour n à l'invite.
Exemple de sortie et de formules, etc.:
La fonction RGB () d'Excel crée en fait une valeur BGR (je ne pense pas que quiconque puisse savoir pourquoi dit pourquoi) si bien que Excel affiche les grignotines dans l'ordre inverse. Pour le code, Colonnes3,4,5 était logique, mais je pensais que BGR plutôt que le RVB conventionnel de l’image pouvait paraître étrange. Pour F dans l'image, la valeur C3 (la colonneLEFThand du «trois RVB») est obtenue en appliquant RIGHT () à la couleur Hex.
Modification mineure de la réponse de Jon Peltier. Sa fonction fonctionne presque, mais les couleurs qu'il rend sont incorrectes car Excel sera rendu au format BGR plutôt que RVB. Voici la fonction corrigée, qui permute les paires de valeurs Hex dans l'ordre 'correct':
Sub ColorCellsByHex()
Dim rSelection As Range, rCell As Range, tHex As String
If TypeName(Selection) = "Range" Then
Set rSelection = Selection
For Each rCell In rSelection
tHex = Mid(rCell.Text, 6, 2) & Mid(rCell.Text, 4, 2) & Mid(rCell.Text, 2, 2)
rCell.Interior.Color = WorksheetFunction.Hex2Dec(tHex)
Next
End If
End Sub
Beaucoup plus simple:
ActiveCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(ActiveCell.Text, 2))
Hex2Dec transforme le nombre hexadécimal en une valeur décimale que VBA peut utiliser.
Alors sélectionnez la plage à traiter et lancez ceci:
Sub ColorCellsByHexInCells()
Dim rSelection As Range, rCell As Range
If TypeName(Selection) = "Range" Then
Set rSelection = Selection
For Each rCell In rSelection
rCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(rCell.Text, 2))
Next
End If
End Sub
Pour cela, un formulaire utilisateur peut être créé avec la fonction Hex2Dec.
Function Hex2Dec(n1 As String) As Long
Dim nl1 As Long
Dim nGVal As Long
Dim nSteper As Long
Dim nCount As Long
Dim x As Long
Dim nVal As Long
Dim Stepit As Long
Dim hVal As String
nl1 = Len(n1)
nGVal = 0
nSteper = 16
nCount = 1
For x = nl1 To 1 Step -1
hVal = UCase(Mid$(n1, x, 1))
Select Case hVal
Case "A"
nVal = 10
Case "B"
nVal = 11
Case "C"
nVal = 12
Case "D"
nVal = 13
Case "E"
nVal = 14
Case "F"
nVal = 15
Case Else
nVal = Val(hVal)
End Select
Stepit = (nSteper ^ (nCount - 1))
nGVal = nGVal + nVal * Stepit
nCount = nCount + 1
Next x
Hex2Dec = nGVal
End Function
...
UserForm1.TextBox1 = "RGB(" & Hex2Dec(UserForm1.txtHex1.Value) & "," & _
Hex2Dec(UserForm1.txtHex2.Value) & "," & Hex2Dec(UserForm1.txtHex3.Value) & ")"
Par exemple, la valeur entrée dans la zone de texte: # FF8800 - Résultat: RGB (255, 136,0)