Respuesta a consultas.
Fecha de creación: 09.Abril.2012

Fundadores: Wibly,Tyno,Servando,Sakkar,Rosendo2,RMaximo,Railar,Mcoronel,Ioyama,Igtelo,Hugotron,Drochar,Dedos,Alberto,Adolfo


No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

Aretradeser


En una hoja excel tengo cientos de registros; los cuales, dependiendo de un formato condicional previamente establecido, adquieren el formato de fuente verde, amarillo o rojo. Lo que pretendo, mediante algún código, es que los registros que estén en rojo se copien automáticamente a otra hoja del mismo libro; y que cuando dejen de ser rojos, desaparezcan de esta hoja; es decir, de la hoja donde se han copiado.
Saludos.

tyno


Hola Aretradeser.
Quizas me equivoque, pero me parece que no hay forma de utilizar el formato condicional como una referencia para que en base a este luego se realize una determinada operacion en Excel.
De mi parte he buscado por muchos lados para ver si alguien manejaba los formatos condicionales como referencias en macros y no encontre nada al respecto. No digo que quizas esto se pueda hacer a un nivel mas avanzado en programacion pero en Excel con macros de VBA creo que no se puede hacer nada.
Ahora si hablamos del formato comun como Negrita, Color de Fuente, Tamaño, etc, entonces la cosa cambia y se puede hacer algo.
Por las dudas, no se te ocurre que quizas existan otros criterios en tu archivo que se puedan considerar para que se copien los datos y poder pasarlos a otra Hoja. No se, puede ser algun valor nuemerico o texto dentro de la celda que se tome en cuenta para copiar el registro, quizas fechas, etc, es decir buscar patrones que sirvan de criterio y asi realizar lo que necesitas. Si se te ocurre algo seria interesante que pases un archivo con algunas cantidades de esos datos que queres copiar, y asi poder trabajar sobre los mismos. Saludos.

Aretradeser


Gracias, por tu amable respuesta. Ahi te subo el archivo de prueba.
Archivos
Informes_Foro.xls.zip
No tienes los permisos para descargar los archivos.
(36 KB)

tyno


Hola de nuevo.

Te paso el archivo con una macro que se ejecuta al seleccionar la hoja DATOS, cuando selecciones dicha hoja veras que te aparece un cuadro de mensaje que te pide si deseas actualizar los datos o no. Si bien pediste que los datos se actualicen de forma automática, te comento que probé de actualizar 65534 registros, es decir la hoja casi completamente llena, donde había unos 25000 registros en rojo (los cuales son para copiar) y en mi PC con un procesador de cuatro núcleos de 3.4Ghz cada uno el proceso me demoro unos 10 minutos en completarse. Como mencionaste que tenes cientos de registros, llegado el caso que muchos de ellos estén en rojo puede resultar inoportuno que la macro se ejecute automáticamente ya que puede demorar un tiempo considerable, por este motivo a mi parecer lo mejor es actualizar manualmente, o sea cuando sabes que dispones de algo de tiempo se ejecuta la actualización.

Este proceso de actualización también se puede hacer a través de un botón y así evitar que aparezca el mensaje para actualizar cada vez que se selecciona la hoja DATOS. Estas serian algunas alternativas que te comento como para que veas cual te puede ser mas practica.

Los registros en rojo terminan por copiarse en la hoja COPIA, el criterio que utiliza la macro para copiar los registros es el mismo que se utiliza en el formato condicional que esta aplicado. Cada vez que se actualizan los datos, todos los registros de la hoja COPIA se eliminan y se vuelven a escribir los que están en rojo, por lo tanto en la hoja COPIA solo habra los registros que estan en rojo de la hoja DATOS. Proba el archivo y cualquier cosa que quieras modificar o revisar me avisas.Saludos
Archivos
Informes_Foro.zip
No tienes los permisos para descargar los archivos.
(64 KB)

Aretradeser


He probado el archivo y he visto un pequeño problema: copia todos los registros de la Hoja "DATOS", excepto el último. En tu ejemplo hasta el "NÚM. REGISTRO" 199; el 200, ya no lo copia, no entiendo el motivo. He realizado varias pruebas y siempre lo mismo, deja el último registro sin copiar. No soy capaz de darle solución.
Saludos y muchas gracias por tu excelente trabajo.

tyno


Hola Aretradeser.

Si te animas a modificar el codigo para solucionar ese problema, tendrias que modificar lo que te señalo mas abajo.
Abris el editor de macros con Alt+F11 en la hoja DATOS y buscas el siguiente codigo:

Private Sub Worksheet_Activate()
'Y($L$1-$H2>20;$I2="")
m = MsgBox("Actualizar Datos", vbOKCancel, "ACTUALIZAR")
If m = vbCancel Then Exit Sub

'Application.ScreenUpdating = False
'<<esta linea se puede borrar
With Sheets("COPIA")
.Range("a2:n65536") = ""
For a = 2 To Range("a65536").End(xlUp) + 1 '<<<<<<<hay que sumarle 1 a esta instruccion
If (Cells(1, 12) - Cells(a, Cool) > 20 And Cells(a, 9) = "" Then
fila = .Range("a1:a65536").Find("").Row
For b = 1 To 14
.Cells(fila, b) = Cells(a, b)
Next b
End If
Next a
End With
'Application.ScreenUpdating = False
'<<esta linea se puede borrar
End Sub


Creo que te vas a dar cuenta facil de la modificacion. Yo te puse que hay que sumarle 1 pero puede ser algun numero un poco mas grandes, solo por las dudas, la idea es que la macro no trabaje inutilmente recorriendo filas en blanco. Cualquier cosa me avisas. Saludos.

Aretradeser


Disculpa, al adaptar tu macro al ejemplo original me da error en la siguiente línea de código:
If (Cells(1, 12) - Cells(a, Cool > 20 And Cells(a, 9) = "" Then
Saludos

tyno


Hola, como estas?.
En una observación media rápida me parece que falta cerrar un paréntesis:
La linea original seria:

If (Cells(1, 12) - Cells(a, 8 )) > 20 And Cells(a, 9) = "" Then


y la linea que me estas mostrando esta así:

If (Cells(1, 12) - Cells(a, 8 ) > 20 And Cells(a, 9) = "" Then

No se si es por el problema del 8 y el paréntesis juntos que forman un smiley ( Cool ) y quizas lo reemplazaste mal en tu código o algo por el estilo. Si el problema persiste pasame el archivo con ese código tal cual lo tenes con el problema y lo veo. Saludos.

Aretradeser


Perdona el retraso; pero, hasta hoy, no he podido trabajar sobre el archivo. Sí, lo tengo con dos paréntesis, como puedes apreciar en el archivo que te adjunto. Sorprendentemente me sigue dando el mismo error. El código es el mismo que me proporcionaste, ignoro qué es lo que pueda pasar.

Muchísimas gracias por tu interés y tiempo.

Saludos.

PD. Para abrir el Libro Excel, no el comprimido

USUARIO1

CLAVE1
Archivos
Informes.xls.zip
No tienes los permisos para descargar los archivos.
(114 KB)

tyno


Hola Aretradeser.

El problema se debe a que algunas celdas con fechas que se restan y cuyo resultado se debe comparar con la celda N1, la macro no las reconoce como fecha, mas allá de que nosotros veamos fechas en la celdas a veces las macros no las reconocen como tales. Entonces lo que hay que hacer es forzar a la macro a que reconozca si o si las celdas con fecha como fechas realmente. Para ello hay que definir o convertir el "tipo" de las celdas a fecha con las siguientes funciones:

If (CDate(Cells(1, 14)) - CDate(Cells(a, 8 ))) > 20 And Cells(a, 9) = "" Then

"Cdate" seria la función que convierte el tipo de valor de una celda, en este caso a fecha.

Proba de modificar de esta manera el código o copia y reemplazalo en tu macro y creo que con eso debería funcionar. Saludos.

Aretradeser


Perfecto, tyno.

Por último, consultarte dos cuestiones, a saber:

Uno, la macro tarda muchísimo; quizás sea porque tiene que recorrer la totalidad de la Hoja. Me pregunto si se puede acelerar, claro siempre que sea posible, limitando que solo busque hasta que encuentrea la primera celda vacía; quizás ya lo haga, no se.

Dos, como convertir ese supuesto código para que pueda ser ejecutado desde cualquier hoja del libro.

De nuevo, muchísimas gracias por tus aportes y tiempo totalmente desinteresados; a la vez que claros y eficaces.

Saludos.

tyno


Hola Aretradeser.
Te paso el archivo con otra alternativa para copiar los datos.
Para este caso es necesario tener una columna auxiliar en la Hoja DATOS con una formula que indentifique los datos que se van a mover a la Hoja COPIA, esta columna sirve para filtrar los datos, copiarlos y pegarlos en la Hoja COPIA. Dicha formula la coloque en la columna N de la Hoja DATOS donde esta la fecha de referencia en N1, esta columna se puede ocultar si no es necesario que se visualice.

Tendras que extender la formula segun la cantidad de registros que puedas llegar a tener en la Hoja DATOS.

En el editor de macros inserte un modulo llamado
"Macro_Actualizar_Datos", donde estaria el codigo que copia los datos,
de esta manera podras ejecutar este codigo desde cualquier hoja del
archivo y por cualquier metodo ya sea por un control o un evento. Como
ejemplo inserte un boton llamado "Actaulizar Registros Hoja Datos" en la
Hoja INICIO que trabaja con la misma macro que actualiza los datos
cuando se selecciona la Hoja Datos.

Seria cuestion de que pruebes
si te sirve esta alternativa, que por cierto es notablemente mas rapida
que lo anterior, y cualquier cosa que necesites me avisas. Saludos.


Edito:
Vas a tener que esperar un poco porque por algun motivo no puedo subir el archivo, siendo que tiene menos del tamaño maximo permitido por el foro, asi que voy a seguir intentando hasta conseguir subirlo. Saludos

tyno


Por ahora no hay caso, no puedo subir el archivo, pero por lo pronto te paso este archivo resumido que contiene solo las Hojas DATOS y COPIA, para que veas como funciona. Tendrias que rellenar la Hoja DATOS con unos 3000 registros, aparte extender las formulas de las columnas celeste y gris, y entonces probar de actualizar los datos y comprobar la diferencia de tiempo que lleva el proceso.
Si te interesa esta alternativa lo que podes hacer es copiar tanto el modulo que he insertado llamado "Macro_Actualizar_Datos" asi como la columna con formulas (la columna N color gris) en tu archivo original. Tambien tendrias que modificar el codigo en la Hoja Datos, ahora solo va la linea que llama a la macro del modulo mencionado.
Archivos
Informes resumido.xls
No tienes los permisos para descargar los archivos.
(105 KB)

tyno


Bueno creo que ahora si se pudo subir el archivo completo con todas las hojas. Entonces quedaria probarlo. Saludos.
Archivos
Informes.zip
No tienes los permisos para descargar los archivos.
(110 KB)

Aretradeser


No he podido comprobar el nuevo archivo que has colgado; pero con el resumido ha sido suficiente para adaptarlo al original, y la solución dada me parece suficiente para lo que necesito.
Muchísimas gracias por todo tu trabajo.
Saludos.

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.