web-dev-qa-db-fra.com

Excel: définir la couleur d'arrière-plan de la cellule sur la valeur rgb des données dans la cellule

J'ai une colonne contenant des valeurs rgb, par exemple

127,187,199
67,22,94

Dans Excel, y a-t-il un moyen de l'utiliser pour définir la couleur d'arrière-plan de la cellule?

28
Internet man

Vous pouvez utiliser VBA - quelque chose comme 

Range("A1:A6").Interior.Color = RGB(127,187,199)

Il suffit de passer dans la valeur de la cellule.

50
Galwegian

Définir la propriété Color seule garantira une correspondance exacte. Excel 2003 ne peut gérer que 56 couleurs à la fois. La bonne nouvelle est que vous pouvez affecter n'importe quelle valeur rgb à ces 56 emplacements (appelés ColorIndexs). Lorsque vous définissez la couleur d'une cellule à l'aide de la propriété Color, Excel utilise le "ColorIndex" le plus proche. Exemple: Définir une cellule sur RVB 10,20,50 (ou 3281930) entraînera le réglage de celle-ci sur l'indice de couleur 56, qui est 51,51,51 (ou 3355443). 

Si vous voulez être sûr d'avoir une correspondance exacte, vous devez remplacer un ColorIndex par la valeur RVB de votre choix, puis modifier l'indicateur ColorIndex de la cellule. Toutefois, vous devez savoir qu'en modifiant la valeur d'un index de couleur, vous modifiez la couleur deall cells en utilisant déjà cette couleur dans le classeur. Par exemple, Red est ColorIndex 3. Ainsi, toute cellule que vous avez définie en rouge a effectivement été créée avec ColorIndex 3. Et si vous redéfinissez ColorIndex 3 en violet, votre cellule deviendra alors violette, mais tous les autres globules rouges du Le classeur sera également changé en violet. 

Il existe plusieurs stratégies pour y remédier. Une solution consiste à choisir un index qui n'est pas encore utilisé, ou tout simplement un indice qui, selon vous, ne sera probablement pas utilisé. Une autre solution consiste à modifier la valeur RVB du le plus proche ColorIndex afin que votre modification soit subtile. Le code que j'ai posté ci-dessous adopte cette approche. Tirant parti du fait que le ColorIndex le plus proche est attribué, il attribue la valeur RVB directement à la cellule (produisant ainsi la couleur la plus proche), puis attribue la valeur RVB à cet index. 

Sub Example()
    Dim lngColor As Long
    lngColor = RGB(10, 20, 50)
    With Range("A1").Interior
        .Color = lngColor
        ActiveWorkbook.Colors(.ColorIndex) = lngColor
    End With
End Sub
18
Oorang

Les cellules ne peuvent pas être modifiées à partir d'une fonction VBA utilisée comme formule de feuille de calcul. Sauf via cette solution de contournement ...

Mettez cette fonction dans un nouveau module:

Function SetRGB(x As Range, R As Byte, G As Byte, B As Byte)
  On Error Resume Next
  x.Interior.Color = RGB(R, G, B)
  x.Font.Color = IIf(0.299 * R + 0.587 * G + 0.114 * B < 128, vbWhite, vbBlack)
End Function

Puis utilisez cette formule dans votre feuille, par exemple dans la cellule D2:

=HYPERLINK(SetRGB(D2;A2;B2;C2);"HOVER!")

Une fois que vous passez la souris sur la cellule (essayez-le!), La couleur d'arrière-plan est modifiée en RVB à partir des cellules A2 à C2. La couleur de la police est un blanc ou noir contrastant.

3
Michel de Ruiter

Sub AddColor () Pour chaque cellule dans la sélection R = Round (cell.Value) G = Round (cell.Offset (0, 1) .Value) B = Round (cell.Offset (0, 2). Value) Cellules (cell.Row, 1). Redimensionner (1, 4) .Couleur intérieure = RGB (R, V, B). Cellule suivante End Sub

En supposant qu'il y ait 3 colonnes R, G et B (dans cet ordre). Sélectionnez la première colonne, c’est-à-dire R., appuyez sur alt + F11 et exécutez le code ci-dessus. Nous devons sélectionner la première colonne (contenant les valeurs R ou rouges) et exécuter le code à chaque fois que nous modifions les valeurs pour refléter les modifications. 

J'espère que ce code plus simple aide!

0
Amrit Pal Singh

Pour colorer chaque cellule en fonction de sa valeur entière actuelle, ce qui suit devrait fonctionner si vous disposez d'une version récente d'Excel. (Les versions plus anciennes ne gèrent pas aussi bien rgb)

Sub Colourise()
'
' Colourise Macro
'
' Colours all selected cells, based on their current integer rgb value
' For e.g. (it's a bit backward from what you might expect)
' 255 = #ff0000 = red
' 256*255 = #00ff00 = green
' 256*256*255 #0000ff = blue
' 255 + 256*256*255 #ff00ff = Magenta
' and so on...
'
' Keyboard Shortcut: Ctrl+Shift+C (or whatever you want to set it to)
'
  For Each cell In Selection
    If WorksheetFunction.IsNumber(cell) Then
      cell.Interior.Color = cell.Value
    End If
  Next cell
End Sub

Si au lieu d'un nombre, vous avez une chaîne, vous pouvez la scinder en trois nombres et les combiner à l'aide de rgb (). 

0
Ben Aveling