Para Dante, Condiciones para celdas de una hoja excel vba.

Hola! Dante Amor

Desde la distancia un gran saludo y agradeciendo por la maravillosa ayuda que nos brindas atreves del foro, hiendo con mi pregunta como puedo mejorar el código que me diste ya que tengo un problema a la hora de modificar manualmente el dato en la celda  donde se almacena mis datos. El detalle es que si yo tengo mas de 12.00 en la celda determinada de mi hoja  se pone de color rojo y si yo bajo manualmente este valor en la celda debería de ponerse de color verde; el código que me diste para mi formulario fue este.

ActiveSheet.Cells(6, 28) = TextBox1
    If Val(TextBox1) <= 12 Then
        ActiveSheet.Cells(6, 28).Interior.ColorIndex = 4
    ElseIf Val(TextBox1) > 12 Then
        ActiveSheet.Cells(6, 28).Interior.ColorIndex = 3
    End If

 Gracias Dante por la respuesta que me puedas dar.

1 Respuesta

Respuesta
2

Pero una cosa es cuando ejecutas la macro y revisa el valor del textbox, en este caso, si es menor a 12 pone el color.

Pero otra cosa es que se actualice la celda y quieres que se cambie el color, para eso tienes que crear otra macro.

Te recomiendo que hagas los cambios desde el textbox, ejecutes la macro y de esta forma la macro actualizará el color. Si quieres meter manualmente un valor en la celda, entonces hay que hacer otra macro.

Hola! Dante 

Gracias por la pronta respuesta, con el código que me diste para mi formulario no tengo problemas, si hay que poner una macro en la que actualice como indicas seria perfecto y como podría ser esa macro que incas en el textbox 

Hola! Dante

Con el tema expuesto realice una macro en la que el textBox llama a la macro con la condición "Call ", y funciona pero no se si el código de la macro pueda ser más simple, este fue el código que se grabo.

Sub color3()
    ActiveSheet.Cells(6, 34).Activate
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
        Formula1:="=4500"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _
        Formula1:="=4500"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .Pattern = xlNone
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

 Bueno si hay una manera mas simple seria perfecto.  

bueno en este caso utilice otro textbox que tiene otra condición bueno espero que no implique esto en la pregunta.

.

Si lo que quieres es poner el color con el formato condicional, entonces la macro está bien además la macro se ve simple.

Hola! Dante 

Gracias por la rápida respuesta, Bueno no se si esto se puede hacer para diferentes celdas; te comento que son varias celdas que tienen diferentes condiciones y si se podría utilizar una sola macro para todas esas celdas por ejemplo.

AB6  > 12.00 la celda se pinte rojo                    F6  > 8.00 la celda se pinte rojo

AB6 < 12.00 la celda se pinte verde                 F6 < 8.00 la celda se pinte verde

AH6  > 4500 la celda se pinte rojo                    H6  > 10.00 la celda se pinte rojo

AH6 < 4500 la celda este sin color                   H6 < 10.00 la celda este sin color

xxx... celdas.

Bueno si pondría la macros que hice para cada celda seria  enorme ya que tengo varias celdas con condiciones.  

Primero debes revisar cómo quieres pintar el color

OPCIÓN 1

Esta instrucción pone el color directamente en la celda

ActiveSheet.Cells(6, 28) = TextBox1
    If Val(TextBox1) <= 12 Then
        ActiveSheet.Cells(6, 28).Interior.ColorIndex = 4
    ElseIf Val(TextBox1) > 12 Then
        ActiveSheet.Cells(6, 28).Interior.ColorIndex = 3
    End If

OPCIÓN 2

Y esta instrucción pone el color pero con formato condicional

ActiveSheet.Cells(6, 34).Activate
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
        Formula1:="=4500"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
    End With

OPCIÓN 3

De hecho, podrías poner el color poniendo directamente el formato condicional sobre la celda, si necesidad de crear la macro


Ya tienes 3 opciones, te pregunto, ¿cómo quieres poner el color?

Envíame tu archivo, me dices cómo quieres poner el color y lo adapto en tu archivo.

Hola! Dante 

Te envié mi archivo a tu correo para la solución de mi pregunta espero que tenga solución

Gracias por la respuesta que me puedas dar.

Podrías explicarme ejemplo por ejemplo de lo que me enviaste en la hoja.

Hola! Dante 

Con respecto al archivo Todo lo que esta marcado con rojo son valores que se pasaron de rango por lo menos una unidad.

Todos los valores que están marcados con rojo sobrepasan una unidad  según a los valores de la cabecera de la hoja.

¿Me lo puedes explicar con datos?

Todavía no me dices qué quieres, que se ponga el color con macro, ¿con formato condicional o cómo?

Hola! Dante 

Disculpa por no haber especificado esa parte, lo que seria mejor a mi parecer y lo que indicaste anteriormente seria hacerlo sin macros, la base de datos que tengo tiene barias celdas con formato condicional yo en realidad puse a todas las columnas  las condiciones que requiere pero sin buenos resultados en realidad no se cual seria el problema ya que al ingresar un nuevo dato las celdas toman el color rojo a pesar que los valores ingresados eran menores a lo que pide cada celda.

Por ejemplo:

si AB  > 12.00 la celda  se pinte rojo                   si F  > 8.00 la celda se pinte rojo

si AB <= 12.00 la celda se pinte verde               si F < 8.00 la celda este sin color

si AH  > 4500 la celda se pinte rojo                   si H  > 10.00 la celda se pinte rojo

si AH < 4500 la celda este sin color                  si H <= 10.00 la celda este sin color

xxx... celdas

El único caso que tiene dos colores son las columnas AB y AC que es el ph calderos; A comparación de las otras columnas que solo tienen Rojo y sin color, Que si es mayor es color rojo y si es menor es sin color todas esas condiciones las vas a encontrar en cada celda ya escrita como cabecera con los signos de < > y todos están en (ppm), bueno espero que me hayas comprendido  y Gracias por la gran ayuda. 

Este es el formato condicional para las celdas de la AB6 a la AB100

Revisa los números que tienes en las celdas, los tienes almacenados como texto, por eso no reconoce el formato, ya que un texto es mayor que un número, por eso lo pinta de rojo.

En tus macros que escriben números a celda, deberás poner la función Val, por ejemplo:

Private Sub CommandButton8_Click()
'Act.Por.Dante Amor
    If ComboBox1 = "" Or TextBox1 = "" Then
        MsgBox "No son Datos suficientes para Guardar", vbInformation, ""
        TextBox1.SetFocus
    Else
        u = Range("A" & Rows.Count).End(xlUp).Row + 1
        If u < 6 Then u = 6
        ActiveSheet.Cells(u, 1) = Date
        ActiveSheet.Cells(u, 2) = Format(Now, "hh:mm AM/PM")
        ActiveSheet.Cells(u, 5) = ComboBox1
        ActiveSheet.Cells(u, 3) = ComboBox2
        ActiveSheet.Cells(u, 4) = ComboBox3
        ActiveSheet.Cells(u, 28) = Val(TextBox1)
        ActiveSheet.Cells(u, 29) = Val(TextBox2)
        ActiveSheet.Cells(u, 18) = Val(TextBox3)
        MsgBox ("Se Guardaron correctamente los datos"), vbInformation
        ComboBox1 = ""
        ComboBox2 = ""
        ComboBox3 = ""
        TextBox1 = ""
        TextBox2 = ""
        TextBox3 = ""
        ComboBox1.SetFocus
    End If
End Sub

¡Gracias! Dante 

ahora si realmente funciona a la perfección, Gracias por la gran ayuda y por el valioso tiempo que te diste para ayudarme doy por finalizado este tema. 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas