Validación por aproximación de letras listado

30/08/2007 - 13:38 por Auyuz | Informe spam
Buen@s:

Tengo un libro con varias hojas. En una tengo un listado de aparatos
con diferentes columnas con diferentes datos de estos aparatos como
por ejemplo modelo, precio, descripcion... etc llamado Master_Aparatos
donde he creado un nombre "modelo" que hace referencia a un rango
(columna) de todos los modelos de los aparatos.

modelo
=Master_Aparatos!$J$12:$J$3011

En una hoja a parte quiero entrar el modelo y que me escriba en las
columnas de al lado "Descripción", "Precio".

Esto en principio sería bastante sencillo haciendo una validación de
una lista que hace referencia al nombre creado "modelo" y desplegar
lista pero eso no es exactamente lo que quiero.

Había una manera de escribir y a medida que vas escribiendo validaba
con la lista... pero no la encuentro.

Después para que escribiera en las columnas de al lado "Precio" y
"Descripción" se utilizaba una fórmula que diciendole (Valor a
buscar;Rango donde tiene que buscar;Valor que queremos que nos
retorne) estoy en ello buscando.

La segunda parte seguro que lo encuentro pero la primera parte no hay
maneras de encontrarlo sin tener que hacer Vb.

Agradecería un pocode luz sobre el tema. gracias por adelantado,
saludos!

Preguntas similare

Leer las respuestas

#1 Auyuz
30/08/2007 - 14:47 | Informe spam
Más detalles:
Hoja Master_Aparatos

Modelo Descripción Precio
...
1110 Cafetera 00 1.000,00€
1111 Cafetera 01 2.000,00€
1112 Cafetera 02 3.000,00€
1113 Cafetera 03 4.000,00€
1114 Cafetera 04 5.000,00€
...

En esta hoja pueden exitir unos 5.000 aparatos aprox diferentes

En hoja Entrada_Datos. al poner un 1 se despliega la lista con los
modelos de los aparatos que empiezan... como si fuera un
autocompletar

(La manera más básica (validación... lista) como podéis comprender
si tenemos 5000 aparatos ordenados alfabéticamente con la flecha de
validación lista tardaremos mucho tiempo hasta encontrar el modelo en
concreto)

Modelo Descripción Precio
1
1110
1111
1112
1113
1114

La segunda parte sigo buscando...

Gracias
Respuesta Responder a este mensaje
#2 Héctor Miguel
01/09/2007 - 03:21 | Informe spam
hola, joan ?

... libro con varias hojas. En una... un listado de aparatos con diferentes columnas con
... datos... como... modelo, precio, descripcion... etc llamado Master_Aparatos
donde he creado un nombre "modelo" que hace referencia a un rango (columna) de todos los modelos de los aparatos.
modelo =Master_Aparatos!$J$12:$J$3011
En una hoja a parte quiero entrar el modelo y que me escriba en las columnas de al lado "Descripcion", "Precio".
Esto en principio seria bastante sencillo haciendo una validacion de una lista que hace referencia al nombre creado "modelo"
y desplegar lista pero eso no es exactamente lo que quiero.
Habia una manera de escribir y a medida que vas escribiendo validaba con la lista... pero no la encuentro...



[hasta donde se]... no *existe* tal manera de validar auto-filtrando/completando segun vas escribiendo [SIN vba] ;)

de los datos que expones en esta consulta, se puede desprender/intuir/adivinar/[casi] ver/...
cual es la idea para solucion del planteamiento [sin embargo, creo que]...
mas que *faltarle datos*... la faltan los *detalles finos* [rangos, hojas, de donde, a donde, como, por que, etc.]

por lo pronto, solo me atrevo a opinar sobre las -posibles- alterntivas aplicables a estas necesidades :-(

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

1) te sugiero un userform con un control de lista que se vaya actualizando segun caracteres ingresados en un cuadro de texto

2) para obtener [segun caracteres-criterio en el cuadro de texto] una lista *filtrada* para el relleno del control de lista...
tienes disponibles varias alternativas [segun la complejidad de tu listado/base de datos/campos/registros/etc.] p.e.
- consulta a bases de datos [access/excel/csv/txt] mediante ADO/Recordset/..., Obtener datos externos/MSQuery/...
- autofiltros... filtros avanzados... hojas ocultas... rangos des/re/ordenados...
- listas con formulas condicionadas para extraer -como- filtros, nombres con referencia a rangos dinamicos, etc. etc. etc.

3) determinar cual mecanismo/medio/... es mejor [seguramente] dependera de algunas otras eventualidades [p.e.]
- si no es inconveniente mantener abierto el archivo de origen
[asumiendo listados en excel y/o si contiene muchas/demasiadas formulas que afecten los re/calculos]
- si puedes convertir tu base de datos a un archivo *simple* de texto, csv, tab, etc. [pudiera tener sus ventajas]
- si el numero de campos/columnas de tu listado/base de datos es... *dinamica/variable/...*
o seran siempre las mismas [sobre todo para el tema de *ir filtrando* lo que pongas en el cuadro de texto] -?-

algo de lo anterior [quizas combinado y/o adicionado con otras alternativas]
podria darte la sensacion de actualizaciones/refrescos/... *en tiempo real* [o con un retraso bastante *aceptable*]

un ejemplo:

si suponemos que se trata de la 'hoja1', y que en el userform contiene un TextBox1 y un ListBox1
y que SOLO necesitas los datos de la columna 'A' y que tienes libre en la hoja1 a partir de la columna 'C' -?-

1) copia el titulo de la columna 'A' en la cela 'D1'
2) copia/pega las siguientes lineas en el modulo de codigo del formulario
hara filtros avanzados 'en tiempo real' sobre la columna 'F' de la hoja1 y rellenara el ListBox1...
-> segun los caracteres que vayas introduciendo en el TextBox1

Private Sub TextBox1_Change()
With Worksheets("hoja1")
.Range("d2") = TextBox1
.Range(.Range("a1"), .Range("a65536").End(xlUp)).AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("d1:d2"), _
CopyToRange:=.Range("f1"), _
Unique:=False
Select Case Application.CountA(.Range("f:f"))
Case 1: ListBox1.Clear
Case 2: ListBox1.Clear: ListBox1.AddItem .Range("f2")
Case Else: ListBox1.List = .Range(.Range("f2"), .Range("f65536").End(xlUp)).Value
End Select
End With
End Sub
Respuesta Responder a este mensaje
#3 charly_76
08/11/2007 - 04:35 | Informe spam
HOLA HECTOR! COMO SIEMPRE DISTE UNA RESPUESTA DE MUCHA
UTILIDAD
ESTA MACRO QUE HICISTE PARA JOAN TIENE MUCHOS USOS
ESTA BUENISIMA
Y AMI EN LO PERSONAL ME SERVIRIA MUCHO
SOLO HAY ALGO QUE LA HARIA MAS UTIL Y QUE CREO QUE JOAN ESTA
BUSCANDO (Y YO TAAMBIEN) ES QUE LAS SUGERENCIAS
QUE VA MOSTRANDO EL LISTBOX1 SE PUEDAN SELECCIONAR CON UN CLICK
O FLECHA HACIA ABAJO Y ENTER (QUE DE ALGUNA MANERA SE PUEDA ELEGIR DE LA
LISTA)
Y ASI SE ESCRIBA TODO EN D1 Y NO HAYA NECESIDAD QUE ESCRIBIR TODO, ESO
AHORRARIA MUCHO TIEMPO EN EL LLENADO DE LISTAS ETC.
(DEPENDIENDO DE LA IMAGINACION DE CADA QUIEN)
NO SE SI ESO SE PUEDA OJALA QUE SI.

SALUDOS A TODOS...

"Héctor Miguel" escribió:

hola, joan ?

> ... libro con varias hojas. En una... un listado de aparatos con diferentes columnas con
> ... datos... como... modelo, precio, descripcion... etc llamado Master_Aparatos
> donde he creado un nombre "modelo" que hace referencia a un rango (columna) de todos los modelos de los aparatos.
> modelo =Master_Aparatos!$J$12:$J$3011
> En una hoja a parte quiero entrar el modelo y que me escriba en las columnas de al lado "Descripcion", "Precio".
> Esto en principio seria bastante sencillo haciendo una validacion de una lista que hace referencia al nombre creado "modelo"
> y desplegar lista pero eso no es exactamente lo que quiero.
> Habia una manera de escribir y a medida que vas escribiendo validaba con la lista... pero no la encuentro...

[hasta donde se]... no *existe* tal manera de validar auto-filtrando/completando segun vas escribiendo [SIN vba] ;)

de los datos que expones en esta consulta, se puede desprender/intuir/adivinar/[casi] ver/...
cual es la idea para solucion del planteamiento [sin embargo, creo que]...
mas que *faltarle datos*... la faltan los *detalles finos* [rangos, hojas, de donde, a donde, como, por que, etc.]

por lo pronto, solo me atrevo a opinar sobre las -posibles- alterntivas aplicables a estas necesidades :-(

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

1) te sugiero un userform con un control de lista que se vaya actualizando segun caracteres ingresados en un cuadro de texto

2) para obtener [segun caracteres-criterio en el cuadro de texto] una lista *filtrada* para el relleno del control de lista...
tienes disponibles varias alternativas [segun la complejidad de tu listado/base de datos/campos/registros/etc.] p.e.
- consulta a bases de datos [access/excel/csv/txt] mediante ADO/Recordset/..., Obtener datos externos/MSQuery/...
- autofiltros... filtros avanzados... hojas ocultas... rangos des/re/ordenados...
- listas con formulas condicionadas para extraer -como- filtros, nombres con referencia a rangos dinamicos, etc. etc. etc.

3) determinar cual mecanismo/medio/... es mejor [seguramente] dependera de algunas otras eventualidades [p.e.]
- si no es inconveniente mantener abierto el archivo de origen
[asumiendo listados en excel y/o si contiene muchas/demasiadas formulas que afecten los re/calculos]
- si puedes convertir tu base de datos a un archivo *simple* de texto, csv, tab, etc. [pudiera tener sus ventajas]
- si el numero de campos/columnas de tu listado/base de datos es... *dinamica/variable/...*
o seran siempre las mismas [sobre todo para el tema de *ir filtrando* lo que pongas en el cuadro de texto] -?-

algo de lo anterior [quizas combinado y/o adicionado con otras alternativas]
podria darte la sensacion de actualizaciones/refrescos/... *en tiempo real* [o con un retraso bastante *aceptable*]

un ejemplo:

si suponemos que se trata de la 'hoja1', y que en el userform contiene un TextBox1 y un ListBox1
y que SOLO necesitas los datos de la columna 'A' y que tienes libre en la hoja1 a partir de la columna 'C' -?-

1) copia el titulo de la columna 'A' en la cela 'D1'
2) copia/pega las siguientes lineas en el modulo de codigo del formulario
hara filtros avanzados 'en tiempo real' sobre la columna 'F' de la hoja1 y rellenara el ListBox1...
-> segun los caracteres que vayas introduciendo en el TextBox1

Private Sub TextBox1_Change()
With Worksheets("hoja1")
.Range("d2") = TextBox1
.Range(.Range("a1"), .Range("a65536").End(xlUp)).AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("d1:d2"), _
CopyToRange:=.Range("f1"), _
Unique:=False
Select Case Application.CountA(.Range("f:f"))
Case 1: ListBox1.Clear
Case 2: ListBox1.Clear: ListBox1.AddItem .Range("f2")
Case Else: ListBox1.List = .Range(.Range("f2"), .Range("f65536").End(xlUp)).Value
End Select
End With
End Sub



Respuesta Responder a este mensaje
#4 Héctor Miguel
08/11/2007 - 05:41 | Informe spam
hola, charly !

... RESPUESTA DE... UTILIDAD... EN LO PERSONAL ME SERVIRIA
... HAY ALGO QUE LA HARIA MAS UTIL... ES QUE LAS SUGERENCIAS QUE VA MOSTRANDO EL LISTBOX1
SE PUEDAN SELECCIONAR CON UN CLICK O FLECHA HACIA ABAJO Y ENTER
(QUE DE ALGUNA MANERA SE PUEDA ELEGIR DE LA LISTA)
Y ASI SE ESCRIBA TODO EN D1 Y NO HAYA NECESIDAD QUE ESCRIBIR TODO
AHORRARIA MUCHO TIEMPO EN EL LLENADO DE LISTAS ETC.
(DEPENDIENDO DE LA IMAGINACION DE CADA QUIEN)
NO SE SI ESO SE PUEDA OJALA QUE SI.



es probable que en el ejemplo me hubiera quedado corto... (considerando que "tuve que" imaginar un escenario de aplicacion)

podrias incluir codigo del evento '_change' del control de lista para depositar en alguna celda la seleccion que hagas
(obviamente) en cuanto veas que el listado muestra algun elemento que te interesa (p.e.)

1) necesitaras una variable de tipo boolean para indicarle al evento '_change' que no se dispare en la carga de los datos
declarada a nivel de modulo, adminstrada en el procedimiento "Private Sub TextBox1_Change()"
establecida en True al inicio del codigo y en False justo antes del End Sub
(digamos que la variable se llama "Cargando_datos")

2) agregas codigo al evento '_change' del control de lista (ListBox1) +/- como sigue:

Private Sub ListBox1_Change()
If Cargando_datos Then Exit Sub
With ListBox1
Worksheets("hoja X").Range("d1) = .List(.ListIndex)
End With
End Sub

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ la consulta de referencia __
hola, joan ?

> ... libro con varias hojas. En una... un listado de aparatos con diferentes columnas con
> ... datos... como... modelo, precio, descripcion... etc llamado Master_Aparatos
> donde he creado un nombre "modelo" que hace referencia a un rango (columna) de todos los modelos de los aparatos.
> modelo =Master_Aparatos!$J$12:$J$3011
> En una hoja a parte quiero entrar el modelo y que me escriba en las columnas de al lado "Descripcion", "Precio".
> Esto en principio seria bastante sencillo haciendo una validacion de una lista que hace referencia al nombre creado "modelo"
> y desplegar lista pero eso no es exactamente lo que quiero.
> Habia una manera de escribir y a medida que vas escribiendo validaba con la lista... pero no la encuentro...

[hasta donde se]... no *existe* tal manera de validar auto-filtrando/completando segun vas escribiendo [SIN vba] ;)

de los datos que expones en esta consulta, se puede desprender/intuir/adivinar/[casi] ver/...
cual es la idea para solucion del planteamiento [sin embargo, creo que]...
mas que *faltarle datos*... la faltan los *detalles finos* [rangos, hojas, de donde, a donde, como, por que, etc.]

por lo pronto, solo me atrevo a opinar sobre las -posibles- alterntivas aplicables a estas necesidades :-(

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

1) te sugiero un userform con un control de lista que se vaya actualizando segun caracteres ingresados en un cuadro de texto

2) para obtener [segun caracteres-criterio en el cuadro de texto] una lista *filtrada* para el relleno del control de lista...
tienes disponibles varias alternativas [segun la complejidad de tu listado/base de datos/campos/registros/etc.] p.e.
- consulta a bases de datos [access/excel/csv/txt] mediante ADO/Recordset/..., Obtener datos externos/MSQuery/...
- autofiltros... filtros avanzados... hojas ocultas... rangos des/re/ordenados...
- listas con formulas condicionadas para extraer -como- filtros, nombres con referencia a rangos dinamicos, etc. etc. etc.

3) determinar cual mecanismo/medio/... es mejor [seguramente] dependera de algunas otras eventualidades [p.e.]
- si no es inconveniente mantener abierto el archivo de origen
[asumiendo listados en excel y/o si contiene muchas/demasiadas formulas que afecten los re/calculos]
- si puedes convertir tu base de datos a un archivo *simple* de texto, csv, tab, etc. [pudiera tener sus ventajas]
- si el numero de campos/columnas de tu listado/base de datos es... *dinamica/variable/...*
o seran siempre las mismas [sobre todo para el tema de *ir filtrando* lo que pongas en el cuadro de texto] -?-

algo de lo anterior [quizas combinado y/o adicionado con otras alternativas]
podria darte la sensacion de actualizaciones/refrescos/... *en tiempo real* [o con un retraso bastante *aceptable*]

un ejemplo:

si suponemos que se trata de la 'hoja1', y que en el userform contiene un TextBox1 y un ListBox1
y que SOLO necesitas los datos de la columna 'A' y que tienes libre en la hoja1 a partir de la columna 'C' -?-

1) copia el titulo de la columna 'A' en la cela 'D1'
2) copia/pega las siguientes lineas en el modulo de codigo del formulario
hara filtros avanzados 'en tiempo real' sobre la columna 'F' de la hoja1 y rellenara el ListBox1...
-> segun los caracteres que vayas introduciendo en el TextBox1

Private Sub TextBox1_Change()
With Worksheets("hoja1")
.Range("d2") = TextBox1
.Range(.Range("a1"), .Range("a65536").End(xlUp)).AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("d1:d2"), _
CopyToRange:=.Range("f1"), _
Unique:=False
Select Case Application.CountA(.Range("f:f"))
Case 1: ListBox1.Clear
Case 2: ListBox1.Clear: ListBox1.AddItem .Range("f2")
Case Else: ListBox1.List = .Range(.Range("f2"), .Range("f65536").End(xlUp)).Value
End Select
End With
End Sub
Respuesta Responder a este mensaje
#5 charly_76
08/11/2007 - 18:20 | Informe spam
hola hector nuevamente!!
no conosco mucho de macros pero te comento lo que hice.
hice clic boton dereccho del mause sobre el listBox1 despues, ver codigo
y ahy pegue:

Private Sub ListBox1_Change()
If Cargando_datos Then Exit Sub
With ListBox1
Worksheets("hoja X").Range("d1) = .List(.ListIndex)
End With
End Sub



pero cuando escribo algo en el textbox1 me manda un mensaje
que dice error de compilacion error de sintaxis

que estoy haciendo mal o que me falta ???

me puedes ayudar? de antemano gracias

"Héctor Miguel" escribió:

hola, charly !

> ... RESPUESTA DE... UTILIDAD... EN LO PERSONAL ME SERVIRIA
> ... HAY ALGO QUE LA HARIA MAS UTIL... ES QUE LAS SUGERENCIAS QUE VA MOSTRANDO EL LISTBOX1
> SE PUEDAN SELECCIONAR CON UN CLICK O FLECHA HACIA ABAJO Y ENTER
> (QUE DE ALGUNA MANERA SE PUEDA ELEGIR DE LA LISTA)
> Y ASI SE ESCRIBA TODO EN D1 Y NO HAYA NECESIDAD QUE ESCRIBIR TODO
> AHORRARIA MUCHO TIEMPO EN EL LLENADO DE LISTAS ETC.
> (DEPENDIENDO DE LA IMAGINACION DE CADA QUIEN)
> NO SE SI ESO SE PUEDA OJALA QUE SI.

es probable que en el ejemplo me hubiera quedado corto... (considerando que "tuve que" imaginar un escenario de aplicacion)

podrias incluir codigo del evento '_change' del control de lista para depositar en alguna celda la seleccion que hagas
(obviamente) en cuanto veas que el listado muestra algun elemento que te interesa (p.e.)

1) necesitaras una variable de tipo boolean para indicarle al evento '_change' que no se dispare en la carga de los datos
declarada a nivel de modulo, adminstrada en el procedimiento "Private Sub TextBox1_Change()"
establecida en True al inicio del codigo y en False justo antes del End Sub
(digamos que la variable se llama "Cargando_datos")

2) agregas codigo al evento '_change' del control de lista (ListBox1) +/- como sigue:

Private Sub ListBox1_Change()
If Cargando_datos Then Exit Sub
With ListBox1
Worksheets("hoja X").Range("d1) = .List(.ListIndex)
End With
End Sub

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ la consulta de referencia __
>> hola, joan ?
>>
>> > ... libro con varias hojas. En una... un listado de aparatos con diferentes columnas con
>> > ... datos... como... modelo, precio, descripcion... etc llamado Master_Aparatos
>> > donde he creado un nombre "modelo" que hace referencia a un rango (columna) de todos los modelos de los aparatos.
>> > modelo =Master_Aparatos!$J$12:$J$3011
>> > En una hoja a parte quiero entrar el modelo y que me escriba en las columnas de al lado "Descripcion", "Precio".
>> > Esto en principio seria bastante sencillo haciendo una validacion de una lista que hace referencia al nombre creado "modelo"
>> > y desplegar lista pero eso no es exactamente lo que quiero.
>> > Habia una manera de escribir y a medida que vas escribiendo validaba con la lista... pero no la encuentro...
>>
>> [hasta donde se]... no *existe* tal manera de validar auto-filtrando/completando segun vas escribiendo [SIN vba] ;)
>>
>> de los datos que expones en esta consulta, se puede desprender/intuir/adivinar/[casi] ver/...
>> cual es la idea para solucion del planteamiento [sin embargo, creo que]...
>> mas que *faltarle datos*... la faltan los *detalles finos* [rangos, hojas, de donde, a donde, como, por que, etc.]
>>
>> por lo pronto, solo me atrevo a opinar sobre las -posibles- alterntivas aplicables a estas necesidades :-(
>>
>> si cualquier duda [o informacion adicional]... comentas ?
>> saludos,
>> hector.
>>
>> 1) te sugiero un userform con un control de lista que se vaya actualizando segun caracteres ingresados en un cuadro de texto
>>
>> 2) para obtener [segun caracteres-criterio en el cuadro de texto] una lista *filtrada* para el relleno del control de lista...
>> tienes disponibles varias alternativas [segun la complejidad de tu listado/base de datos/campos/registros/etc.] p.e.
>> - consulta a bases de datos [access/excel/csv/txt] mediante ADO/Recordset/..., Obtener datos externos/MSQuery/...
>> - autofiltros... filtros avanzados... hojas ocultas... rangos des/re/ordenados...
>> - listas con formulas condicionadas para extraer -como- filtros, nombres con referencia a rangos dinamicos, etc. etc. etc.
>>
>> 3) determinar cual mecanismo/medio/... es mejor [seguramente] dependera de algunas otras eventualidades [p.e.]
>> - si no es inconveniente mantener abierto el archivo de origen
>> [asumiendo listados en excel y/o si contiene muchas/demasiadas formulas que afecten los re/calculos]
>> - si puedes convertir tu base de datos a un archivo *simple* de texto, csv, tab, etc. [pudiera tener sus ventajas]
>> - si el numero de campos/columnas de tu listado/base de datos es... *dinamica/variable/...*
>> o seran siempre las mismas [sobre todo para el tema de *ir filtrando* lo que pongas en el cuadro de texto] -?-
>>
>> algo de lo anterior [quizas combinado y/o adicionado con otras alternativas]
>> podria darte la sensacion de actualizaciones/refrescos/... *en tiempo real* [o con un retraso bastante *aceptable*]
>>
>> un ejemplo:
>>
>> si suponemos que se trata de la 'hoja1', y que en el userform contiene un TextBox1 y un ListBox1
>> y que SOLO necesitas los datos de la columna 'A' y que tienes libre en la hoja1 a partir de la columna 'C' -?-
>>
>> 1) copia el titulo de la columna 'A' en la cela 'D1'
>> 2) copia/pega las siguientes lineas en el modulo de codigo del formulario
>> hara filtros avanzados 'en tiempo real' sobre la columna 'F' de la hoja1 y rellenara el ListBox1...
>> -> segun los caracteres que vayas introduciendo en el TextBox1
>>
>> Private Sub TextBox1_Change()
>> With Worksheets("hoja1")
>> .Range("d2") = TextBox1
>> .Range(.Range("a1"), .Range("a65536").End(xlUp)).AdvancedFilter _
>> Action:=xlFilterCopy, _
>> CriteriaRange:=.Range("d1:d2"), _
>> CopyToRange:=.Range("f1"), _
>> Unique:=False
>> Select Case Application.CountA(.Range("f:f"))
>> Case 1: ListBox1.Clear
>> Case 2: ListBox1.Clear: ListBox1.AddItem .Range("f2")
>> Case Else: ListBox1.List = .Range(.Range("f2"), .Range("f65536").End(xlUp)).Value
>> End Select
>> End With
>> End Sub



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida