Macro de Excel

Admirado profesor,
He visto una hoja de excel que tras completar unas celdas, pide la validación de los datos. Para ello se pulsa una celda con el cursor y una macro verifica el contenido de unas 60 celdas. En unos casos verifica que no tengan más de veinte letras y en otras que el valor se ajuste al resultado de una fórmula relativamente simple. Concluido el proceso aparece un msgbox que anuncia si han habido errores o no. Las celdas con valores erróneos aparecen con el fondo rojo, que no desaparece hasta que los valores introducidos son correctos.
¿En qué macros debo trabajar para obtener esos resultados? ¿Está al alcance de los mortales?
Reciba mi agradecimiento por su atención y un cordial saludo,
Lucas33

1 respuesta

Respuesta
1
Si esta al alcance de los mortales, lo único es que hay que dedicarle tiempo y enredar un poco, porque se necesita poner alguna instrucción de visual basic, sigo diciendo que no es difícil pero si pide tiempo en la ayuda de visual basic viene un ejemplo de un msgbox (que es el encargado de decirte los errores que veías en ese programa)lo de los colores no deja de ser un formato condicional que se activa solo cuando pulsas en la macro, lo dicho esta al alcance de todos los que disponemos de tiempo y nos gusta enredar
Si tienes algún ejemplo y necesitas más ayuda no dudes en contar conmigo
Agradezco enormemente tu atención.
Paso a especificarte el caso:
Supongamos el rango A1:D5
En el que las celdas de la columna A son códigos, las celdas la columna B son títulos y las celdas de la columna C son precios
El validador lo que hace es comprobar que el valor de cada una de las celdas A1:A5 no sea superior a 99999 ni inferior a 1000; que las celdas b1:b5 no contengan más de 26 caracteres y que las celdas C1:C5 tengan un valor (admite un margen de error del 1/1000) al valor previamente establecido en la correspondiente celda contigua de la columna DE dividido por1, 04.
El validador marca en rojo cada celda del rango A1:E5 que contiene un valor que no se atiene a los parámetros especificados. Si ha detectado al menos una celda con un error, al finalizar el proceso lanza un msgbox con el mensaje "la operación ha finalizado con errores". En el caso que no se haya detectado error alguno lanza un msgbox con el mensaje "operación correcta".
Espero haberme explicado con precisión.
Cuando le encontremos solución, los chicos y yo brindaremos por el verdugo del problema.
Recibe nuestro más sincero agradecimiento por tu atención e interés.
Atención pregunta
¿Que valor recoge la columna c(precios) y la columna de ¿el validador o un precio tope que yo le marco?
De nuevo, muchas gracias por tu interés.
Cada celda de la columna C es el precio sin iva con el tercer decimal.
Cada celda de la columna DE es el precio final que nos viene dado.
De ahí que al hacer la validación se debe comprobar que cada valor de la columna C sea igual a D/1,04(admitiendo un margen de error del 1/1000; el tercer decimal!)
Cordiales saludos,
Lucas
Por fin
Os adjunto la siguiente macro, tendréis que colocar en la hoja(que he llamado caja) un botón de comando que la ejecuta, una vez introducidos los datos se ejecuta el botón y tatatachan, convierte en rojo aquello que no cumple las reglas y sale un mensaje diciéndolo
las partes repetitivas de la macro(las que asignan el color rojo) las podéis cambiar por otra submacro pa que quede bonito
el tema del margen de error no lo he puesto, pero no os va a ser difícil modificar el código vb a vuestro antojo para que lo comtemple
bueno ahí va:Sub validación()
Sheets("caja").Range("a2:c6").Select
Selection.Font.ColorIndex = 0
valor = 1
For f = 2 To 6
For c = 1 To 3
Cells(f, c).Select
If c = 1 And (ActiveCell.Value < 1000 Or ActiveCell.Value > 99999) Then
Selection.Font.ColorIndex = 3
valor = 0
End If
If c = 2 Then
l = Len(ActiveCell.Value)
If l > 26 Then
Selection.Font.ColorIndex = 3
valor = 0
End If
End If
If c = 3 Then
preciofinal = Cells(f, 4)
precio = Cells(f, c)
If precio > preciofinal / 1.04 Then
Selection.Font.ColorIndex = 3
valor = 0
End If
End If
Next c
Next f
If valor = 0 Then
mensaje = MsgBox("la operación ha finalizado con errores", vbDefaultButton1, "mensaje de validacion")
Else
mensaje = MsgBox("operacion correcta", vbDefaultButton1, "mensaje de validacion")
End If
End Sub
Si os da problemas, o necesitáis más ayuda decírmelo y por favor valorar y cerrar esta pregunta para dar paso a otras, incluidas las nuevas que me podáis plantear
Un saludo, os espero por laredo este verano con mi copa preparada
Preparar la botella que ya lo tengo, he de irme, cuando vuelva lo depuro, lo dejo bonito y os lo mando
No os olvidéis de mi copa
Impresionante!
Hemos aprendido un montón leyendo el planteamiento de la macro (a algunos ya les parece casi poesía), y hay acuerdo unánime en valorar tu trabajo de excelente.
Hay cosas que no acabamos de entender por qué no pasan (y menos después de leer la macro) ¿Por qué dice "proceso concluido con errores" cuando los datos son correctos? ¿Por qué cuando son incorrectos no los señala en rojo? Pero queremos valorarlo más detenidamente antes de que nos permitas que te dirijamos alguna aclaración.
En nombre de todos,
MUCHAS GRACIAS, MAESTRO !

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas