Copiar color de celda según contenido (variante)

En la misma Hoja tengo una base de datos ( Buscar V) donde en unas determinadas celdas aparecen las provincias según la comunidad autónoma que has seleccionado en "B4"
En la columna "B" tengo validación a dichas celdas por lo que me aparece un desplegable con las provincias según la comunidad autónoma seleccionada en "B4", hasta aquí todo bien.
Necesito adjudicarle a cada provincia un color de fondo en las celdas de la columna "B", pero con la particularidad de poder cambiarlo cuantas veces necesite y que si en un desplegable de una celda de la columna "B" selecciono una provincia me aporte también el color,
no se si tengo que poner celdas con el nombre de la provincia y el color en una misma celda o en celdas distintas,
tengo: Private Sub Worksheet_Change(ByVal Target As Excel. Range)
'Asigna color segun provincia insertada en Hoja Datos
Set Relcell = Range("B7:B28")
If Not Application.Intersect(Relcell, Range(Target.Address(False, False))) Is Nothing Then
Application.EnableEvents = False
Select Case UCase(Trim(Target.Value))
Case "ÁLAVA"
Target.Interior.ColorIndex = RGB(80, 237, 194)
La idea es que el color en vez de decirle el color que es, decirle que lo copie de una celda determinada, por ejemplo en H2 tengo Alicante con fondo amarillo, o en H2 tengo Alicante y en I2 tengo la celda sin valor y con fondo amarillo

3 respuestas

Respuesta
1
Esta macro y comprueba si te soluciona tu problema:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$7" Then
If Target.Value = "ALAVA" Then
Target.Interior.ColorIndex = Range("F7").Interior.ColorIndex
End If
End If
End Sub
Tan solo le dices de donde tiene que tomar el color. Si necesitas alguna aclaración me lo dices.
>Un saludo
>Julio
PD: Puntúa y finaliza la consulta, si quieres dejar un comentario es bienvenido.
Soy muy novato en sba y he puesto la macro y no me funciona he itentado ponerla tal cual y no funciona y sustituyendo en mi macro por esta en la parte de la provincia alaba tampoco me funciona, me tiene que valerpara que coloree la celda independientemente de la altura de la fila B en que la ponga
Vamos a ver si lo hacemos correctamente, para colocar la macro debes de hacerlo así:
1º Estando en tu hoja de Excel (supongamos que es la Hoja1) pulsas Alt+F11 y se abrirá el editor de VBA en la columna de la izquierda verás los objetos que contiene el Libro que por defecto son Hoja1, Hoja2, Hoja3 y ThisWorkbook. Como estamos en la Hoja1 hacemos doble click sobre ese icono (Hoja1) y se te abrirá una pantalla en blanco en esa pantalla copias y pegas esta macro:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Colunm=2 Then
If Target.Value = "ALAVA" Then
Target.Interior.ColorIndex = Range("F7").Interior.ColorIndex
End If
End If
End Sub
Esta macro comprueba que estés en la Col B(2) que en la celda esté escrito ALABA y si es así copia el color de la celda F7 y lo pega en la celda donde escribiste ALABA, si quieres poner un color diferente dependiendo de los valores que escribas o selecciones de una lista para cada provincia tendrás que seguir poniendo instrucciones y tener una tabla de colores en celdas diferentes:
If Target.Value="ASTURIAS"
Target.Interior.ColorIndex = Range("C7").Interior.ColorIndex
En fin que tendrás que ir llenando la macro con todos los datos, tantas provincias diferentes tantas lineas, si quieres colorear por ejemplo un grupo con el mismo color quedaría así:
If Target.Value="ALAVA" Or Target.Value="VIZCAYA" Or Target.Value="GUIPUZCOA" Then
Target.Interior.ColorIndex = Range("C7").Interior.ColorIndex
Vas añadiendo Or y coloreas el conjunto de provincias a tu conveniencia.
Esperemos que me hayas entendido.
>Un saludo
>Julio
Respuesta
1
Te dejo la rutina ajustada, no necesitas el Select Case si lo único que se intenta es darle un color.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Asigna color segun provincia insertada en Hoja Datos
Set Relcell = Range("B7:B28")
If Not Application.Intersect(Relcell, Range(Target.Address(False, False))) Is Nothing Then
dato = Target.Value
Set busco = ActiveSheet.Range("H2:H50").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then
Target.Interior.ColorIndex = busco.Offset(0, 1).Interior.ColorIndex
End If
Set busco = Nothing
End If
Set Relcell = Nothing
End Sub
Aquí construí una lista en col H y los colores en col I, pero si los colores estarán en la misma col H, quítale el Offset que te marqué con negrita.
Sdos
Elsa
http://aplicaexcel.galeon.com/manuales.htm
Olvidé explicar porqué no comparo con el valor seleccionado de la lista (ALABA), por si otro usuario la lee y no le queda claro.
La col H supuestamente tendrá la lista de valores posibles y a continuación su color.
Entonces se busca en esa col el target, es decir el valor que ha tomado la celda con la selección del desplegable. Si lo encuentra, busca el color.
Esto así te sirve para cualquier valor, sin necesidad de evaluar 1 x 1.
Sdos
Elsa
Respuesta
Igual es medio complicado explicarlo de esta forma, pero en el fondo lo que tal vez tendrías que hacer es usar la instrucción while - wend o sea que busque hasta que cumpla una condición especifica y cuando encuentra la celda con el valor ingresado se pare y tome el color del fondo de la celda y lo aplique a la celda que se esta ingresando si es que entiendo es lo que necesitas.
Cualquier cosa estoy para ayudarte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas