Validación de datos vinculada a otra celda

Hola expertos. Os necesito.
Tengo una duda de la que no logro salir. Os explico:
La celda J24 tiene una lista de validación de datos por nombre. Esta validación la he condicionado al valor de la celda D24. Para ello, en el origen de datos de la lista de J24 he utilizado la fórmula '=INDIRECTO(D24)'. De esta forma, según el valor de la celda D24, las opciones de la lista varían. Uno de los valores de D24 crea en J24 una lista vacía, sin datos.
El problema que quiero solucionar es conseguir que si en D24 selecciono la opción que genera en J24 una lista vacía, esta celda me devuelva valor de vacío ("") sin necesidad de seleccionarla. Es decir, ¿como hago para que en J24 se me cambie la lista de validación al cambiar el valor de D24 automáticamente.
He probado con la fórmula condicional, pero no soy capaz que automáticamente el valor de J24 se cambie al cambiar el valor de D24.
Muchas gracias por adelantado.
Respuesta
1
Tienes una fácil solución copiando este código en la hoja
Private Sub Worksheet_Change(ByVal Target As Range)
datos = "D24"
If Not Application.Intersect(Target, Range(datos)) Is Nothing Then
 Range("J24").Select
    Range("D24").Select
End If
End Sub
Con esto cada vez que cambie el valor en en D24 se sitúa en J24 y regresa a D24
Si no sabes como introducir el código me lo dices y te lo explico
Hola experto. Primero que todo muchas gracias por tu respuesta.
La verdad es que no soy capaz de aplicarla. En tiendo que el código a copiar es en Vb. He creado un móculo nuevo y he copiado el texto. No me funciona. No tengo mucha idea de crear macros. He pensado que el problema podría ser que no indacba la hoja de trabajo del libro. He dejado lo siguiente:
Private Sub Worksheet_Change(ByVal Target As Range)
Sheets("PARTE").Select
datos = "D24"
If Not Application.Intersect(Target, Range(datos)) Is Nothing Then
 Range("J24").Select
    Range("D24").Select
End If
End Sub
¿Sería necesario para ejecutar la macro asignarla a algo para que se ejecute? Tal vez la pregunta sea estúpida. Lo siento. Es que no tengo ni idea de macros.
De todas fromas intentaré aclarar la cuestión un poco más por si hay otra solución.
No soy capaz de que me deje en blanco la celda J24 al seleccionar en D24 una lista vacía sin necesidad de tener que elegir yo la vacía. Por si te puedo aclarar te explico lo que he hecho:
En D24 hay una lista de validación con nombre con tres opciones: XX, XY, XZ. Cada una de ellas, a su vez es el nombre de una lista.
En J24 hay otra lista con validación basada en la fórmula INDIRECTO(D24). De esta forma, sin en D24 elijo XX, en J24 me aparece la lista que se llama XX. Si en D24 elijo XY, las opciones en J24 son las de la lista que se llama XY. Con XZ lo mismo.
La cuestión es que para que la lista de J24 se cambie debes entrar en la celda, seleccionar de la lista y así dejar lo que quieres. La cuestión es que una de las listas, la XZ está vacía. Al seleccionar en D24 XZ en J24 las opciones de esta lista es una celda vacía. Pues bien ¿cómo hago yo para que en J24 aparezca la celda vacía de la lista XZ SÓLO CON SELECCIONAR EN D24 XZ?
Sería algo parecido al formato condicional. En el momento que se da la codición, automáticamento se modifica el formato. Pensé en una fórmula condiconal anidada en J24, pero la tener la lista de validación con una fórmula, no me deja introducir otra fórmula además de la validación con la lista.
En cualquier caso muchísimas gracias por tu tiempo e interés.
El código que te pase lo tienes que pegar en el editor de proyectos pero en la hoja donde tengas las listas no en un modulo
de todas formas te conteste muy rapido y no prove el código y no funciona bien pues solo con seleccionar la casilla no te cambia el valor sigue estos pasos
entra en el editor de proyectos a la izquierda arriba te sale una ventana donde están los nombres de las hojas pincha 2 veces en el nombre de la hoja que tienes las listas de validación y pegas este código
Private Sub Worksheet_Change(ByVal Target As Range)
datos = "D24"
If Not Application.Intersect(Target, Range(datos)) Is Nothing Then
If [D24] = "XZ" Then
 Range("J24").Select
    Selection.ClearContents
    Range("D24").Select
End If
End If
End Sub
Eso debe funcionarte cada vez que selecciones zx en d24 borrara lo que tengas en j24
Si no te funciona dímelo y buscaremos otra solución
Si como creo te vale no olvides puntuar y cerrar la pregunta
OK. Perfecto. Muchisssimasss gracias. No tenía ni idea de que se pudiera insertar en proyecto sin asignarlo a un módulo. Maravilloso. Me solucionas un problema y me das una clase magistral.
Repito, Muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas