Foros del Web » Soporte técnico » Ofimática »

filtro avanzado de forma relativa

Estas en el tema de filtro avanzado de forma relativa en el foro de Ofimática en Foros del Web. Tengo que hacer un filtro avanzado para una tabla que tengo. En ella existen títulos y otras cosas encima de la misma que no puedo ...
  #1 (permalink)  
Antiguo 22/03/2006, 10:28
 
Fecha de Ingreso: noviembre-2005
Mensajes: 170
Antigüedad: 18 años, 5 meses
Puntos: 1
filtro avanzado de forma relativa

Tengo que hacer un filtro avanzado para una tabla que tengo. En ella existen títulos y otras cosas encima de la misma que no puedo cambiar por lo que no puedo hacer referencia a las columnas. Tengo este código:

Sheets("Resultados act").Range("C6:BH10000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Resultados act").Range("L2:X3"), CopyToRange:=Range("C6:BH10000"), _
Unique:=False

Ahora de momento la tabla sólo tiene unas 3000 referencias pero he tenido que poner el 10000 para asegurar que si el día de mañana meten más, el programa funcione. Sin embargo tiene un límite admisible de 10000, que algún día podrá ser sobrepasado.
Tengo una variable "Num_Ref" que cuenta cuantas referencias existen y por ello se me ha ocurrido hacer un filtro relativo utilizando dicha variable para que mejore el rendimiento. Antes de meter dicha variable he probado a sustituir Range("C6:BH10000") por Range(Cells(6,3),Cells(10000,60)) y no funciona.

Sheets("Resultados act").Range(Cells(6, 3), Cells(10000, 60)).AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Resultados act").Range("L2:X3"), CopyToRange:=Range(Cells(6, 3), Cells(10000, 60)), _
Unique:=False

Debería de ser lo mismo. He intentado hacer otras cositas a la desesperada, pero no entiendo por qué no funciona si sí que lo hace con el select y otras funciones que he probado.

Alguno sabría cómo hacerlo o por lo menos explicarme por qué no funciona porque ya estoy un poquito artito del asunto

Un saludo y muchas gracias.
__________________
El sabio no dice nunca todo lo que piensa,
pero siempre piensa todo lo que dice.
Aristóteles :pensando:
  #2 (permalink)  
Antiguo 23/03/2006, 02:43
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Hola...

Pues debería funcionarte, potypoty. Mira este ejemplo que he hecho. Quizás sea un expediente X de esos que se solucionan con copiar y pegar todo en un nuevo libro...

Salu2
  #3 (permalink)  
Antiguo 23/03/2006, 04:19
 
Fecha de Ingreso: noviembre-2005
Mensajes: 170
Antigüedad: 18 años, 5 meses
Puntos: 1
casi pero no

No sé por qué pero me imaginaba que serías tú quién respondiera primer@.
Ya he visto que tu prueba funciona, pero no es exactamente lo que estoy buscando, ya que yo quiero que me copie los resultados en otra hoja y es aquí donde surgen los problemas debido a que no me admite el cambio de hoja. Con el range(".....") si me funciona, pero con range(cells(),cells()) pues NO lo he conseguido. Mira que he estado haciendo pruebas y buscando por todos los sitios habidos y por haber, pero na de na.
Soy único en encontrar los expedientes X en excel, que no?
Te agradezco mucho el intento y mucho más si pudieras hacer otro en el que los resultados se copiasen en otra hoja. Tu pones las condiciones y yo adapto mi curro.
Me estoy volviendo
__________________
El sabio no dice nunca todo lo que piensa,
pero siempre piensa todo lo que dice.
Aristóteles :pensando:
  #4 (permalink)  
Antiguo 23/03/2006, 05:23
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Creo que ya está solucionado, jejejeje. Me he dejado los cuernos, en el intento, pero al final, con una simple coletilla, funciona. No entiendo el porqué, ya que si el área de pegado es la misma hoja, no se necesita esa coletilla.

Si en el libro ese de ejemplo que he colgado, insertas una nueva hoja, y al código que hay, le añades lo que está en rojo, ya verás como funciona

Código:
Sub probatina()
    Range(Cells(8, 3), Cells(14, 5)).AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range(Cells(3, 3), Cells(4, 3)), _
    CopyToRange:=Hoja2.Range(Range(Cells(19, 3), Cells(19, 5)).Address), _
    Unique:=False
    Hoja1.Range("C20") = "¡¡¡Coño, funciona!!!. Mira la hoja siguiente."
End Sub
Parece absurdo tener ese "...Range(Range..." como anidado, pero así funciona. El método prueba-error es a veces infalible (aunque he estado a punto de decirte: "debe ser un bug de Excel, porque no tiene sentido que no funcione", jajaajaja).

Salu2
  #5 (permalink)  
Antiguo 23/03/2006, 05:34
 
Fecha de Ingreso: noviembre-2005
Mensajes: 170
Antigüedad: 18 años, 5 meses
Puntos: 1
De acuerdo

vale, voy a probarlo en mi aplicación y te comento cúal es el resultado.
El metodo prueba y error también lo estaba utilizando yo, he incluso he escrito también lo de address pero no con 2 range por delante y claro no funcionaba. Ya decía que eras muy buen@ porque yo ya me había dado por vencido y lo iba a dejar para otro día, el cual igual nunca llegaba.
Muchas gracias porque seguro que me vale.
__________________
El sabio no dice nunca todo lo que piensa,
pero siempre piensa todo lo que dice.
Aristóteles :pensando:
  #6 (permalink)  
Antiguo 23/03/2006, 05:45
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Coño, tus preguntas son de un nivel, en el que poco puedo hacer, jajajaja.

Como te decía, le ha faltado "ná", para que desistiera, porque no veía normal ese comportamiento del filtro. Además, en la ayuda no pone nada al respecto, ni en los filtros avanzados, ni en la propiedad "Cells".

En fin, no creo que se me vuelva a aparecer la Virgen otra vez
  #7 (permalink)  
Antiguo 23/03/2006, 05:51
 
Fecha de Ingreso: noviembre-2005
Mensajes: 170
Antigüedad: 18 años, 5 meses
Puntos: 1
De acuerdo Siiiiiiiiiiiiiiiiiiiiiii

Tu eres buen@ pequeñ@, tu eres buen@ pequeñ@. Que digo buen@ eres el P... am@.
He tenido que hacer algunas pruebas más porque lo del address lo tienes que poner en todo lo que haga referencia a la hoja que NO está activa en ese momento, pero como habrás podido deducir LO HE CONSEGUIDO, bueno LO HEMOS CONSEGUIDO.
Gracias, acabas de hacer que mi aplicación gane 7 u 8 segundos que creemé no es poco en mi caso.
__________________
El sabio no dice nunca todo lo que piensa,
pero siempre piensa todo lo que dice.
Aristóteles :pensando:
  #8 (permalink)  
Antiguo 23/03/2006, 06:01
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Una curiosidad, ¿de qué es la aplicación que estás haciendo?.
  #9 (permalink)  
Antiguo 23/03/2006, 06:08
 
Fecha de Ingreso: noviembre-2005
Mensajes: 170
Antigüedad: 18 años, 5 meses
Puntos: 1
es un configurador de actuadores eléctricos.

tengo un archivo (base de datos) para introducir datos, referencias, motores, etc.

otro (plantilla) en el que están las hojas que verá el usuario, pero sin ningún dato de nada para ahorrar espacio.

un tercero (plantilla) para realizar las ofertas finales a los clientes

de la combinación de los dos primeros sale el que se puede utilizar que tiene la apariencia (en hojas) del segundo y la información interesante del primero.

Además con este último y el tercero saldría la oferta que se guarda en la base de la empresa.

Ya ves todo un laberinto de archivos, ehh!
__________________
El sabio no dice nunca todo lo que piensa,
pero siempre piensa todo lo que dice.
Aristóteles :pensando:
  #10 (permalink)  
Antiguo 23/03/2006, 06:10
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Cita:
Iniciado por potypoty
Ya ves todo un laberinto de archivos, ehh!
Hasta yo me he perdido, jajajajaja.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:12.