Falla al copiar un dato sobre una columna con una lista de validación

Hola, tengo una columna cuyos valores están restringidos por una lista de validación, sin embargo cuando se hace un "copy-paste" sobre la celda, la validación se pierde y permite copiar un valor no permitido en la lista. Cómo hago para restringir estos valores completamente?

Muchas gracias.

1 Respuesta

Respuesta
1

La única manera de evitar ese problema con las validaciones es proteger la hoja para evitar el copy-paste. Si quieres puedes decirme en que consiste tu validación para construir una macro. Esta es la única manera de hacerlo hermético.

Hola, tengo en este momento 7 validaciones a realizar sobre una hoja, trabajando con EXCEL 2010 (sin embargo requiero que funcione también para EXCEL 2007, ya que las personas que diligencian el archivo tienen esta versión de EXCEL). Dos de las posibles validaciones es que en la columna solo puedan seleccionar entre SI o NO; y en la otra que solo puedan seleccionar entre ORIENTE, OCCIDENTE y COSTA.

Agradezco de antemano tu colaboración para así poder incluir en la macro todas las validaciones que requiero.

En espera de tu respuesta.

Una pequeña aclaración: dime la columna para el si/no y la columna para ORIENTE/OCCIDENTE/COSTE

Espero

La hoja donde se encuentran los valores para seleccionar se llama "CPDs" y aquí las columna para el SI/NO es la N y para ORIENTE/OCCIDENTE/COSTA es la L. La hoja donde tengo las listas se llama Listas y para el SI/NO la lista se llama SI_NO y para ORIENTE ... se llama REGION.

Muchas gracias,

Ok, esta es mi propuesta: Dentro del editor de visual basic dale doble click en el explorador de la izquierda al objeto hoja llamado CPDs. Se abrirá un espacio blanco a la derecha donde tienes que copiar esta macro:

Esta macro es un evento, es decir, se autoejecuta dependiendo de nuestras ordenes. En este caso la macro está vigilando lo que el usuario teclea en la columna L y en la columna N. Si no escribe lo que debe la macro le impedirá seguir borrando el dato erróneo. Solo le dejará escribir lo permitido para cada columna. No necesitamos lista de validaciones, con esta macro no hay escapatoria para el usuario.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 14 Then
VALOR = UCase(Target.Value)
If VALOR <> "SI" And VALOR <> "NO" Then
Target.Select
Target.ClearContents
Exit Sub
End If
End If
'++++++++++++++++++++++++++++++++++++++++++++++
If Target.Column = 12 Then
VALOR2 = UCase(Target.Value)
If VALOR2 <> "ORIENTE" And VALOR2 <> "OCCIDENTE" And VALOR2 <> "COSTA" Then
Target.Select
Target.ClearContents
Exit Sub
End If
End If
End Sub

Recuerda finalizar y puntuar

Me funcionó perfecto, sin embargo tengo bajo este punto otra pregunta, ya que una de las validaciones que hago es con el NIT de la empresa y tengo una relación de 200 empresas, en este caso como debo hacer la restricción?, y no tener que copiar uno a uno los NITs?

Muchas gracias.

Necesito que me digas la estructura que debe tener un NIT y en que columna estará

La columna es la J y el NIT es un número de 9 dígitos

Pues esta es tu macro. Estará vigilando lo que el usuario teclea en la columna J y si no introduce 9 dígitos no le dejará seguir. Te recomiendo que modifiques el formato de toda la columna J y lo cambies a texto para los supuestos de números pequeños como por ejemplo:

000012345

Copia la macro a continuación de la otra y por cierto la linea que dice: on error resume next, cópiala también a la otra macro en el mismo lugar.

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 10 Then
nit = Target.Value
If Len(nit) <> 9 Then
Target.Select
Target.ClearContents
End If
End If
End Sub

Por la respuesta, veo que me hizo falta entonces indicar que solo tengo unos posibles valores de NIT para seleccionar, sin tener la posiblidad de escribir cualquier número de 9 dígitos, sino solamente los que tengo en una lista determinada. Estoy pendiente, muchas gracias, y ya modifico la otra macro.

Entonces, necesito que me digas en que rango están escritos los posibles NIT

No hay un rango específico, son valores como si fueran nuestras identificaciones, pero a nivel de empresa, entonces son ciertas empresas que se deben seleccionar de un rango que ya tengo en una hoja que se llama Listas

Pues necesito ese rango

La hoja se llama Listas y el rango es desde A2 hasta la A214

Ok, ahora tu macro es esta: y ya sabes, cópiala a continuación de la otra. Estará vigilando lo que introduces en la columna J y solo permitirá los valores que existen en la hoja Listas.

Private Sub Worksheet_Change(ByVal Target As Range)
on error resume next
If Target.Column = 10 Then
nit = Target.Value
Set busca = Sheets("listas").Range("a1:a10000").Find(nit, LookIn:=xlValues, lookat:=xlWhole)
If busca Is Nothing Then
Target.Select
Target.ClearContents
End If
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas