seleccionar la primer celda visible de una lista filtrada mediante filtro avanzado

02/05/2007 - 05:13 por LUIS DANNY SALAS | Informe spam
perdonen tanta molestia, necesito una instruccion para una macro que me
seleccione la primer celda visible de una columna que previamente fue
filtrada mediante filtro avanzado, el codigo que uso es este:

Range("A1:K508").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Workbooks("colega.xls").Sheets("REGISTRO").Range("Q165:V166"),
Unique:=True

una vez que hace esto necesito que se posicione en la primer celda visible
de la columna E, o de otra columna que se pueda escoger de acuerdo a una
condicion (el valor de una celda en el mismo libro u otro libro), pero de
momento por lo menos que se seleccione la primer celda
visible de la columna E

muchisimas gracias

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
02/05/2007 - 06:15 | Informe spam
hola, Luis !

... necesito una instruccion para una macro que me seleccione la primer celda visible
de una columna que previamente fue filtrada mediante filtro avanzado, el codigo que uso es este:
Range("A1:K508").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Workbooks("colega.xls").Sheets("REGISTRO").Range("Q165:V166"), Unique:=True
una vez que hace esto necesito que se posicione en la primer celda visible de la columna E
o de otra columna que se pueda escoger de acuerdo a una condicion (el valor de una celda en el mismo libro u otro libro)
pero de momento por lo menos que se seleccione la primer celda visible de la columna E



prueba con algo +/- como lo siguiente:

Sub Filtrado_1()
With Range("a1:k508")
.AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Workbooks("colega.xls").Worksheets("registro").Range("q165:v166"), _
Unique:=True
With .SpecialCells(xlCellTypeVisible)
On Error GoTo Ninguno
IIf(.Areas(1).Rows.Count > 1, _
.Areas(1).Cells(2, 5), .Areas(2).Cells(1, 5)).Select
End With
End With
Exit Sub
Ninguno:
MsgBox "Criterios no cumplidos !!!"
End Sub

si cualquiet duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Héctor Miguel
02/05/2007 - 08:23 | Informe spam
hola, Luis !

... sigo teniendo un problema, la celda la selecciona pero no se puede pegar en ella
las celdas que previamente fueron copiadas en la macro
no se cual es la isntruccion entonces, asi como lo puse me sale el msg Box [...]



considera los siguientes [al menos] dos 'detalles'...
1) si haces PRIMERO un 'copy'... este se conserva en memoria/portapapeles/... PERO...
si como 'acto siguiente' haces un filtro avanzado... el portapapeles se vacia [por lo tanto]...
despues del filtro avanzado... ya no hay nada... 'que pegar' :-((
2) trabajar con celdas 'filtradas' para hacer un 'pegado' de otro rango de celdas 'contiguas'...
NO es una 'garantia' que las celdas de 'destino' [tambien] hubieran quedado 'consecutivas'
el pegado 'se va de corrido' y cabe la posibilidad de que quede en celdas 'filtradas' NO-contiguas... a menos...
[obviamente] que tu estes seguro que 'destino' y 'origen' se correspondan en celdas 'visibles' continuas] -???-

prueba haciendo el 'copy/paste'... DESPUES de haber hecho los filtros avanzados +/- como sigue:

Sub Filtrado_1()
With Range("a1:k508")
.AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Workbooks("colega.xls").Worksheets("registro").Range("q165:v166"), _
Unique:=True
With .SpecialCells(xlCellTypeVisible)
On Error GoTo Ninguno
IIf(.Areas(1).Rows.Count > 1, _
.Areas(1).Cells(2, 5), .Areas(2).Cells(1, 5)).Select
End With
End With
Range("o132:o135").Copy ActiveCell
Exit Sub
Ninguno:
MsgBox "Criterios no cumplidos !!!"
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#3 LUIS DANNY SALAS
02/05/2007 - 09:23 | Informe spam
Gracias Hector pero sigo teniendo un problema,la celda la selecciona pero no
se puede pegar en ella las celdas que previamente fueron copiadas en la
macro, no se cual es la isntruccion entonces, asi como lo puse me sale el
msg Box

Sub Filtrado_1()

Range("O132:O135").Select
Selection.Copy


With Range("a1:k508")
.AdvancedFilter _
Action:=xlFilterInPlace, _



CriteriaRange:=Workbooks("colega.xls").Worksheets("registro").Range("q165:v1
66"), _
Unique:=True
With .SpecialCells(xlCellTypeVisible)
On Error GoTo Ninguno
IIf(.Areas(1).Rows.Count > 1, _
.Areas(1).Cells(2, 5), .Areas(2).Cells(1, 5)).Select
End With
End With



ActiveSheet.Paste


Exit Sub
Ninguno:
MsgBox "Criterios no cumplidos !!!"
End Sub














"Héctor Miguel" wrote in message
news:%23p%
hola, Luis !

> ... necesito una instruccion para una macro que me seleccione la primer


celda visible
> de una columna que previamente fue filtrada mediante filtro avanzado, el


codigo que uso es este:
> Range("A1:K508").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:_
> Workbooks("colega.xls").Sheets("REGISTRO").Range("Q165:V166"),


Unique:=True
> una vez que hace esto necesito que se posicione en la primer celda


visible de la columna E
> o de otra columna que se pueda escoger de acuerdo a una condicion (el


valor de una celda en el mismo libro u otro libro)
> pero de momento por lo menos que se seleccione la primer celda visible


de la columna E

prueba con algo +/- como lo siguiente:

Sub Filtrado_1()
With Range("a1:k508")
.AdvancedFilter _
Action:=xlFilterInPlace, _



CriteriaRange:=Workbooks("colega.xls").Worksheets("registro").Range("q165:v1
66"), _
Unique:=True
With .SpecialCells(xlCellTypeVisible)
On Error GoTo Ninguno
IIf(.Areas(1).Rows.Count > 1, _
.Areas(1).Cells(2, 5), .Areas(2).Cells(1, 5)).Select
End With
End With
Exit Sub
Ninguno:
MsgBox "Criterios no cumplidos !!!"
End Sub

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


Respuesta Responder a este mensaje
#4 Héctor Miguel
03/05/2007 - 06:37 | Informe spam
hola, Luis !

en lo que 'termino de masticar' el resto de tu mensaje [que no son tres o cuatro lineas]... :))
prueba con algo +/- como lo siguiente [aunque es 'practicamente' lo mismo que ya te habia sugerido]:...

OJO: si el rango sobre el que se hace el filtro avanzado... [A1:K508] es -tambien-... 'estimado' -?-
existe la posibilidad de que el 'conteo' de areas no resulte lo 'preciso' que se requiere por el procedimiento -?-

y... si cualquier duda [o informacion adicional -que no se encuntre en el mensaje anterior-]... comentas ?
saludos,
hector.

Sub Filtrado_1()
With Range("a1:k508")
.AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Workbooks("colega.xls").Worksheets("registro").Range("q165:v166"), _
Unique:=True
With .SpecialCells(xlCellTypeVisible)
On Error GoTo Ninguno
IIf(.Areas(1).Rows.Count > 1, _
.Areas(1).Cells(2, 5), .Areas(2).Cells(1, 5)).Select
End With
End With
With Worksheets("nota")
.Range(.Range("r2"), .Range("r65536").End(xlUp)).Copy ActiveCell
End With
Exit Sub
Ninguno:
MsgBox "Criterios no cumplidos !!!"
End Sub
Respuesta Responder a este mensaje
#5 LUIS DANNY SALAS
03/05/2007 - 07:07 | Informe spam
Tienes razon Hector, Si tengo la seguridad de que el filtrado quedara en
celdas seguidas, pero esto de nada me sirve

Talvez te explico con mas detalle lo que tengo y lo que quiero hacer y
talvez abusando de tu confianza podas ayudarme si no es mucha molestia?

Tengo un libro que se llama registro digital y en el hay una hoja que se
llama concentrado, en esta hoja se encuentra una lista de estudiantes de un
grupo (un grupo esta determinado por el nivel educativo y la respectiva
seccion : por ejemplo: 11-B) en la que se muestra su numero de carnet su
nombre y la calificacion:
asi:
grupo: 11-B

234365 Ricardo Barrantes 90
235656 Carlos Corrales 60
233434 Mauricio Loria 87
236756 Monica Santos 67
231212 Francisco Pacheco 98
233434 Luis Solano 78


En otro archivo llamado NOTA.BDF esta la lista total de estudiantes del
colegio en fomra de base de datos en una columna el carne en otra el nombre
en otra el nivel la seccion y las calificaciones de 3 trimestres y otros
datos mas que estan en otras columnas asi:

carne nombre nivel
seccion nota1

234365 Ricardo Barrantes 11 B
237654 Johanna Pineda 10 A
233434 Mauricio Loria 11 B
233754 Cesar Salas 9
F
234512 Roger Solano 10 A
233934 Luis Cordoba 11 C
246587 Teresita Mata 11 B


Lo que necesito hacer es filtrar la lista de estudiantes del grupo 11-B(en
este archivo NOTA.bdf) para luego pegarle las calificaiones previemaente
copiadas de la hoja "concentrado"

Pareciera muy sencillo, pero el problema esta en que la lista no sera
siempre el 11 - B si no que puede ser cualquier grupo(por ejemplo el 10-A)
por eso debo usar filtro avanzado que toma el rango desde una hoja que esta
en libro Registro Digital y que se llama Registro (es en ese rango donde se
indica cual es el grupo y que determina la lista que esta en concetrado)
ademas no todos los grupos tienen el mismo numero de estudiantes por lo que
al copiar las calificaciones en "concentrado" debe copiar solo las celdas
que no estan en blanco es decir que tienen calificaicion, ademas una vez que
filtra la lista para poder pegarla en la lista filtrada del archivo NOTA.BDF
debo indicarle que se posicione en la primer celda visble filtrada pues
dependiendo del grupo que se trate esta celda puede ser cualquiera, todo con
solo apretar un boton (al que se le ha asignado la macro)

Muy complicado??


te pongo lo que he hecho hasta el momento:

PRIMERO ABRIR EL ARCHIVO, FILTRAR LA LISTA Y PEGARLA A LA PAR

chDir "C:\CONCENTRADOS\CONCETRADOS III\diskette"
Workbooks.Open Filename:="C:\CONCENTRADOS\CONCETRADOS
III\diskette\NOTA.DBF"
Range("A1:K508").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
Workbooks("registro
digital.xls").Sheets("REGISTRO").Range("Q165:V166"), CopyToRange:= _
Range("N1"), Unique:=False


AHORA COPIAR LAS CALIFICACIONES DE LA HOJA CONCENTRADO PARA PEGARLAS EN EL
ARCHIVO NOTA
(copio 42 celdas aunque el numero de estudiantes casi siempre es menor ,
para asegurarme de que se copien todas las calificaiocnes)

Windows("registro digital.xls").Activate
Range("F11:F52").Select
Selection.Copy
Windows("NOTA.DBF").Activate
Range("R2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Windows("registro digital.xls").Activate
Application.CutCopyMode = False
Range("E11").Select

SE HAN PEGADO EN LA LISTA QUE FUE FILTRADA Y COPIADA A LA PAR
PERO NECESITO PEGAR LAS CALIFICACIONES EN LA LISTA REAL QUE ES LA QUE
CONTIENE TODOS LOS ESTUDIANTES DEL COLEGIO Y COMIENZA EN LA COLUMNA A

ASI ES QUE VUELVO A FILTRAR Y DE UNA VEZ QUE SELECCIONE LA PRIMER CELDA
VISIBLE DE LA LISTA FILTRADA:


With Range("a1:K508")
.AdvancedFilter _
Action:=xlFilterInPlace, _

CriteriaRange:=Workbooks("colega.xls").Worksheets("registro").Range("q165:v1
66"), _
Unique:=True
With .SpecialCells(xlCellTypeVisible)
On Error GoTo Ninguno
IIf(.Areas(1).Rows.Count > 1, _
.Areas(1).Cells(2, 5), .Areas(2).Cells(1, 5)).Select
End With
End With
Exit Sub
Ninguno:
MsgBox "Criterios no cumplidos !!!"
End Sub

LA IDEA ES AHORA SI COPIAR LAS CALIFICACIONES( PERO SOLO LAS CELDAS QUE NO
ESTAN EN BLANCO) Y PEGARLAS EN LA CELDA ANTERIORMENTE SELECCIONADA

ESTABA USANDO ESTO:

Range("M2").Select
With Worksheets("NOTA")
If .[R2] <> "" Then
For Each celda In .Range("R2:R" & .[R65536].End(xlUp).Row)
If celda <> "" Then
celda.Copy
ActiveCell.PasteSpecial xlPasteAll
ActiveCell.Offset(1, 0).Activate
End If
Next
End If
End With
Range("M2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False

PERO EN VEZ DE LA CELDA M2 NECESITO QUE SEA LA CELDA QUE SELECCIONAMOS
ANTERIORMENTE (LA PRIMERA VISIBLE DE LA LISTA FILTRADA QUE EN EL CASO DEL
GRUPO 11-B ES LA CELDA E132)

He tratado de ser lo mas claro, y no se si fui lo suficiente, ojala puedas
ayudarme , por lo menos en lo ultimo que es indicarle que en vez de m2 use
la celda que fue seleccionada con la instruccion anterior.
Muchas gracias









"Héctor Miguel" wrote in message
news:%
hola, Luis !

> ... sigo teniendo un problema, la celda la selecciona pero no se puede


pegar en ella
> las celdas que previamente fueron copiadas en la macro
> no se cual es la isntruccion entonces, asi como lo puse me sale el msg


Box [...]

considera los siguientes [al menos] dos 'detalles'...
1) si haces PRIMERO un 'copy'... este se conserva en


memoria/portapapeles/... PERO...
si como 'acto siguiente' haces un filtro avanzado... el portapapeles


se vacia [por lo tanto]...
despues del filtro avanzado... ya no hay nada... 'que pegar' :-((
2) trabajar con celdas 'filtradas' para hacer un 'pegado' de otro rango de


celdas 'contiguas'...
NO es una 'garantia' que las celdas de 'destino' [tambien] hubieran


quedado 'consecutivas'
el pegado 'se va de corrido' y cabe la posibilidad de que quede en


celdas 'filtradas' NO-contiguas... a menos...
[obviamente] que tu estes seguro que 'destino' y 'origen' se


correspondan en celdas 'visibles' continuas] -???-

prueba haciendo el 'copy/paste'... DESPUES de haber hecho los filtros


avanzados +/- como sigue:

Sub Filtrado_1()
With Range("a1:k508")
.AdvancedFilter _
Action:=xlFilterInPlace, _



CriteriaRange:=Workbooks("colega.xls").Worksheets("registro").Range("q165:v1
66"), _
Unique:=True
With .SpecialCells(xlCellTypeVisible)
On Error GoTo Ninguno
IIf(.Areas(1).Rows.Count > 1, _
.Areas(1).Cells(2, 5), .Areas(2).Cells(1, 5)).Select
End With
End With
Range("o132:o135").Copy ActiveCell
Exit Sub
Ninguno:
MsgBox "Criterios no cumplidos !!!"
End Sub

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


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida