Ayuda

04/08/2004 - 01:44 por Marcelo | Informe spam
Hola a todos.

Creo que el mensje no llegó por eso lo vuelvo a enviar.

Me surge la siguiente interrogante que necesito resolver.
¿Cómo puedo hacer con la macro que copio debajo para que cuando comienza a
seleccionar los datos y a copiarlos omita copiarlos en cierto rango de
filas?
La macro va copiando y pegando datos, pero necesito que cuando vaya a
pegarlos en la fila 68 de la hoja "cancelación" salte a la fila 77 de modo
que las filas 68 a 76 de la hoja "cancelación" queden vacías.
Por si sirve de algo, el rango donde necesito que se copien los datos en la
hoja "Cancelación" es de la fila 21 a la 67 y luego de la 77 en adelante.
No sé si esto es posible, por eso necesito su ayuda.

Saludos a todos,

Marcelo


Sub cancelar_AT()

Sheets("Cancelación").Select
Rows("21:501").Select
Selection.ClearContents

Dim Fila As Integer
For Fila = 2 To 20000
If Application.Sum(Worksheets("Descargas").Range("B" & Fila)) = 0 Then
Exit For
If Not Application.Sum(Worksheets("Descargas").Range("B" & Fila)) <>
(Worksheets("Cancelación").Range("AD12")) Then
Sheets("Descargas").Select
Range("C" & Fila).Select
Selection.Copy
Sheets("Cancelación").Select
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
04/08/2004 - 05:03 | Informe spam
hola, Marcelo !

Creo que el mensje no llego ... lo vuelvo a enviar.


si 'llego' :D [lo que sucede es que -en ocasiones- algunos servidores... 'se tardan'] ;)

... macro que ... omita ... cierto rango de filas?
... que cuando vaya a pegarlos en la fila 68 ... salte a la fila 77 [...]



una manera pudiera ser metiendo un 'salto estrategico' dentro del for...next [p.e.]
-> el contador_fila [descargas] inicia en 2 y copia [a cancelacion] iniciando en la fila 21
-> cuando ha copiado a la fila 67 [de cancelacion], el contador_fila 'va' en la cuenta de 48
-> en la siguiente fila_contador [49] 'obliga' a la macro a que 'haga [en cancelacion] un offset' de 10 [NO de 1]
[de paso...] podrias 'simplificar' [y 'agilizar'] el codigo con [algunos de] los siguientes cambios ['sugeridos'] :)

-> puedes evitar el estar 'switcheando' entre hojas y rangos
puedes usar el metodo 'copy' con la sintaxis: =>Rango.Copy Rango_destino<-> [me parece que] NO es necesaria la funcion suma [solo haces referencia a una celda a la vez]

si cualquier duda... ¿comentas?
saludos,
hector.
[la parte de] la macro [que 'expones'] con las sugerencias incluidas ==Sub cancelar_AT()
Dim Fila As Integer, Salto As Integer
Worksheets("Cancelación").Rows("21:501").ClearContents
With Worksheets("Descargas")
For Fila = 2 To 2000
If .Range("b" & Fila) = 0 Then Exit For
If Not .Range("b" & Fila) <> Worksheets("Cancelación").Range("ad12") Then
If Fila = 49 Then Salto = 10 Else Salto = 1
.Range("c" & Fila).Copy Worksheets("Cancelación").Range("a65536").End(xlUp).Offset(Salto)
Respuesta Responder a este mensaje
#2 Marcelo
05/08/2004 - 02:22 | Informe spam
Muchas Gracias Héctor Miguel.

Me encuentro con los siguientes problemas con la solución que me has
dado. Tal vez yo no me haya expresado correctamente.
1) La solución está bien encaminada. La macro hace el salto de 10 filas en
la hoja "cancelación", pero lo hace cuando existe el valor en la fila 49 de
la hoja "descargas". Lo que yo buscaba exactamente es que el salto lo
realice cuando vaya a pegar los datos en la fila 68 de la hoja cancelación.
Es decir, los datos de la hoja "descargas" se tienen que copiar todos
(siempre y cuando coincidan con la condición), pero en la hoja de destino
("cancelación"), solo se tienen que pegar entre las filas 21 y 67 y luego de
la 77 en adelante de modo que las filas 68 a 76 de la hoja "cancelación"
siempre estén vacías.
Esto se debe a que la hoja tiene un formato de documento determinado y en
esas filas que necesito que estén vacías van firmas y otras cosas.

Eso por un lado. Y el tema del formato determinado que tiene el documento
del que te he hablado me lleva a otro problema:
2) La macro corre mucho más rápido sin tener que ir y venir de hoja en hoja,
pero el problema es que en la hoja de destino (cancelación), las celdas
donde se pegarán los datos están combinadas. Es decir de la fila 21 en
adelante de esta hoja, las columas A a Y están combinadas. Por lo tanto, al
intentar pegar los datos me dice que no se pueden pegar los datos. Por otra
parte, lo que necesitaría pegar son solo los valores pues las celdas de
origen tienen fórmulas y al pegarlas veo que se pierden las referencias y lo
que se ve como resultado es un error.

Espero no haber complicado el tema y que puedas brindarme una solución para
estos problemas.

Muchas Gracias Nuevamente

Saludos,

Marcelo



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

> Creo que el mensje no llego ... lo vuelvo a enviar.
si 'llego' :D [lo que sucede es que -en ocasiones- algunos


servidores... 'se tardan'] ;)

> ... macro que ... omita ... cierto rango de filas?
> ... que cuando vaya a pegarlos en la fila 68 ... salte a la fila 77


[...]

una manera pudiera ser metiendo un 'salto estrategico' dentro del


for...next [p.e.]
-> el contador_fila [descargas] inicia en 2 y copia [a cancelacion]


iniciando en la fila 21
-> cuando ha copiado a la fila 67 [de cancelacion], el contador_fila 'va'


en la cuenta de 48
-> en la siguiente fila_contador [49] 'obliga' a la macro a que 'haga [en


cancelacion] un offset' de 10 [NO de 1]
[de paso...] podrias 'simplificar' [y 'agilizar'] el codigo con [algunos


de] los siguientes cambios ['sugeridos'] :)

-> puedes evitar el estar 'switcheando' entre hojas y rangos
puedes usar el metodo 'copy' con la sintaxis: =>Rango.Copy


Rango_destino<> -> [me parece que] NO es necesaria la funcion suma [solo haces referencia
a una celda a la vez]

si cualquier duda... ¿comentas?
saludos,
hector.
[la parte de] la macro [que 'expones'] con las sugerencias incluidas


==> Sub cancelar_AT()
Dim Fila As Integer, Salto As Integer
Worksheets("Cancelación").Rows("21:501").ClearContents
With Worksheets("Descargas")
For Fila = 2 To 2000
If .Range("b" & Fila) = 0 Then Exit For
If Not .Range("b" & Fila) <> Worksheets("Cancelación").Range("ad12")


Then
If Fila = 49 Then Salto = 10 Else Salto = 1
.Range("c" & Fila).Copy


Worksheets("Cancelación").Range("a65536").End(xlUp).Offset(Salto)

Respuesta Responder a este mensaje
#3 Héctor Miguel
05/08/2004 - 05:33 | Informe spam
hola, Marcelo !

... solucion ... encaminada ... hace el salto de 10 filas en la hoja "cancelacion"
... pero lo hace cuando existe el valor en la fila 49 de la hoja "descargas" [...]



-> tienes razon... 'me comi' la segunda 'condicionante' de que descargas!b[n] sea = cancelacion!ad12 :((
se 'soluciona' con un segundo conteo 'estrategico' de las celdas [contador_fila] que han sido 'omitidas' ;)

... en la hoja de destino (cancelacion), las celdas donde se pegaran los datos estan combinadas.
... ... pegar son solo los valores pues las celdas de origen tienen formulas [...]



no se 'que mas hace' la macro, debido a que 'expusiste' solo una fraccion ;)
[modifica/agrega lo que me haya 'comido' -ahora- en mis supuestos] :D
prueba con las siguientes modificaciones y... ¿comentas?
saludos,
hector.
______________
Sub cancelar_AT()
Dim Origen As Worksheet, Destino As Range, Filtro As Range
Dim Fila As Integer, Salto As Integer, Omitidas As Integer
Set Origen = Worksheets("Descargas")
Set Destino = Worksheets("Cancelación").Range("a65536")
Set Filtro = Worksheets("Cancelación").Range("ad12")
Application.ScreenUpdating = False
Destino.Parent.Rows("21:501").ClearContents
With Origen
For Fila = 2 To 2000
If .Range("b" & Fila) = 0 Then Exit For
If Not .Range("b" & Fila) <> Filtro Then
If Fila = 49 + Omitidas Then Salto = 10 Else Salto = 1
.Range("c" & Fila).Copy
Destino.End(xlUp).Offset(Salto).PasteSpecial Paste:=xlPasteValues
Else
Omitidas = Omitidas + 1
End If
Next
Application.CutCopyMode = False
End With
Set Filtro = Nothing
Set Destino = Nothing
Set Origen = Nothing
End Sub
Respuesta Responder a este mensaje
#4 Marcelo
05/08/2004 - 16:44 | Informe spam
Muchas Gracias Héctor Miguel.

Ahora sí hace el salto correctamente.
Lo que no se resuelve es el problema de las celdas
combinadas ya que dice que la operación requiere que las
celdas tengan el mismo tamaño. No sé si se puede resolver.
Tal vez en lugar de copiarlas y pegarlas se me ocurre que
se pueda hacer algo como colocar en la celdad de destino
(hoja cancelación) una fórmula como = a la celda de
origen. Tampoco sé si esto es posible.
Por otra parte, la macro no tien mucha cosa más. Luego
realizaba la misma operación con otras columnas de la hoja
Descargas y también las pegaba en la hoja Cancelación.
Esto lo tenía resuelto, pero con el cambio que hiciste ya
no sé como hacerlo. La idea es que también haga lo mismo
con la columna D y E de la hoja descargas y devuelva los
datos a las columnas z y AW de la hoja Cancelación.


Agradezco nuevamente tu ayuda y espero que puedas
continuar ayudandome con esto.

Saludos

Marcelo.


hola, Marcelo !

... solucion ... encaminada ... hace el salto de 10




filas en la hoja "cancelacion"
... pero lo hace cuando existe el valor en la fila 49




de la hoja "descargas" [...]

-> tienes razon... 'me comi' la segunda 'condicionante'


de que descargas!b[n] sea = cancelacion!ad12 :((
se 'soluciona' con un segundo conteo 'estrategico' de


las celdas [contador_fila] que han sido 'omitidas' ;)

... en la hoja de destino (cancelacion), las celdas




donde se pegaran los datos estan combinadas.
... ... pegar son solo los valores pues las celdas de




origen tienen formulas [...]

no se 'que mas hace' la macro, debido a que 'expusiste'


solo una fraccion ;)
[modifica/agrega lo que me haya 'comido' -ahora- en mis


supuestos] :D
prueba con las siguientes modificaciones y... ¿comentas?
saludos,
hector.
______________
Sub cancelar_AT()
Dim Origen As Worksheet, Destino As Range, Filtro As


Range
Dim Fila As Integer, Salto As Integer, Omitidas As


Integer
Set Origen = Worksheets("Descargas")
Set Destino = Worksheets("Cancelación").Range("a65536")
Set Filtro = Worksheets("Cancelación").Range("ad12")
Application.ScreenUpdating = False
Destino.Parent.Rows("21:501").ClearContents
With Origen
For Fila = 2 To 2000
If .Range("b" & Fila) = 0 Then Exit For
If Not .Range("b" & Fila) <> Filtro Then
If Fila = 49 + Omitidas Then Salto = 10 Else


Salto = 1
.Range("c" & Fila).Copy
Destino.End(xlUp).Offset(Salto).PasteSpecial


Paste:=xlPasteValues
Else
Omitidas = Omitidas + 1
End If
Next
Application.CutCopyMode = False
End With
Set Filtro = Nothing
Set Destino = Nothing
Set Origen = Nothing
End Sub

.

Respuesta Responder a este mensaje
#5 Marcelo
05/08/2004 - 17:51 | Informe spam
Hector Miguel:
He resuelto el problema de las celdas combinadas
eliminando la parte en que copiaba y pegaba y coloqué lo
siguiente:

For Fila = 2 To 2000
If .Range("b" & Fila) = 0 Then Exit For
If Not .Range("b" & Fila) <> Filtro Then
If Fila = 49 + Omitidas Then Salto = 10 Else Salto = 1
Destino.End(xlUp).Offset(Salto) = .Range("c" & Fila)

Así funciona bien.

Ahora queda el problema de que haga los mismo con las
otras columnas.
O Sea, que también copie los datos de la columa D,E,F, y G
y realice la misma operación devolviendo los datos a las
columnas Z,AW,BU, y CR respectivamente.

¿Cómo se puedo hacer?

Saludos.

Marcelo


hola, Marcelo !

... solucion ... encaminada ... hace el salto de 10




filas en la hoja "cancelacion"
... pero lo hace cuando existe el valor en la fila 49




de la hoja "descargas" [...]

-> tienes razon... 'me comi' la segunda 'condicionante'


de que descargas!b[n] sea = cancelacion!ad12 :((
se 'soluciona' con un segundo conteo 'estrategico' de


las celdas [contador_fila] que han sido 'omitidas' ;)

... en la hoja de destino (cancelacion), las celdas




donde se pegaran los datos estan combinadas.
... ... pegar son solo los valores pues las celdas de




origen tienen formulas [...]

no se 'que mas hace' la macro, debido a que 'expusiste'


solo una fraccion ;)
[modifica/agrega lo que me haya 'comido' -ahora- en mis


supuestos] :D
prueba con las siguientes modificaciones y... ¿comentas?
saludos,
hector.
______________
Sub cancelar_AT()
Dim Origen As Worksheet, Destino As Range, Filtro As


Range
Dim Fila As Integer, Salto As Integer, Omitidas As


Integer
Set Origen = Worksheets("Descargas")
Set Destino = Worksheets("Cancelación").Range("a65536")
Set Filtro = Worksheets("Cancelación").Range("ad12")
Application.ScreenUpdating = False
Destino.Parent.Rows("21:501").ClearContents
With Origen
For Fila = 2 To 2000
If .Range("b" & Fila) = 0 Then Exit For
If Not .Range("b" & Fila) <> Filtro Then
If Fila = 49 + Omitidas Then Salto = 10 Else


Salto = 1
.Range("c" & Fila).Copy
Destino.End(xlUp).Offset(Salto).PasteSpecial


Paste:=xlPasteValues
Else
Omitidas = Omitidas + 1
End If
Next
Application.CutCopyMode = False
End With
Set Filtro = Nothing
Set Destino = Nothing
Set Origen = Nothing
End Sub

.

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