Listbox con más de 10 Columnas.

5 envíos / 0 nuevos
Último envío
DavidSaGal
Imagen de DavidSaGal
Offline
última acción: Hace 8 años 6 meses
alta: 11/10/2015 - 13:44
Puntos: 45
Listbox con más de 10 Columnas.

Hola a tod@s. Haciendo referencia al ejemplo que resolvió Pacomegia al amigo Jesús Martínez sobre como hacer que un ListBox admitiera 14 Columnas, a mi se me plantea ese mismo dilema pero en lugar de Buscar una Fecha determinadas,  yo necesito acotar la búsqueda entre Dos fechas ( Fecha Inicial y Fecha Final). Estas fechas se encuentran en la columna A y esa columna de Fechas está ordenada cronológicamente. En mi formulario (muy similar al de Jesús Martine) en lugar de utilizar un Combobox, utilizo un DTPICKER para cada Fecha (Inicial y Final).Lo que no sé es como realizar el codigo para esa busqueda entre esas dos fechas. Tengo dudas de si se podría realizar con la función Find tanto para una como para la otra fecha...

Un saludo

Etiquetas: 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 semana 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
en aquel ejemplo, se buscaba

en aquel ejemplo, se buscaba una fecha, para ello se utilizaba "buscar" como si lo hicieses con buscar y reemplazar

rw = .Range(.Cells(i, 6), .Cells(1000000, 6)).Find(CDate(ComboBox2), lookat:=xlWhole).Row

Pero entiendo que lo que quieres ahora no es encontrar una coincidencia exacta, sino todos aquellos valores entre una fecha y otra, supongamos que entre los valores del combobox_fechainicial y el combobox_fechafinal

El problema al detectar esa primera fecha es que puede que no haya un dato exactamente igual a la fecha que indiques (por ejemplo puedes buscar de domingo a domingo, pero sólo tienes datos de lunes a viernes).
Entonces no nos sirve ese Find que utilizábamos antes.

El hecho de tener las fechas ordenadas nos sirve por ejemplo para utilizar la función COINCIDIR 

La función coincidir permite encontrar en una lista ordenada la posición de la celda cuyo valor es igual o inmediatamente inferior al valor buscado

Por ejemplo, en este caso, en una fórmula de una celda tendría este aspecto: 

=COINCIDIR(fechabuscada;rangoconfechasordenadas;1)

Ese último argumento 1 le indica que queremos la posición del valor menor o igual que lo que estamos buscando.

con esto tendríamos localizada la celda de la primera fecha

en vba sería algo parecido a esto:

posicionfechaanterior=Application.WorkSheetFunction.Match(fechabuscada,rangoconfechasordenadas,1)

Te devuelve la posición dentro del rango seleccionado, no el número de fila

Luego sería ir avanzando fila a fila y comprobando la fecha que tienes en esa fila hasta que sobrepasemos la fecha superior.


Esto tiene el riesgo de que te basas en que los datos estén ordenados, así que debes asegurarte de que realmente lo están para evitar un funcionamiento incorrecto.


 

 

 

------
Ya sé Excel, pero necesito más.

DavidSaGal
Imagen de DavidSaGal
Offline
última acción: Hace 8 años 6 meses
alta: 11/10/2015 - 13:44
Puntos: 45
Estoy atascado con el bucle.

Estoy atascado con el bucle. He utilizado un For. Pero no hay manera. 

A groso modo el código sería algo asi:

0=0

For i= 2 to items (donde items es una variable que recoge Toda la tabla de datos)

1er BUCLE: Si Fecha(de la columna de Fechas) >= DTPICKER y Fecha(de la columna de Fechas)<= DTPICKER2 entonces:

2° BUCLE:  Si Fecha(de la columna de Fechas) > DTPICKER       entonces

LISTBOX. LIST=TRANSPONER (auxMatriz)

ExitSub

FinSI

Redimensiono la matriz (0 yo 11, 0 to X)

auxMatriz (0,X)=Hoja1. Cells (i, 1)

auxMatriz (1,X)=Hoja 1.Cells (i,2)

...Así hasta 

auxMatriz (11,X)=Hoja 1.Cells (i,12)

Por último en este bucle:

X=X+1

Fin si

Next i

Cuando el código llega al 2° Bucle len el código pero en el ListBox 1 No aparecen la lista de items. ..

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 semana 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
aparentemente...

aparentemente este pseudo código está correcto

¿puedes adjuntar el código real para ver si algo no encaja?

 

------
Ya sé Excel, pero necesito más.

DavidSaGal
Imagen de DavidSaGal
Offline
última acción: Hace 8 años 6 meses
alta: 11/10/2015 - 13:44
Puntos: 45
Te dejo el archivo. He cogido

Te dejo el archivo. He cogido la parte de mi aplicación referente al Listbox. Ahora Funciona!!! Peeeero, nosé que Bloque If es el que falla puesto que sólo me muestra los tres primeros registros de la Tabla de datos.

Un saludo y gracias por echarme una mano Paco.

AdjuntoTamaño
File listbox12cols.xlsm38.58 KB