¿Cómo aplicar múltiples condiciones en una macro que se ejecute de manera correcta en todos los casos posibles?

Recurro a ustedes con su ampliada experiencia para que me iluminen acerca de unas condicionantes que no logro emplear de manera correcta, en mi ejemplo tengo 4 columnas, (B, E, F, O) con datos para ingresar a partir de la fila 9 en adelante, y las condiciones que requiero aplicar son las siguientes: 1.- con un Dato de entrada en la columna B, las celda en E y F no pueden permanecer vacías al mismo tiempo al momento de ejecutar la macro, (debe haber un dato en E o en F), 2.- con un Dato de entrada en la columna B, las celda en E y F no pueden tener datos en ambas celdas al mismo tiempo al momento de ejecutar la macro, (debe haber solamente un dato en E o solamente un dato en F), 3.- Con un dato en la celda F este no me debe superar el registro en la celda O al momento de ejecutar. En mi macro las condicionantes se ejecutan de manera correcta siempre y cuando hayan datos solo en la celda 9, el problema está cuando capturo datos en más celdas, allí por más que he tratado modificando el código no se me cumplen las condiciones como debe ser, si modifico para que la macro corra como es debido con múltiples datos, entonces ocurre que no se ejecuta bien cuando solo hay datos en la celda 9 y no logro hacerlo funcionar para que haga lo que quiero cuando hayan datos solo en la celda 9 y también cuando hayan datos en las celdas 10,11,12 y así sucesivamente.

Sub VALIDACIONES()
Dim lr As Long, fila As Variant, CE As Long, CF As Long, novacias As Variant, sobregiro As Integer, CB As Long
    CB = Range("B" & Rows.Count).End(3).Row
    CE = Range("E" & Rows.Count).End(3).Row
    CF = Range("F" & Rows.Count).End(3).Row
    If CE > CB Then
        MsgBox "Debe introducir un valor en la celda B"
    ElseIf CF > CB Then
        MsgBox "Debe introducir un valor en la celda B"
    Else
        novacias = Evaluate("=SMALL(IF((E8:E" & CB & "="""")*(F8:F" & CB & "=""""),ROW(E8:E" & CB & ")),1)")
        If IsError(novacias) = False Then
            MsgBox "Error: celdas en blanco"
            Range("E" & novacias & "").Select
        Else
            lr = CF
            fila = Evaluate("=SMALL(IF((E9:E" & lr & "<>"""")*(F9:F" & CE & "<>""""),ROW(E9:E" & lr & ")),1)")
            If IsError(fila) = False Then
                MsgBox "Error: celdas con datos en dos columnas"
                Range("F" & fila & "").Select
                Exit Sub
            Else
            lr = CB
                sobregiro = Evaluate("=SMALL(IF(F9:F" & lr & ">O9:O" & lr & ",ROW(F9:F" & lr & ")),1)")
                    If sobregiro <> 0 Then
                        MsgBox "Error: Sobregiro"
                        Range("F" & sobregiro & "").Select
                        Exit Sub
                    Else
                    MsgBox "PRUEBA CON EXITO"
                    End If
            End If
        End If
    End If
End Sub
Respuesta
2

Olvida la macro.

Olvida que tienes muchos datos en la hoja. Yo entiendo que debe aplicar para todos los datos.

Explica un ejemplo.

1. Si hay dato en la celda B9 entonces, si la celda B9 está vacía, ¿quieres un mensaje?

2. "Debe haber un dato en E9 o en F9", de lo contrario, ¿quieres un mensaje?

3. "Con un dato en la celda F9 este no me debe superar el registro en la celda O9 al momento de ejecutar.", puedes explicar esto con ejemplos reales.

Importante: No pongas código, solamente explica con ejemplos.

Estimado Dante, soy el encargado de llevar un inventario, mi mercancía está relacionada por un código, y para ingresar o egresar mercancía de ese inventario debo generar una orden, ejemplo si voy a relacionar tres cauchos en el inventario, cuando coloco en el programa el código del caucho (celda B) este me trae la descripción del mismo y me muestra en (celda O) la cantidad de cauchos que tengo en stock de ese código, paso siguiente como usuario voy a colocar si voy a ingresar cauchos a mi inventario o si por el contrario voy a sacar cauchos del mismo, para ingresar cauchos uso la celda E, para egresar cauchos uso la celda F, si me piden 3 cauchos coloco el código y los tres cauchos a egresar, pero si en mi inventario tengo 1 solo caucho de ese modelo debe aparecerme un mensaje que me lo diga y salirse de la macro automáticamente, si por el contrario voy a ingresar tres cauchos solo coloco el código la cantidad de cauchos y ya, no debo poder colocar el código en B9 de los cauchos y dejar las celdas de entrada o salida de mercancía vacías, ya que no habría información que guardar en el inventario? Y tampoco debo poder colocar el código del caucho y meter y sacar mercancía al mismo tiempo en esa celda, en una celda el movimiento tiene que ser únicamente para ingresar mercancía o para sacarla pero no ambas cosas a la vez. Espero haber podido explicarme, gracias.

G r a c i a s por la explicación, pero solamente te pedí ejemplos.

Qué dato tienes en B9. Qué dato tienes en E9, qué dato tienes en F9, ¿qué dato tienes en O9?

Ejemplos, solamente ejemplos y qué resultado esperas.

Me facilitas tu correo, Te puedo enviar el archivo de Excel que estoy usando de ejemplo? 

Pero ya me enviaste un correo y no entendí, por eso te escribo aquí.

Solamente te estoy pidiendo un simple ejemplo de lo que tienes en las celdas.

Voy a dejar la pregunta, por falta de información.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas