Lista desplegable con filtro

09/10/2007 - 09:19 por Principiante | Informe spam
Hola grupo.

No sabía muy bien cómo llamar a la duda que tengo.

Se puede hacer una lista desplegable en excel que tome los valores de
unas celdas o se haga por código (ya se que si) y que cuando pulsemos
sobre ella y empecemos a escribir una A, por ejemplo, sólo vayan
quedando los valores que empiezan por esa letra en la misma para elegir?

Es el típico caso de ir escribiendo ACE... y sólo van quedando los
valores de la lista que empiezan por esos caracteres...

Gracias.

Principiante.
 

Leer las respuestas

#1 AnSanVal
09/10/2007 - 15:48 | Informe spam
(Hasta donde se) Con Excel estandar, cuando el usuario está escribiendo en
una celda, el control lo tiene el usuario y no se ejecuta ningún evento (que
pueda leer los caracteres que este está escribiendo), hasta que pulse la
tecla INTRO.

Pero si utilizas una celda auxiliar (p.e. para ACE) y algo de código,
podrias hacer algo asi:

En este ejemplo (Si la celda auxiliar está vacia, en la celda validada es
válida toda la lista (muestra todo).):
[P2:P14] rango con datos para Validación.
[A2] celda auxiliar.
[B2] celda validada.
Validación por LISTA: ÞSREF(Q2;0;0;CONTARA(Q:Q))

(Código en el módulo de la hoja)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then ' celda auxiliar.
Dim miRango, celda As Range
Dim n, fila As Integer
Set miRango = Range("P2:P14") ' rango con nombres a validar.
Columns(miRango.Column + 1).ClearContents ' borrado previo de lista
validada anterior.
For Each celda In miRango ' recorre las celdas del listado con nombres.
' fila donde escribirá el próximo nombre.
fila = Application.WorksheetFunction.CountA(celda.Offset(,
1).EntireColumn) + 2
' si corresponde escribir el nombre...
If UCase(Left(celda.Value, Len(Cells(2, 1).Value))) = UCase(Cells(2,
1).Value) Then
Cells(fila, celda.Column + 1).Value = celda.Value ' añade el nombre
a la lista.
End If
Next celda
Cells(2, 2).Select ' selecciona la celda validada.
Selection.ClearContents ' borra la selección anterior.
If fila < 4 Then ' si el filtrado contiene un solo dato o está vacio...
If fila = 3 Then ' si hay un solo dato coincidente...
Cells(2, 2).Value = Cells(2, miRango.Column + 1).Value
Else ' si no hay coincidencias...
Cells(2, miRango.Column + 1).Value = "No hay coincidentes"
Selection.Value = "No hay coincidentes"
End If
End If
End If
End Sub

Saludos desde Tenerife (Islas Canarias).
************************************************
"Principiante" escribió en el mensaje
news:
Hola grupo.

No sabía muy bien cómo llamar a la duda que tengo.

Se puede hacer una lista desplegable en excel que tome los valores de unas
celdas o se haga por código (ya se que si) y que cuando pulsemos sobre
ella y empecemos a escribir una A, por ejemplo, sólo vayan quedando los
valores que empiezan por esa letra en la misma para elegir?

Es el típico caso de ir escribiendo ACE... y sólo van quedando los valores
de la lista que empiezan por esos caracteres...

Gracias.

Principiante.

Preguntas similares