Detener una macro si la celda está vacía

Resuelto
Dimitri020386 Mensajes publicados 5 Estado Miembro -  
Dimitri020386 Mensajes publicados 5 Estado Miembro -
Hola a todos,

Me he puesto a programar en VBA en Excel desde el año pasado para la creación de un archivo de seguimiento financiero.

He finalizado una primera vez este archivo, pero he empezado de nuevo con todas las macros de este archivo para simplificarlo ya que tenía demasiadas manipulaciones que hacer antes de ejecutar la macro de actualización.

He buscado en vano las líneas de código que debo integrar al inicio de mi macro (quizás no he buscado en el lugar correcto)

Aquí está mi problema:

Debo copiar para 7 hojas diferentes las celdas no vacías situadas entre "M8" y "N38" hacia las celdas situadas después de las últimas celdas no vacías de las columnas "B" y "C"
Con eso me arreglo.

Antes de copiar estas celdas, deseo detener la ejecución de la macro si al menos una de las celdas "M8:N8" en al menos una hoja está vacía.
Y de paso, mostrar una ventana de advertencia con un mensaje.

Si todas las celdas "M8:N8" están no vacías, por supuesto, quiero continuar con la ejecución de mi macro.

Espero haber sido lo suficientemente claro en mis explicaciones.
Si no es así, intentaré aclarar los puntos oscuros.

Gracias de antemano a las personas que tomen su tiempo para leer y ayudarme a resolver este problema.

Dimitri

7 respuestas

Yoyo01000 Mensajes publicados 1720 Fecha de registro   Estado Miembro Última intervención   168
 
Hola,
hay que poner
exit sub
después de la parte de la macro que verifica que no haya celdas vacías.

Eso es todo lo que puedo decirte, ¡sin archivo ni código a la vista!

--
Piensa en el "gracias" y en el "resuelto" cuando el tema lo esté.
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Hola,

confirmo, imposible responder correctamente sin un archivo de trabajo.
No sabemos si son valores o fórmulas. Si una celda vacía está realmente vacía (sin fórmula), o si "" debe considerarse como vacía, y así sucesivamente...
cjoint.com y pegar aquí el enlace proporcionado
eric

--
Al intentarlo continuamente, al final lo logramos.
Así que cuanto más falla, más posibilidades hay de que funcione. (los Shadoks)
Además del agradecimiento (sí, sí, ¡eso se hace!), no olvides marcarlo como resuelto. Gracias
0
Dimitri020386 Mensajes publicados 5 Estado Miembro
 
OK entiendo.

Aquí está el enlace a mi archivo:
https://www.cjoint.com/c/JJqlFZOkhFJ

He tomado nota sobre el <negrita>exit sub (Gracias Yoyo01000)

Confirmo que las celdas estarán completamente vacías, sin ninguna fórmula en ellas.
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Supuse que tus pestañas eran las 7 últimas, podrías haberlo precisado...
Si estas pestañas son siempre consecutivas, añade un nombre con la siguiente fórmula:
=NBVAL('Data Mon épargne:Data ACTIONS EDF'!$M$8:$N$8)=14

Esto calcula el número de entradas entre estas 2 hojas (incluidas).
En caso de evolución, solo tendrás que modificar esta fórmula.

En el código:
If Not [saisiesOK] Then Exit Sub


Si estas hojas están sujetas a cambios, podría ser interesante crear una hoja Inicio, otra Fin (adaptar la fórmula) e insertar/eliminar entre las dos sin olvidar ajustar el número de entradas deseado en la fórmula.
eric
--
Al intentar continuamente, uno termina logrando.
Así que cuanto más falla, más posibilidades hay de que funcione. (los Shadoks)
Además de dar las gracias (¡sí, sí, eso se hace!), piensa en marcar como resuelto. Gracias
0
Dimitri020386 Mensajes publicados 5 Estado Miembro
 
Gracias Eric,

Efectivamente, se me pasó mencionarlo, mis disculpas.

Acabo de hacer una prueba, no entiendo mucho porque he probado lo que me diste:

"NBVAL("Data Mon épargne:Data ACTIONS EDF" & "M8:N8") = 14
If Not NBVAL Then Exit Sub"


No funcionó, así que intenté una modificación porque Visual Basic no acepta los " ' " y el " ! ".
Así que escribí lo siguiente, pero creo que cometí (uno o varios) errores en la redacción de mi código.

extractionOK = NBVAL("Data Mon épargne:Data ACTIONS EDF" & "M8:N8") = 14
If Not extractionOK Then Exit Sub


La macro se bloquea en "NBVAL"

Recibo un mensaje de error que dice:

"Error de compilación:
Sub o función no definida"


¿Puedes decirme qué está mal?

Estoy en Microsoft Visual Basic 7.1, ¿es posible que algunas funciones sean compatibles solo con ciertas versiones de Visual Basic?

Y de paso, soy nuevo en los foros, ¿cómo se hace para integrar en un cuadro las líneas de código VBA?

Dimitri
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Hola,

La fórmula no te dije que la pusieras en el código, sino en un nombre.
En Excel (no en VBA) vas a 'Fórmulas / Nombres definidos / Definir un nombre' y lo creas.

Y en el código utilizas el nombre que has creado, puesto entre corchetes [tu_nombre] o de esta forma Range("tu_nombre")
eric
0
Dimitri020386 Mensajes publicados 5 Estado Miembro
 
¡Genial! Voy a probar eso de inmediato.
Todavía tengo mucho que aprender...
Gracias.
0
Dimitri020386 Mensajes publicados 5 Estado Miembro
 
¡Es perfecto, funciona de maravilla!!!!!!

Sin embargo, he probado en la forma Range("extractionOK") pero no funciona.

Así que lo he dejado en la forma If Not [extractionOK] Then Exit Sub

Muchas gracias.
0