Agregar datos a otra hoja cada vez que ingrese registros

Buenos días, hace poco hice una pregunta en todo expertos sobre pasar datos de una hoja llamada "datos" a otra hoja y la respuesta me fue de gran ayuda, modificando el código pude resolver la mayoría de inconvenientes excepto la siguiente:

-como manejo una cantidad diaria de 100 filas ingresadas, quisiera poder pasar los registros de la hoja "datos" hacia la otra hoja pero solo los que se vallan ingresando en ese día y así sucesivamente, sin tener que filtrar toda l información previamente llenada.

Dejo el código (gracias experto Dam) que esta modificado para que solo pasen ciertas columnas hacia la otra hoja y no limpie la hoja al pasarlas. Muchas gracias por su tiempo y respuesta.

Sub numeros3()
'Pone códigos únicos en otra hoja
'Por.Dam (modificado)
Dim encontrado As Boolean
Set h1 = Sheets("datos")
Set h2 = Sheets("Hoja1")
h2.Cells.Clear
h1.Select
For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
 encontrado = False
 For j = 1 To h2.Range("A" & Rows.Count).End(xlUp).Row
 If h1.Cells(i, "A") = h2.Cells(j, "A") _
 And h1.Cells(i, "B") = h2.Cells(j, "B") _
 And h1.Cells(i, "C") = h2.Cells(j, "C") _
 And h1.Cells(i, "D") = h2.Cells(j, "D") _
 And h1.Cells(i, "F") = h2.Cells(j, "E") Then
[size= 0.8em; line-height: 1.1em]encontrado = True[/size]
 End If
 Next
 If encontrado = False Then
 h2.Range("A" & h2.Range("A" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "A")
 h2.Range("B" & h2.Range("B" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "B")
 h2.Range("C" & h2.Range("C" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "C")
 h2.Range("D" & h2.Range("D" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "D")
[size= 0.8em; line-height: 1.1em]h2.Range("E" & h2.Range("E" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "F")[/size]
 End If
Next
h2.Select
 Range("A1").Value = "Codigo"
 Range("B1").Value = "Cliente"
 Range("C1").Value = "Producto"
 Range("D1").Value = "Material"
 Range("E1").Value = "Fecha"
 Range("A1:E1").Select
 Selection.Font.Bold = True
 Selection.HorizontalAlignment = xlCenter
 Selection.End(xlDown).Select
MsgBox "Proceso terminado", vbInformation, "Códigos"
End Sub

1 Respuesta

Respuesta
1

Puedes enviarme un archivo con ejemplos, pon un ejemplo de cuál dato si pasaría y cuál dato no pasaría, y con la macro para hacer pruebas.

Ok, te la acabo de enviar experto, muchas gracias.

Discúlpame por no poner la aclaración en el correo, en cuanto a que dato no pasaría, de cierto modo solo pasarían los datos que ingrese cada dia y que pasarían a la otra hoja, en resumen pasarían los datos nuevos y filtrados hacia la otra hoja, para no estar filtrando toda la base de datos desde el primer registro de la hoja "datos". Muchas Gracias.

Pero cómo identifico : " ¿los datos nuevos y filtrados"?

¿De los 24 registros que vienen en la hoja datos? Cuáles paso, puedes poner el ejemplo

Saludos. Dam

claro, por ejemplo.. estos datos los tengo en la hoja "datos"

código nombre
c001 nomA
c001 nomA
c002 nomB

c001 nomC --ultimo registro ingresado

Ahora veamos como queda filtrada en la otra hoja :

código nombre
c001 nomA
c002 nomB
c001 nomC -aparece como ultimo

Hasta aquí ok, ahora pongamos el caso que ingreso otros registros (c003 nomD) en la hoja "datos",

código nombre
c001 nomA
c001 nomA
c002 nomB
c001 nomC

c003 nomD --->que solo filtre este registro ingresado un dia x

c003 nomD --->que solo filtre este registro ingresado un dia x

como hay duplicados de esos registro en la hoja "datos", la macro lee nuevamente todos los registros y la idea es que solo filtre los registros ingresados por eje,plo, de ese dia.

quedaría en la otra hoja como:

c001 nomA
c002 nomB
c001 nomC

c003 nomD

Todo bien, pero supongamos que tenga mas de 4000 registros en la hoja "datos", el problema surge que por mas que yo solo ingrese un registro, la macro va a recorrer todos esos registros desde el principio hasta el ultimo ingresado, lo ideal seria que mientras yo ingrese los registros solo filtren los ingresados en ese dia en particular, por favor si tienes alguna otra duda mela comentas, muchas gracias experto.

Ya te envié el archivo, tuve que agregar una columna en la macro, es decir, en la columna G voy a poner una X a cada registro cuando sea procesado, los registros nuevos no tendrán esa X, por lo tanto cuando ejecutes la macro sólo considerará los registros que no tienen X ("los nuevos"),

Saludos. Dam

Si es lo que necesitas.

Resulto mejor de lo que esperaba, ya que solo filtra los registros que no tengan la X en la columna G y después agregarlos para no considerarlo en los posteriores filtros, me costo un poco de tiempo en entender la macro después de realizar las pruebas, solo tengo una duda y es que el campo fecha en la hoja (Hoja1) siempre lo va a tomar como formato numero o es posible cambiarlo al formato fecha?, he tratado probar con el Cdate pero no produce ningún cambio, muchas gracias.

No me había fijado.

Cambia esta línea

h2.Range("E" & h2.Range("E" & Rows.Count).End(xlUp).Row + 1) = h1.Cells(i, "F")

Por esta

h2.Range("E" & h2.Range("E" & Rows.Count).End(xlUp).Row + 1) = Format(h1.Cells(i, "F"), "dd/mm/yyyy")

Saludos. Dam

Hola, probé el cambio de código y realiza el cambio, aparecen todos los datos en la otra hoja (hoja1) con formato fecha pero sin el filtro. En cambio reemplazando el Cdate en el mismo lugar que el Format, se produce lo que estaba esperando, aquí dejo el código y te envío el archivo para comprobar is es posible que produzca error por usar el Cdate. Gracias por tu respuesta.

h2.Range("E" & h2.Range("E" & Rows.Count).End(xlUp).Row + 1) = CDate(h1.Cells(i, "F"))

Tienes razón, funciona bien con CDate, no veo ningún error, entonces deja CDate

Saludos. Dam

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas