Como denegar la introducción de datos si el dato ya existe en Excel VBA

No se muy bien como enfocar este tema. Busco la menera de que cuando los datos de un formulario se envíen detecte si existe la posibilidad de que ya estén introducidos.
La tabla es algo compleja para tomar solo 1 valor fijo pero muy bien no se como.

Es una base de datos donde se introducen pedidos, cada pedido puede tener más de un producto y por cada producto se registran los datos en un línea nueva repitiendo los datos anteriores. Cada registro de envío corresponde a un ID (columna A).

En el caso de la columna Núm es un dato único que representa el código de la empresa.(ID de empresa)

La columna Programa siempre es único por cada ID(columna A), cada ID solo tiene un programa.

La columna FA y PAD es el numero de la hoja de pedido física. En caso de que exista un FA o PAD si que es único, pero no es obligatorio que lo tenga (muchas veces no hay)

La columna Material es introducida manualmente a través de un textbox (esta sujeta a errores ortográficos por lo tanto creo que no es adecuada para la validación)

La columna de Proveïdor es única por cada ID de envío. Solo hay un Proveidor por cada ID de envío

La columna del importe es una columna que muestra el TOTAL DEL PEDIDO y no el coste del producto de esa línea. Por cada ID de envío (columna A) hay un Importe que se repite en todos los productos que se introduzcan.

Dejo como se llaman los objetos donde están a la espera de la validación

num_equipament_final.caption

FA_final.caption

pad_final.caption

programa_final.caption

proveidor_final.caption

total_pad.caption

Como he dicho no se muy bien como enfocar esto y tampoco esta pregunta, voy algo perdido.

2 respuestas

Respuesta
2

[Hola

A ver, comienzo por la parte que algunos consideran fea: Excel no es el idóneo para usar como base de datos. Si uno insiste en usar Office, Microsoft nos ha brindado Access para casos como el tuyo. Es más, al tener registros casi iguales en donde se ve repites datos (complicando tus cálculos, reportes, etc.), con tablas relacionadas sería fácil en Access.

Pero bueno, yendo a tu dilema ¿qué es un registro repetido para ti? Es decir ¿cuántos y cuáles columnas deben ser absolutamente iguales para que lo consideres un registro repetido?

Abraham Valencia

Gracias Abraham por responder. Lo he querido hacer en excel porque no tengo idea de Access y para mi hubiera sido más difícil. Supongo que para que alguien que entienda es más fácil Access en este caso y en muchos otros también.
Absolutamente iguales han de ser el problema es que aveces solo con 1 dato ya es suficiente y en otros casos se necesitan más.


Columna P Importe (es muy difícil que se repita el importe de un pedido en de una misma empresa en una misma fecha)
Columna Q. La fecha relacionada con el importe (2 pedidos del mismo día, de la misma empresa y con el mismo importe seria muy raro)

Columna J Programa: es difícil que un pedido con el mismo importe, de la misma empresa, en el mismo día y con el mismo concepto exista)

Columna C Núm. Es el numero que identifica la empresa

Columna A ID: Es el numero de registro del pedido (este dato lo debería devolver al encontrar el dato repetido -para saber que id tiene el dato "supuestamente" introducido y poder consultarlo-)
Estos dos siguientes si que son por si solos son únicos (independientemente del precio, la hora...)

Columna L y K. FA y PAD si tiene numero es único. Pero hay pedidos que no lo son. Cuando ninguna de estas columnas tiene el dato sale un -

Me gustaría que cuando saltara el aviso de dato repetido te indicara cual es el dato ya introducido

https://drive.google.com/open?id=1U6pOVJUypikivdA0KY-0XlddDjY0Ctuz 

Disculpa pero me has mareado. Trata de ordenarte primero acerca de, con exactitud, cuándo es un registro repetido para ti. Tu explicación es bastante enredada.

Abraham Valencia

Hola Abraham, disculpa que no me haya explicado todo lo bien que pretendía.
Columna QUE (FA) o columna L (PAD) son números únicos. En caso de que en esas columnas contengan un número solo será introducido 1 vez (numero único). En caso de que en esas columnas no tengan un valor sale "-" que si que se pude repetir. Es posible que la columna QUE tenga un dato y que la L no lo tenga y viceversa. (Como se muestra en la captura de pantalla).
En caso de que el dato introducido contenga una de estas 2 datos ya podríamos saber que el dato que queremos introducir esta repetido o no.

En caso de que en la columna QUE y L salga "-" se tendrá que tener en cuenta otras columnas para determinar si el valor ya esta introducido. La columna QUE y L son independientes una de otra. En caso de que salga "-" se debería tomar varios datos para valorar si el dato esta introducido.

Primero de todo la columna C (Núm), después la columna J (programa), después la columna M (proveidor) y para terminar la columna P y QUE (Import y Data).

Al no tener un número único como el anterior caso de la columna QUE o L debo tomar más datos para saber si el dato ya esta introducido. En caso de que en todas estas columnas se repitan los datos que quiero introducir también debería considerarse como un dato repetido.

Espero haber explicado mejor esta vez

Espero que entiendas cuando Andy y yo te decimos que la estructura de datos que usas es muy mala y solo dificulta las cosas que estás haciendo, además de eso, Excel no es el programa idóneo para lo que estás haciendo, si insistes deberías usar Access y tablas relacionadas. Si de todos modos usarás Excel, necesariamente tienes que cambiar la estructura de datos; si no la piensas cambiar el lograr lo que requieres conlleva a un tiempo de desarrollo que difícilmente alguien de un foro podrá brindarte pues no olvides que aquí todos estamos ad honorem.

Lo siento.

Abraham Valencia

Respuesta
1

Si mal no recuerdo, hace un tiempo preguntaste algo sobre registrar datos en la hoja de una manera a la que te respondí que era poco conveniente, y te explique que los registros deben almacenarse horizontalmente.

Presiento que se trata de la misma hoja. Si no lo es, entonces ignora esto, yo me he confundido. Pero si sí lo es, esta es una de las consecuencias de hacerlo como lo estabas planteando. Los registros de tu tabla se repiten por naturaleza de la propia estructura de la tabla, lo que hace engorroso atrapar registros realmente repetidos.

Si, aquí esta:

Enviar datos del listbox a una hoja de Excel en bucle

Al final te lo hice como tu lo querías. Tal vez sea tarde para que cambies todo, pero de nuevo, te recomiendo que replantees la estructura si tienes tiempo y ánimos para hacerlo.

Hola Andy, perdona por taradar tantos días en contestar pero es que he estado fuera de la oficina.

Como bien dices es la misma hoja de calculo.
El problema que tube en el paso es que no logre hacer lo que me recomendaste por desconocer el como lo debo hacer.

Me gustaría poder hacerlo lo mejor posible ya que estoy interesado en aprender. No me importaría cambiar el código si así va a ser mejor.
¿El hacer el código separe los artículos por | me hace que me surja la duda si me dará problemas en las tablas dinámicas?

¿Seria mejor hacer cada producto en una celda horizontal diferente?

Hello Pol,

Como dice Abraham, lo que quieres hacer es mejor lograrlo con bases de dstos reales y el uso de tablas relacionadas, donde las llaves primarias de una tabla son llaves foraneas de otra y asi tienes una relacion de orden-cliente-producto.

Hacer esto en excel es un desperdicio de recursos. Si estas interesado en aprender, no estará de mas que le des una mirada a Access para empezar. Ojo, esto no significa que sea imposible lograrlo en Excel, solo que el tiempo gratis que damos aqui no es suficiente para poder asistirte. No te desanimes, las bases de datos no son tan aterradoras como parecen.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas