Sub GenerarReportesPorCuenta_Modificado_v3()
Dim hojaOrigen As Worksheet, hojaNueva As Worksheet
Dim fila As Long, ultimaFila As Long
Dim wb As Workbook
Dim dict As Object
Dim clave As String
Dim celda As Range
Dim datos As Variant
Dim nombreHoja As String
Dim filaNueva As Long
Dim hojaItem As Variant
Set wb = ThisWorkbook
Set dict = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
' Recorrer todas las hojas
For Each hojaOrigen In wb.Sheets
If hojaOrigen.Name <> "Resumen" Then
ultimaFila = hojaOrigen.Cells(hojaOrigen.Rows.Count, 1).End(xlUp).Row
For fila = 2 To ultimaFila
' Modificado: Volver a leer hasta la columna L
datos = hojaOrigen.Range("A" & fila & ":L" & fila).Value ' A:L
' Clave única por CIFBanco y Cuenta
clave = datos(1, 2) & "_" & datos(1, 3) ' CIFBanco & NumeroCuenta
' Si n
If Not dict.exists(clave) Then
Set hojaNueva = Sheets.Add(After:=Sheets(Sheets.Count))
nombreHoja = "C_" & datos(1, 2) & "_" & datos(1, 3)
On Error Resume Next
hojaNueva.Name = Left(nombreHoja, 31)
On Error GoTo 0
dict.Add clave, hojaNueva
With hojaNueva
.Cells(1, 1).Value = "Detalle de Transacciones por Cuenta"
' Modificado: Merge hasta la columna I
.Range("A1:I1").Merge
.Range("A1").Font.Bold = True
.Range("A1").HorizontalAlignment = xlCenter
.Rows(2).EntireRow.ClearContents
.Rows(3).EntireRow.ClearContents
.Cells(4, 1).Value = "Cliente"
.Cells(4, 2).Value = datos(1, 2)
.Cells(5, 1).Value = "Cuenta"
.Cells(5, 2).Value = datos(1, 3)
.Range("A4:B5").Font.Bold = True
.Range("A7").Value = "Fecha_proceso"
.Range("B7").Value = "CodigoTransaccion"
.Range("C7").Value = "Tipo"
.Range("D7").Value = "DescripcionTransaccion"
.Range("E7").Value = "MontoDolares"
.Range("F7").Value = "Monto"
.Range("G7").Value = "Lote"
' Modificado: Agregar nuevos encabezados
.Range("H7").Value = "CIFBanco"
.Range("I7").Value = "Referencia"
.Range("A7:I7").Font.Bold = True
.Range("A7:I7").HorizontalAlignment = xlCenter
.Activate
ActiveWindow.DisplayGridlines = False
End With
End If
Set hojaNueva = dict(clave)
filaNueva = hojaNueva.Cells(hojaNueva.Rows.Count, 1).End(xlUp).Row + 1
hojaNueva.Cells(filaNueva, 1).Value = datos(1, 1) ' Fecha_proceso
hojaNueva.Cells(filaNueva, 2).Value = datos(1, 5) ' CodigoTransaccion
hojaNueva.Cells(filaNueva, 3).Value = datos(1, 4) ' Tipo
hojaNueva.Cells(filaNueva, 4).Value = datos(1, 6) ' DescripcionTransaccion
' Modificado: MontoDolares se toma del índice 12 (columna L)
hojaNueva.Cells(filaNueva, 5).Value = datos(1, 12) ' MontoDolares
hojaNueva.Cells(filaNueva, 6).Value = datos(1, 11) ' Monto
hojaNueva.Cells(filaNueva, 7).Value = datos(1, 9) ' Lote
' Modificado: Agregar CIFBanco y Referencia
hojaNueva.Cells(filaNueva, 8).Value = datos(1, 2) ' CIFBanco
hojaNueva.Cells(filaNueva, 9).Value = datos(1, 8) ' Referencia
Next fila
End If
Next hojaOrigen
' Agregar FIN DEL REPORTE
For Each hojaItem In dict.Items
If TypeName(hojaItem) = "Worksheet" Then
With hojaItem
Dim ultFila As Long
ultFila = .Cells(.Rows.Count, 1).End(xlUp).Row
.Cells(ultFila + 1, 1).EntireRow.ClearContents
' Modificado: Merge hasta la columna I
.Range("A" & ultFila + 2 & ":I" & ultFila + 2).Merge
.Range("A" & ultFila + 2).Value = "***FIN DEL REPORTE***"
.Range("A" & ultFila + 2).HorizontalAlignment = xlCenter
.Range("A" & ultFila + 2).Font.Bold = True
End With
End If
Next hojaItem
Application.ScreenUpdating = True
MsgBox "Reportes generados correctamente.", vbInformation
End Sub