¿Cómo puedo eliminar automaticamente las opciones de una lista desplegable al seleccionar un item?

Os escribo porque tengo un grupo de alumnos y quiero hacer parejas. Para eso he creado con validación de datos una lista desplegable con el nombre de ellos. ¿Cómo podría lograr que cuando un nombre que es seleccionado ya no salga en los otros desplegables?

Ejemplo:

Alumnos: Pedro, juan, maría, isabel

Cuando abro el primer desplegable me salen las 4 opciones (imaginemos que seleccionamos maría). Me gustaría que en el siguiente desplegable aparecieran 3 opciones (todas menos maría) y seleccionaríamos por ejemplo juan. En el siguiente desplegable solo deberían salir 2 opciones... Y así sucesivamente.

¿Cómo podría lograr hacer eso? ¿Es posible con validación de datos?

1 Respuesta

Respuesta
1

Pol, te anticipo que de Excel no tengo ni idea, lo que se dice ni idea, pero por si el código te puede dar una inspiración. Lo puedes hacer de mil formas. Por ejemplo, supongamos que tengo una tabla Alumnos( que supongo que sería tu hoja con sus celdas), con el nombre de un alumno y una casilla de verificación, para saber si ha sido elegido o no.

También tengo un formulario con tres cuadros de lista(podían ser 4 pero eso es trabajar mucho y hoy es sábado). Al primero si le doy origen de la fila, aunque se le podría dar después. A los demás se lo doy en código.

Voy a elegir a Antonio Moreno( es el mejor alumno y se merece ser el primero)

Como puedes ver, en Lista2 ya no aparece. Ahora en el segundo cuadro de lista elijo a Hanna Moos( es muy guapa y Antonio se la merece)

Y ¡voilá! Hanna ha desaparecido

El código del evento Después de actualizar del cuadro de lista Lista0 es

Private Sub Lista0_AfterUpdate()
DoCmd.RunSQL "update alumnos set elegido=-1 where alumno='" & Me.Lista0 & "'"
Lista2.RowSource = "select alumno from alumnos where elegido=0 order by alumno"
End Sub

Es decir, una vez que he elegido a alguien en el primero, que me "marque" en la tabla Alumnos la casilla de Elegido a ese alumno y que el origen de la fila del segundo cuadro de lista sean aquellos alumnos que no "están marcados"

En el evento Después de actualizar del cuadro de lista Lista2 le pongo algo similar

Private Sub Lista2_AfterUpdate()
DoCmd.RunSQL "update alumnos set elegido=-1 where alumno='" & Me.Lista2 & "'"
Lista4.RowSource = "select alumno from alumnos where elegido=0 order by alumno"
End Sub

Pero como te decía habría muchas formas de hacerlo

Me has dado una idea y ya casi lo tengo.  He hecho un contar si cuando el alumno sea seleccionado y le suma un 1. Después he realizado  una fórmula matricial para que me de un una lista de los niños que no estan seleccionados (valor 0).

=SI.ERROR(INDICE($B1:$B$21;K.ESIMO.MENOR(SI($C$2:$C$21=0; FILA()); FILA()-1));"")

Este problema ya esta resuelto muchas gracias por tu idea

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas