ayuda por favor

14/04/2005 - 15:56 por Dorian | Informe spam
hola gente !!

hay alguien que me pueda dar una mano con esto ?\ me lo están pidiendo en mi
trabajo y la verdad que no tengo ni idea de por donde comenzar, además de
muy pocos conocimientos de excel a este nivel :((

desde ya muchas gracias por el tiempo que le dediquen a mi mensaje

dorian+






hola grupo !!

tengo la siguiente rutina que utlizo para ocultar las filas que en
determinado rango tienen valor cero\ (la rutina se ejecuta al activar la
hoja del libro)

Dim Celda As Range, Temp As Variant
For Each Celda In Range("a14:a33")
Temp = Celda
If IsError(Temp) Then
Celda.EntireRow.Hidden = True
ElseIf Celda <> 0 Then
Celda.EntireRow.Hidden = False
Else: Celda.EntireRow.Hidden = True
End If
Next

mi problema, son dos:

tengo un libro con dos hojas, en la primera se encuentran las facturas
pendientes de rendicion con sus detalles (ordenadas por nº de factura), la
segunda hoja es un formulario que se utiliza para rendir a la casa central
las facturas que ya han sido cobradas\ en el rango a14:a33, de esta
planilla, ingreso el nº de comprobante y automaticamente "trae" los datos
de las facturas\

1º) lo que tendría que hacer es ocultar las filas del rango a14:a33 de la
planilla rendición que tienen el valor 0 (cero) en la columna a (en ese
mismo rango\ pero obviamente si siempre tendria que haber una fila sin
ocultar, pues si se ocultan todas no es posible ingresar el numero de
factura\ entonces, x ej. al principio NO deberia estar oculta la fila 14,
pero si el resto, al introducir un valor en la celda a14, debria mostrarse
la fila 15 (para eventualmente poder introducir un valor en la cela a15);
una vez que se ingresa un valor en la fila a15 al darle enter deberia
mostrarse la fila 16... y así sucesivamente hasta la 33 que es la última del
rango

2º) al imprimir esta hoja debería borrar las filas de la hoja facturas que
coinciden con los numeros de facturas ingresados...

espero haber sido claro para que alguien me pueda ayudar con esto\

desde ya muchas gracias por la ayuda que me puedan dar .

un abrazo a todos

dorian+

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
15/04/2005 - 05:13 | Informe spam
hola, dorian !

... una mano con esto ?
... no tengo ni idea de por donde comenzar, ademas de... pocos conocimientos... a este nivel :((
... rutina que utlizo para ocultar las filas que en determinado rango tienen valor cero
... se ejecuta al activar la hoja del libro
Dim Celda As Range, Temp As Variant => [sigue el resto del codigo] ...
1° ... dos hojas... primera... facturas pendientes de rendicion con sus detalles (ordenadas por nº de factura)
.. segunda... un formulario que se utiliza para rendir a la casa central las facturas que ya han sido cobradas
... a14:a33... ingreso el nº de comprobante y automaticamente "trae" los datos de las facturas
... tendria que... ocultar las filas del rango a14:a33... que tienen el valor 0 (cero)
... obviamente siempre tendria que haber una fila sin ocultar [...]
2° ... al imprimir esta hoja debería borrar las filas de la hoja facturas... con los numeros... ingresados...





[segun yo] el 'problema' completo lo tendremos que 'atacar' [al menos] en dos 'sesiones'
debido a algunos puntos que [de momento] no tengo lo suficiente 'claros' y expongo a continuacion ;)
si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
=1.- supongo que el codigo 'expuesto' no tiene mayor problema y poca relacion con los puntos 1 y 2 de tu consulta -?-
[puesto que parece ser un tema resuelto que 'vimos' por enero 2004, ya que... 'sigue siendo el mismo'] :D
2.- para ocultar las filas [en la hoja de 'rendicion'] y que siempre permanezca visible 'la siguiente'...
te propongo un ejemplo usando el evento '_change' de la hoja/formulario [suponiendo que son 'entradas del usuario']
y algunas 'variantes' porque tampoco me es claro si cuando dices '... ocultar las filas... que tienen el valor 0 (cero)...'
te refieres a que 'efectivamente' les queda un [y 'absoluto'] cero... o 'simplemente'... estan vacias -???-
3.- faltaria 'aclarar' si por 'borrar' las filas [en tu punto 2, y despues de imprimir] te refieres a...
a) [completamente] 'eliminar' las filas -?-
b) [solamente] 'borrar' el dato de las celdas de la columna 'A' -?-
-> esto porque [supongo] habra formulas en el resto de las celdas de cada fila que... 'despues habria que reponer' -?-
=para 'desarrollar' la propuesta del ocultamiento de las filas y mantener siempre visible 'la siguiente'...
en el modulo de codigo de la hoja de rendicion ==Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("a14:a33")) Is Nothing Then Exit Sub
Dim Celda As Range: Application.ScreenUpdating = False
For Each Celda In Range("a14:a33")
' en esta parte va el codigo 'dependiente' de la eventualidad de: cero en la celda o... celda vacia '
Next
End Sub
op1: si cada celda [simplemente] queda vacia y 'partiendo' de que la celda anterior al rango [la A13] NO esta vacia...
Celda.EntireRow.Hidden = IsEmpty(Celda.Offset(-1))
op2: si cada celda sigue vacia pero NO depende de que la celda A13 [fuera del rango] NO este vacia...
Celda.EntireRow.Hidden = _
(Application.CountIf(Range(Range("a14"), Celda), "") > 1)
op3: si cada celda 'efectivamente' queda con un [y absoluto] cero...
Celda.EntireRow.Hidden = _
(Application.CountIf(Range(Range("a14"), Celda), 0) > 1)
Respuesta Responder a este mensaje
#2 Dorian
18/04/2005 - 22:14 | Informe spam
hola, héctor !

antes que nada muchas gracias por tu respuesta\ voy a comentarte los
resultados de la rutina que me enviaste y aclarte un par de dudas, de mi no
muy clara explicación del problema :(

la rutina funciona perfectamente, la probé con el segundo cambio que me
propones:

op2: si cada celda sigue vacia pero NO depende de que la celda A13 [fuera
del rango] NO este vacia...

Celda.EntireRow.Hidden = (Application.CountIf(Range(Range("a14"),


Celda), "") > 1)

la celda a13 está vacia, toda la fila 13 lo está, para dejar un espacio
entre los titulos de las columnas y los datos y que sea un poco más fácil la
lectura\ pero con el código que me pasaste funciona bien (lo ejecuté una
vez, como para que inicialmente las casillas se encuentren ocultas la
primera vez que se usa la planilla)\ con cada dato que cambia en la columna
"a" se muestra una nueva fila :)

con referencia al 2º punto, una vez que se imprime esta hoja (rendición)
tendrian que pasar dos cosas:

a) en la planilla con el detalle de facturas se deberían ELIMINAR, esa es la
palabra, las filas completas que contienen los numeros de facturas rendidas
(buscar el dato de la columna "a" de la planilla rendición, en la columna
"a" de la planilla detalle de facturas y eliminar completamente esa fila)
b) borrar (solamente los datos) de la columna "a" en la planilla rendición
para dejarla "limpia" para la proxima rendición

en realidad el usuario puede ingresar (y de hecho ingresa datos) en el rango
a14:b33 (en la columna "a" los números de factura y en la "b" un número
interno que puede estar como no).. por eso para que el usuario no "navegue"
por toda la planilla, y para facilitarle y que sea más rapido el ingreso de
datos ya está seleccionado el rango a14:b33 por lo que, con cada pusasión de
"enter" solamente se mueve por las celdas del rango...

entonces habria que borrar (los datos) de estas celdas (a14:b33) y volver a
seleccionar ese rango para la proxima vez que se quiera usar la planilla

te maree ?? espero que no\ de todas formas cualquier forma me avisas y si no
es en "dos sesiones" que sea en tres ;)

un abrazo y, como siempre, muchas gracias por tu tiempo y ayuda

dorian+
Respuesta Responder a este mensaje
#3 Dorian
21/04/2005 - 15:50 | Informe spam
hola, héctor !

antes que nada muchas gracias por tu respuesta\ voy a comentarte los
resultados de la rutina que me enviaste y aclarte un par de dudas, de mi no
muy clara explicación del problema :(

la rutina funciona perfectamente, la probé con el segundo cambio que me
propones:

op2: si cada celda sigue vacia pero NO depende de que la celda A13 [fuera
del rango] NO este vacia...

Celda.EntireRow.Hidden = (Application.CountIf(Range(Range("a14"),


Celda), "") > 1)

la celda a13 está vacia, toda la fila 13 lo está, para dejar un espacio
entre los titulos de las columnas y los datos y que sea un poco más fácil la
lectura\ pero con el código que me pasaste funciona bien (lo ejecuté una
vez, como para que inicialmente las casillas se encuentren ocultas la
primera vez que se usa la planilla)\ con cada dato que cambia en la columna
"a" se muestra una nueva fila :)

con referencia al 2º punto, una vez que se imprime esta hoja (rendición)
tendrian que pasar dos cosas:

a) en la planilla con el detalle de facturas se deberían ELIMINAR, esa es la
palabra, las filas completas que contienen los numeros de facturas rendidas
(buscar el dato de la columna "a" de la planilla rendición, en la columna
"a" de la planilla detalle de facturas y eliminar completamente esa fila)
b) borrar (solamente los datos) de la columna "a" en la planilla rendición
para dejarla "limpia" para la proxima rendición

en realidad el usuario puede ingresar (y de hecho ingresa datos) en el rango
a14:b33 (en la columna "a" los números de factura y en la "b" un número
interno que puede estar como no).. por eso para que el usuario no "navegue"
por toda la planilla, y para facilitarle y que sea más rapido el ingreso de
datos ya está seleccionado el rango a14:b33 por lo que, con cada pusasión de
"enter" solamente se mueve por las celdas del rango...

entonces habria que borrar (los datos) de estas celdas (a14:b33) y volver a
seleccionar ese rango para la proxima vez que se quiera usar la planilla

te maree ?? espero que no\ de todas formas cualquier forma me avisas y si no
es en "dos sesiones" que sea en tres ;)

un abrazo y, como siempre, muchas gracias por tu tiempo y ayuda

dorian+

"Héctor Miguel" escribió en el mensaje
news:
hola, dorian !

> ... una mano con esto ?
> ... no tengo ni idea de por donde comenzar, ademas de... pocos


conocimientos... a este nivel :((
>> ... rutina que utlizo para ocultar las filas que en determinado rango


tienen valor cero
>> ... se ejecuta al activar la hoja del libro
>> Dim Celda As Range, Temp As Variant => [sigue el resto del codigo]


...
>> 1° ... dos hojas... primera... facturas pendientes de rendicion con sus


detalles (ordenadas por nº de factura)
>> .. segunda... un formulario que se utiliza para rendir a la casa


central las facturas que ya han sido cobradas
>> ... a14:a33... ingreso el nº de comprobante y automaticamente "trae"


los datos de las facturas
>> ... tendria que... ocultar las filas del rango a14:a33... que tienen el


valor 0 (cero)
>> ... obviamente siempre tendria que haber una fila sin ocultar [...]
>> 2° ... al imprimir esta hoja debería borrar las filas de la hoja


facturas... con los numeros... ingresados...

[segun yo] el 'problema' completo lo tendremos que 'atacar' [al menos] en


dos 'sesiones'
debido a algunos puntos que [de momento] no tengo lo suficiente 'claros' y


expongo a continuacion ;)
si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
=> 1.- supongo que el codigo 'expuesto' no tiene mayor problema y poca


relacion con los puntos 1 y 2 de tu consulta -?-
[puesto que parece ser un tema resuelto que 'vimos' por enero 2004,


ya que... 'sigue siendo el mismo'] :D
2.- para ocultar las filas [en la hoja de 'rendicion'] y que siempre


permanezca visible 'la siguiente'...
te propongo un ejemplo usando el evento '_change' de la


hoja/formulario [suponiendo que son 'entradas del usuario']
y algunas 'variantes' porque tampoco me es claro si cuando dices '...


ocultar las filas... que tienen el valor 0 (cero)...'
te refieres a que 'efectivamente' les queda un [y 'absoluto'] cero...


o 'simplemente'... estan vacias -???-
3.- faltaria 'aclarar' si por 'borrar' las filas [en tu punto 2, y despues


de imprimir] te refieres a...
a) [completamente] 'eliminar' las filas -?-
b) [solamente] 'borrar' el dato de las celdas de la columna 'A' -?-
-> esto porque [supongo] habra formulas en el resto de las celdas de


cada fila que... 'despues habria que reponer' -?-
=> para 'desarrollar' la propuesta del ocultamiento de las filas y mantener


siempre visible 'la siguiente'...
en el modulo de codigo de la hoja de rendicion ==> Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("a14:a33")) Is Nothing Then Exit Sub
Dim Celda As Range: Application.ScreenUpdating = False
For Each Celda In Range("a14:a33")
' en esta parte va el codigo 'dependiente' de la eventualidad de: cero


en la celda o... celda vacia '
Next
End Sub
> op1: si cada celda [simplemente] queda vacia y 'partiendo' de que la celda


anterior al rango [la A13] NO esta vacia...
Celda.EntireRow.Hidden = IsEmpty(Celda.Offset(-1))
op2: si cada celda sigue vacia pero NO depende de que la celda A13 [fuera


del rango] NO este vacia...
Celda.EntireRow.Hidden = _
(Application.CountIf(Range(Range("a14"), Celda), "") > 1)
op3: si cada celda 'efectivamente' queda con un [y absoluto] cero...
Celda.EntireRow.Hidden = _
(Application.CountIf(Range(Range("a14"), Celda), 0) > 1)


Respuesta Responder a este mensaje
#4 Héctor Miguel
22/04/2005 - 06:17 | Informe spam
hola, Dorian !

... aclarte un par de dudas, de mi no muy clara explicacion del problema :(
... una vez que se imprime esta hoja (rendicion) tendrian que pasar dos cosas:
a) en la planilla con el detalle de facturas... ELIMINAR... las filas completas... de facturas rendidas [...]
b) borrar (solamente los datos) de... "a" en la planilla rendicion para dejarla "limpia" para la proxima [...]



-> 'asumo' que tu planilla 'rendicion' se llama 'hoja1' y que la planilla de las facturas se llama 'hoja2'
[te toca modificar donde y como corresponda] :))
-> toma en cuenta que el evento '_beforeprint' podria 'dispararse' dos veces... [si 'pasa' por un 'preview']
con lo cual... si despues de 'revisar' en la vista preliminar de impresion...
->se cancela<- la impresion 'final'... el 'borrado' se efectuaria ->de todas formas<- <= OJO
-> [probablemente] sera mejor proveer un boton para la impresion que al finalizar 'ejecute' el borrado ;)

si cualquier duda... comentas?
saludos,
hector.
en el modulo de codigo de 'la hoja' de rendicion ==Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("a14:a33")) Is Nothing Then Exit Sub
Dim Celda As Range: Application.ScreenUpdating = False
For Each Celda In Range("a14:a33")
Celda.EntireRow.Hidden = _
(Application.CountIf(Range(Range("a14"), Celda), "") > 1)
Next
End Sub
en el modulo de codigo 'del libro' [ThisWorkbook] ==Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Hoja As Worksheet, Celda As Range, Remitidas As Range
For Each Hoja In ActiveWindow.SelectedSheets
If Hoja.Name = "Hoja1" Then GoTo Prepara
Next: Exit Sub
Prepara:
Application.OnTime Now + TimeValue("0:00:01"), "PreparaRemitidas"
End Sub
en un modulo de codigo 'normal' ==Option Private Module
Sub PreparaRemitidas()
Dim Celda As Range, Remitidas As Range
On Error Resume Next
With Worksheets("Hoja2").Columns("a:a")
For Each Celda In Worksheets("Hoja1").Range("a14:a33")
If Not IsEmpty(Celda) Then
If Remitidas Is Nothing Then _
Set Remitidas = .Cells.Find(Celda)
Set Remitidas = Union(Remitidas, .Cells.Find(Celda))
End If
Next
Remitidas.EntireRow.Delete
End With
Worksheets("Hoja1").Range("a14:a33").ClearContents
Set Remitidas = Nothing
End Sub
Respuesta Responder a este mensaje
#5 Dorian
22/04/2005 - 23:40 | Informe spam
hola héctor !!!

muchas gracias por tu respuesta y ayuda !

como no podía ser de otra forma funciona perfectamente :)

tal vez sería una buena idea, como dices, agragar un botón para ejecutar el
procedimiento ... que parte del código que me pasaste es el que debo
utilizar ? lo guardo como una macro ?

por otra parte mi consulta anterior preguntaba como volver a dejar
seleccionado el rango a14:b33 para que el usuario solo se "mueva por estas
celdas

en este punto queria plantear un problema que se me presento y solo me di
cuenta cuando trate de ejecutar el código que me pasaste; por eso no lo
aclaré inicialmente: la hoja "rendición" (hoja1) está protegida, para evitar
que el usuario pueda ver las fórmulas y/o modificarlas o cambiar el diseño
de la planilla\ claro que cuando ingreso un valor y en a14 (p.e.) y tiene
que mostrarse la fila siguiente me da error (lógico, no? si la hoja está
protegida)...\ hay alguna forma de solucionar esto ? o tengo que dejarla sin
protección ?

y como tercero y último (y prometo... bueno, trataré) como puedo dejar el
cursor en la primer casilla libre de la columna a de la planillas facturas ?
pues al eliminar las filas el cursor queda tantas casillas abajo de la
última fila con datos como filas haya eliminado

héctor, te agradezco mucho por tu ayuda y sobre todo tiempo...

saludos\ dorian+






"Héctor Miguel" escribió en el mensaje
news:%
hola, Dorian !

> ... aclarte un par de dudas, de mi no muy clara explicacion del problema


:(
> ... una vez que se imprime esta hoja (rendicion) tendrian que pasar dos


cosas:
> a) en la planilla con el detalle de facturas... ELIMINAR... las filas


completas... de facturas rendidas [...]
> b) borrar (solamente los datos) de... "a" en la planilla rendicion para


dejarla "limpia" para la proxima [...]

-> 'asumo' que tu planilla 'rendicion' se llama 'hoja1' y que la planilla


de las facturas se llama 'hoja2'
[te toca modificar donde y como corresponda] :))
-> toma en cuenta que el evento '_beforeprint' podria 'dispararse' dos


veces... [si 'pasa' por un 'preview']
con lo cual... si despues de 'revisar' en la vista preliminar de


impresion...
->se cancela<- la impresion 'final'... el 'borrado' se efectuaria ->de


todas formas<- <= OJO
-> [probablemente] sera mejor proveer un boton para la impresion que al


finalizar 'ejecute' el borrado ;)

si cualquier duda... comentas?
saludos,
hector.
en el modulo de codigo de 'la hoja' de rendicion ==> Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("a14:a33")) Is Nothing Then Exit Sub
Dim Celda As Range: Application.ScreenUpdating = False
For Each Celda In Range("a14:a33")
Celda.EntireRow.Hidden = _
(Application.CountIf(Range(Range("a14"), Celda), "") > 1)
Next
End Sub
en el modulo de codigo 'del libro' [ThisWorkbook] ==> Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Hoja As Worksheet, Celda As Range, Remitidas As Range
For Each Hoja In ActiveWindow.SelectedSheets
If Hoja.Name = "Hoja1" Then GoTo Prepara
Next: Exit Sub
Prepara:
Application.OnTime Now + TimeValue("0:00:01"), "PreparaRemitidas"
End Sub
en un modulo de codigo 'normal' ==> Option Private Module
Sub PreparaRemitidas()
Dim Celda As Range, Remitidas As Range
On Error Resume Next
With Worksheets("Hoja2").Columns("a:a")
For Each Celda In Worksheets("Hoja1").Range("a14:a33")
If Not IsEmpty(Celda) Then
If Remitidas Is Nothing Then _
Set Remitidas = .Cells.Find(Celda)
Set Remitidas = Union(Remitidas, .Cells.Find(Celda))
End If
Next
Remitidas.EntireRow.Delete
End With
Worksheets("Hoja1").Range("a14:a33").ClearContents
Set Remitidas = Nothing
End Sub


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