Jump to content
Jose BN

ANSWERED Worksheet_Change que obligue a corregir el valor en una celda

Recommended Posts

Hola! amigos

 

Quisiera solicitarles ayuda para el siguiente caso, tengo un libro en donde la columna A tiene un valor dado, en la columna B el usuario  digita la cantidad real entregada y en la columna C de determina la eficiencia del pedido (B/A),  el dato que cambia en la hoja es en la columna B estoy intentando crear una serie de aviso que le resalten las variaciones al usuario cuando el valor de C está por encima o por debajo de los margenes datos (>100 ó <90), hasta ahí creo ir por buen camino (eso espero!):

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Column = 2 Then
        ThisRow = Target.Row
        If Target.Value > 100 Then
        MsgBox "La celda " & Target.Address & " El valor debe corregirse excede los parametros establecidos", vbExclamation, "JBalladares ---- Aviso automático"
            Range("C" & ThisRow).Interior.ColorIndex = 5
        Else
        If Target.Column = 2 Then
        ThisRow = Target.Row
        If Target.Value < 90 Then
        MsgBox "La celda " & Target.Address & " El valor debe corregirse está por debajo de los parametros establecidos", vbExclamation, "JBalladares ---- Aviso automático"
            Range("C" & ThisRow).Interior.ColorIndex = 3
        Else
        Range("C" & ThisRow).Interior.ColorIndex = xlColorIndexNone
        End If
        End If
    End If
     End If
End Sub

Me gustaría como primer punto que el calculo realizado en la columna C (dividir B/A) se realizará una vez que se digite el dato en B  mostrando el resultado como valor.

Lo segundo es forzar al usuario a corregir el valor que digito en B si este no cumple los criterios(basado en el resultado de C), si el valor no cumple no le permita continuar digitando datos y lo posicione en la celda que debe corregir si esto es posible.

Manteniendo los avisos y rellenos de color expuestos en el código del evento Worksheet_Change mostrado arriba.

Agradezco la ayuda que me puedan brindar.

Saludos!

J

VARIACION CELDA.xlsm

Share this post


Link to post
Share on other sites

Hola Jose

Prueba asi:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

With Target

    If .Column <> 2 Then Exit Sub
    
    Application.EnableEvents = False
    If .Value > 100 Or .Value < 90 Then
        VBA.MsgBox "Este valor " & .Value & _
        " excede los parametros establecidos", vbCritical, "AyudaExcel"
        .Value = Empty
        .Offset(, 1) = Empty
        .Select
    Else
        .Offset(, 1) = .Offset(, -1) / .Value
    End If
    Application.EnableEvents = True
    
End With

End Sub

 

Saludos

Share this post


Link to post
Share on other sites

Hola! Gersón las cosas que salen de honduras son tan maravillosas como el Perú! 

Se ajusta a lo que andaba buscando, solo una consulta, si cambio el valor máximo a 110 deja de funcionar

 If .Value > 110 Or .Value < 90 Then

En qué pueda estar el fallo.

 

Saludos

J

Share this post


Link to post
Share on other sites
Hace 47 minutos , Jose BN dijo:

Hola! Gersón las cosas que salen de honduras son tan maravillosas como el Perú! 

Se ajusta a lo que andaba buscando, solo una consulta, si cambio el valor máximo a 110 deja de funcionar


 If .Value > 110 Or .Value < 90 Then

En qué pueda estar el fallo.

 

Saludos

J

Pero porque del Peru? :ph34r: por @Silvia :D

Respecto a 110 no debe darte fallos, lo mejor es que cierres Excel y vuelve a probar

 

Saludos 

Share this post


Link to post
Share on other sites

Gersón, JSDJSD & nueva maravilla del perú (Silvia)

Muchas gracias! por el soporte!

Observó que existe un error en el calculo de la eficiencia, al momento que el dato de "B" es mayor "A" , ejemplo si la cantidad entregada es=92 el resultado a devolver debe ser 101% (92/91=1.01...) pero el código emite un resultado del 99%

Viendo el código de Gersón si el valor de A1 es 91 (.Offset ,1) y valor de B1 es 91 (.Offset , -1) el resultado lo realiza correctamente en "C1"=100%, pero si el dato en "B" es mayor los resultados parecen estar incorrectos! o algo debe estar jugando una mala partida en mi equipo

.Offset(, 1) = .Offset(, -1) / .Value

J

Share this post


Link to post
Share on other sites
Hace 5 horas, Jose BN dijo:

Gerson lo digo por tu gran amigo avalencia

He cerrado el excel pero continua igual, algo parece ir mal con los parametros.

Si tienes oportunidad de revisar te lo agradezco

 

J

2VARIACION CELDA.xlsm 14 kB · 1 descarga

Jose

El ejemplo que te envié es para aplicarlo en la columna B y no para la D, aun que solo es cosa de modificar, donde realmente lo deseas, pero asegúrate de hacer primero los cambios y luego probar, porque el problema de este evento, es que incluso te puedo pegar el Excel. Si tienes mas dudas respecto al código pues solo avisa y con gusto te colaboro

 

Hace 5 horas, Jose BN dijo:

Gerson lo digo por tu gran amigo avalencia

@avalencia ¿Amigo!? noo que va, es mi "abuelo" :D, colega, primo y hermano! B)

 

Saludos 

Share this post


Link to post
Share on other sites

Gersón muy amable tu consideración, comprendo lo que dices.

Solo me gustaría insistir para  entender porque "de crece" el calculo del porcentaje cuando se supera el valor de "A"  como me sucede con el ultimo archivo que compartí.

 

Saludos

J

Share this post


Link to post
Share on other sites
Hace 3 horas, Jose BN dijo:

Gersón muy amable tu consideración, comprendo lo que dices.

Solo me gustaría insistir para  entender porque "de crece" el calculo del porcentaje cuando se supera el valor de "A"  como me sucede con el ultimo archivo que compartí.

 

Saludos

J

Pero Jose, solo tenias que invertir para que la división fuese correcta, te subo el archivo para mejor comprensión de tu parte

 

Saludos!

Restringir ingreso en celda Vba_GP.zip

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.



×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png