Función VBA para colorear fondo de celda según variable de una celda

Dante Amor y distinguidos(as):

Tengo un dilema el que no he podido solucionar hasta ahora con Formato Condicional y me han dicho que VBA es lo ideal para poder ejecutar la macro en cualquier parte del archivo Excel. Además se puede exportar el archivo .bas a cualquier otro documento de este tipo.

La idea: los colores de fondo de estas celdas, deberán cambiar conforme al arículo. Si al cliente 1 le cambio de VESTIDO NOCHE a VESTIDO NIÑA (porque me podría equivocar al digitar), deberían cambiar esos colores disponibles del producto. Creo importante mencionar que el artículo se encuentra dentro de una lista desplegable (DropDownList).

Adjunto un enlace donde tengo el archivo de ejemplo: https://www.dropbox.com/s/2qytjjeu33qtj1j/PROYECTO.xlsx?dl=0 

2 respuestas

Respuesta
2

Es posible realizar esto con Formato condicional, con fórmulas. Pero considerando que son 5 col * 7 productos será más rápido con esta macro.

Debes entrar al Editor, seleccionar con doble clic el objeto HOJA (del panel a tu izquierda) y allí copia esto:

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'controla cambios en col D, a partir de fila 3
If Target.Column <> 4 Or Target.Row < 3 Then Exit Sub
'si la celda queda vacía se quita color
If Target.Value = "" Then
Range("F" & Target.Row & ":N" & Target.Row).Interior.Pattern = xlNone
End If 
'según el valor serán los colores
Select Case Target.Value
Case Is = "VESTIDO NOCHE"
Range("F" & Target.Row).Interior.Color = 255   'rojo
Range("H" & Target.Row).Interior.Color = 12611584   'celeste oscuro
'continuar con el resto de colores para este artículo
Case Is = "VESTIDO NIÑA"
'completar con el resto de los artículos y colores en las 5 col
End Select
End Sub

Solo dejé 2 colores para el primer artículo.... debes seguir el ejemplo para completar el resto.

Para conocer el nro de color, encendé la grabadora de macros (el botoncito en la barra de estado) y asigná en algún rango auxiliar cada color. Al detener la grabadora encontrarás las instrucciones con los nros.

Vas a ver varias líneas de código por cada celda, pero aquí solo interesa el nro de color tal como va en el ejemplo.

Cuando la tengas lista, si necesitas que la vuelva a revisar dejá escrita la macro aquí o subí nuevamente el libro.

Saludos Elsa Matilde , muchas gracias por tu respuesta. La voy a analizar dentro de la tarde o mañana en la mañana; en estos momentos me estoy cabeceando con un problema en Access de otro cliente, pero en fin.

Tu código me parece bueno, solo me asaltan algunas dudas como:

  1. Con la propiedad Interior.Color ¿Puedo usar RGB?
  2. En vez de definir "VESTIDO NOCHE" ¿Puedo asignarle como referencia una celda de una hoja específica? (Que no es la misma donde voy a aplicar la función).
  3. ¿Se puede codificar de tal forma que pueda utilizar la función desde una celda invocándola con "=" y definir la celda donde se mantiene la variable? Por ejemplo: =BackColor(A1).

Muchas gracias desde ya por el apoyo brindado. Espero respuesta también de Dante Amor , quien me ha ayudado bastante a entender un poco más y sacudir las telas de araña de mi cabeza que está con los engranajes un poco oxidados en cuanto a programación se refiere.

Te respondí la consulta porque iba dirigida a todos. Solo espero que no te hagas lío si recibiendo 2 respuestas diferentes ;) he visto usuarios que colocaban los 2 códigos y claro ... un desastre de duplicidad.

Paso a tus consultas:

1- Podés utilizar cualquiera de estas otras instrucciones:

Range("B28"). Interior. ColorIndex = 5 'si colocas la palabra ColorIndex en la Ayuda se te mostrará la paleta con todos sus números de color

Range("B29"). Interior.Color = RGB(255, 0, 0)   'combinación RGB

2- Si es posible, por ej:

Case Is = Sheets("Hoja2").Range("B3") '  en lugar de "VESTIDO NOCHE"

3) No comprendí este punto... mientras podés avanzar con el resto.

Elsa Matilde Lo que quise decir en el punto N° 3 es que el código VBA esté desarrollado de tal forma, que su aplicación pueda ser como la fórmula =T(A1) o =N(A1) como ejemplo.

Ahora esta desarrollado para ser ejecutado cada vez que modificas una celda de la col D. El código va explicado paso a paso y veras que se contempla cualquier cambio y afecta a toda la fila.

Para colocar tipo función... y para eso te hubiese pasado el formato condicional con fórmula... Te ofrezco la alternativa más simple y liviana para el libro, además de que solicitaste con VBA, no con funciones.

Empeza probando lo que te envío... Luego escucho tus opiniones.

Pd) te invito a visitar la sección Macros y Ejemplos de mi sitio... como para agitar esos engranajes. También la sección Funciones te puede interesar.

Sdos!

Hola Elsa Matilde , me he encontrado con un dilema, todo lo que me enviaste me sirvió de lujo; pude dar inicio al código para la tarea que me fue encomendada, pero me encontré que en muchos colores, deberé cambiar el color del texto, como por ejemplo con el color negro, el cual tendría que tener como color de texto el blanco, entre otros más.

Ante esto la pregunta que me surge es ¿Cómo le integro el color de texto a cada iteración del CASE? ¿Tendría que ir en una línea independiente o puede ir en la misma línea a continuación de lo que existe?

Si, en el mismo CASE le colocas el color de fondo y de letra (Font):

Por ej:

Range("F" & Target.Row).Font.ColorIndex = 2     'color blanco
'o de este modo
Range("F" & Target.Row).Font.Color = RGB(255, 255, 255)

Creo que ya he respondido a todos los puntos de aclaración, verdad?

Sdos!

Pero Elsa Matilde , ¿Para consignar ambas opciones en cada fila? Es decir, el color de fondo y letra para cada fila.

Reitero ;) 

Si, en el mismo CASE le colocas el color de fondo (*) y de letra (Font)

* Ya la tenías de antes (Interior. Color)

Y Font. Color que pueden ser alguna de las 2 instrucciones que te pasé de última.

Si, como mencionas, solo lo vas a aplicar en las celdas de ciertos colores (oscuros), tendrás que agregar también la opción de pasarlo a negro cuando seleccionas algún item cuyo color sea claro. Es decir, cada item lleva su color de Interior y de Fuente.

Tengo tu libro armado por si lo necesitas. Mi correo aparece en mi sitio que dejo al pie.

Analicemos la situación: yo desarrollo la idea, la programo y luego respondo a los posteriores cambios que vas queriendo introducir. DESPUÉS otro experto ya con la idea y aclaraciones a la vista te deja otra macro similar (que dicho sea de paso no atiende al cambio de color de fuente... Y no vale agregarlo a continuación de este comentario ;(

¿Y valoras solo esa respuesta y la mía no? Podes utilizar cualquiera o la que cubra mejor tus necesidades... pero la dedicación y el tiempo dedicado a desarrollarla merecen ser valorados también.

Sdos!

Respuesta
1

Te anexo una propuesta tal y como te había comentado, para pintar las celdas.

Esta sería la macro

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Not Intersect(Target, Range("G:G,I:I,K:K,M:M,O:O")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If Target.Row < 3 Then Exit Sub
        If Cells(Target.Row, "D") = "" Then
            MsgBox "No hay artículo"
            Exit Sub
        End If
        Set h2 = Sheets("Hoja2")
        art = Cells(Target.Row, "D")
        col = Cells(1, Target.Column)
        Set b = h2.Columns("B:B").Find(art, lookat:=xlWhole)
        If Not b Is Nothing Then
            fila = b.Row
            Set c = h2.Rows(2).Find(col, lookat:=xlWhole)
            If Not c Is Nothing Then
                numcolor = h2.Cells(fila, c.Column).Interior.Color
                Target.Offset(0, -1).Interior.Color = numcolor
            Else
                MsgBox "No existe le número de color"
            End If
        Else
            MsgBox "No existe el artículo"
        End If
    End If
End Sub

Información para la hoja1.

En la hoja1 va una macro que en automático se ejecuta, cada vez que modificas alguna de las columnas "CANT"; cundo escribes el número de cantidad, en automático la macro va a la hoja2 y obtiene el color en base al Artículo de la columna "D" y al color que tienes en la fila 1.

Es importante que en la fila 1 sigas poniendo el número de color, ese dato es necesario para encontrar el color en la hoja2.

Información para la hoja2

Ahora, en la hoja 2 puedes agregar más colores. En la columna B escribe los artículos y en las columnas C a la G o en adelante pon los colores.

Es importante que en la fila 2 sigas poniendo el número de color, en este caso tienes del 1 al 5.


Te anexo el archivo con la macro.

https://www.dropbox.com/s/6bpavjtsbg4e4vy/PROYECTO%20dam2.xlsm?dl=0 

Saludos. Dante Amor

Si es lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas