0

I have the following code that works and does the following: First, from a "template" file, it fetches information from a closed file and fills in some required structure. Next, it opens a second closed file and looks for some data from the "template" to bring a certain result. In the same way and with this data already in the template, some conditions are worked on so that a column is completed if these conditions are met. The problem is that all this takes 56 seconds on my PC. How can I speed up that whole process to less than 10 seconds?

I realized that the delay is due to the process that is carried out in columns 12, 13, 14 and 15 with the index match process in the librodatos2.

I have reviewed several forums and contributions where they mention that I should implement a 2D array but I have not been able to understand it to be able to implement it.

Can someone help me guide this setting to achieve greater speed in this code?

Thanks in advance

Sub Control()
Application.ScreenUpdating = False
Const Path As String = "C:\Users\10101415\Desktop\AUT_SOX\SERV\"
Dim filename As String
filename = Dir(Path & "\" & "*.xls")
Dim librodatos As Workbook
Set librodatos = Workbooks.Open(Path & filename)
ult = librodatos.Sheets(1).Cells(5, 1).End(xlDown).Row
fin = Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(3, 2).End(xlDown).Row
On Error Resume Next




''COPIAR RANGO DE DATOS DE LIBRO CERRADO
librodatos.Sheets(1).Range("A5:A" & ult).Copy
''NO GUARDAR CAMBIOS EN LIBRO CERRADO
Application.ScreenUpdating = False

Workbooks("VERIFICACIÓN - BLANCO.xlsm").Activate
With ActiveWorkbook
.Sheets(1).Cells(3, 2).Activate
.Sheets(1).Cells(3, 2).PasteSpecial xlPasteValues
.Sheets(1).Range("B3:C" & fin).NumberFormat = "General"
.Sheets(1).Range("B3:C" & fin).Value = ActiveWorkbook.Sheets(1).Range("B3:B" & fin).Value
.Sheets(1).Range("B3:C" & fin).NumberFormat = "00000000000000"
End With

librodatos.Sheets(1).Range("C5:C" & ult).Copy
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Activate
With ActiveWorkbook
.Sheets(1).Cells(3, 3).Activate
.Sheets(1).Cells(3, 3).PasteSpecial xlPasteValues
.Sheets(1).Range("C3:C" & fin).NumberFormat = "General"
.Sheets(1).Range("C3:C" & fin).Value = ActiveWorkbook.Sheets(1).Range("C3:C" & fin).Value
End With

librodatos.Sheets(1).Range("D5:D" & ult).Copy
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Activate
ActiveWorkbook.Sheets(1).Cells(3, 4).Activate
ActiveWorkbook.Sheets(1).Cells(3, 4).PasteSpecial xlPasteValues

librodatos.Sheets(1).Range("F5:F" & ult).Copy
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Activate
ActiveWorkbook.Sheets(1).Cells(3, 5).Activate
ActiveWorkbook.Sheets(1).Cells(3, 5).PasteSpecial xlPasteValues

librodatos.Sheets(1).Range("H5:H" & ult).Copy
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Activate
ActiveWorkbook.Sheets(1).Cells(3, 6).Activate
ActiveWorkbook.Sheets(1).Cells(3, 6).PasteSpecial xlPasteValues

librodatos.Sheets(1).Range("O5:O" & ult).Copy
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Activate
ActiveWorkbook.Sheets(1).Cells(3, 7).Activate
ActiveWorkbook.Sheets(1).Cells(3, 7).PasteSpecial xlPasteValues

librodatos.Application.CutCopyMode = False
librodatos.Close savechanges:=False

Call Consecutivo

Application.ScreenUpdating = False
Const Path2 As String = "C:\Users\10101415\Desktop\AUT_SOX\SAB\"
Dim filename2 As String
filename2 = Dir(Path2 & "\" & "*.xlsx")

Dim librodatos2 As Workbook
Set librodatos2 = Workbooks.Open(Path2 & filename2)
ult2 = librodatos2.Sheets(1).Cells(2, 1).End(xlDown).Row

''FILTRAR POR COLUMNA DE SOLICITUDES NO VACIAS
With librodatos2
.ActiveSheet.Range("A1:BN" & ult2).AutoFilter Field:=51, Criteria1:="<>"
.Sheets(1).Range("A1:BN" & ult2).Copy
.Sheets.Add After:=ActiveSheet
.Sheets(2).Cells(1, 1).PasteSpecial xlPasteValues

ULT30 = Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(3, 2).End(xlDown).Row
ULT31 = librodatos2.Sheets(2).Cells(2, 1).End(xlDown).Row
For G = 3 To ULT30

.Sheets(2).Range("C2:C" & ULT31).NumberFormat = "General"
.Sheets(2).Range("C2:C" & ULT31).Value = ActiveWorkbook.Sheets(2).Range("C2:C" & ULT31).Value
.Sheets(2).Range("AY2:AY" & ULT31).NumberFormat = "General"
.Sheets(2).Range("AY2:AY" & ULT31).Value = ActiveWorkbook.Sheets(2).Range("AY2:AY" & ULT31).Value

Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(G, 12) = WorksheetFunction.Index(librodatos2.Sheets(2).Range("BH2", "BH" & ULT31), WorksheetFunction.Match(Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(G, 2).Value, librodatos2.Sheets(2).Range("AY2", "AY" & ULT31), 0))
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(G, 13) = WorksheetFunction.Index(librodatos2.Sheets(2).Range("BI2", "BI" & ULT31), WorksheetFunction.Match(Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(G, 2).Value, librodatos2.Sheets(2).Range("AY2", "AY" & ULT31), 0))
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(G, 14) = WorksheetFunction.Index(librodatos2.Sheets(2).Range("BL2", "BL" & ULT31), WorksheetFunction.Match(Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(G, 2).Value, librodatos2.Sheets(2).Range("AY2", "AY" & ULT31), 0))
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(G, 15) = WorksheetFunction.Index(librodatos2.Sheets(2).Range("A2", "A" & ULT31), WorksheetFunction.Match(Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(G, 2).Value, librodatos2.Sheets(2).Range("AY2", "AY" & ULT31), 0))


Next G
.Application.CutCopyMode = False
.Close savechanges:=False
End With


For q = 3 To ULT30

If Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 14) = "0" And Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 12) <> "" Then
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 11) = "OK firma digital - On Base"

ElseIf Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 14) = "2" And Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 12) <> "" And Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 13) = "MARIA" Then
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 11) = "OK firma digital - On Base"


ElseIf Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 14) = "2" And Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 12) <> "" And Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 13) = "MILENA" Then
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 11) = "OK firma digital - On Base"


ElseIf Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 14) = "3" And Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 12) <> "" And Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 13) = "ALFONSO" Then
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 11) = "OK firma digital - On Base"


Else
Workbooks("VERIFICACIÓN - BLANCO.xlsm").Sheets(1).Cells(q, 11) = "Revisar"


End If
Next q

End Sub


Sub Consecutivo()
Dim total As Variant
FN2 = (ActiveWorkbook.Sheets(1).Cells(3, 2).End(xlDown).Row) - 2
ReDim total(1 To FN2) As Long
For i = 1 To FN2
total(i) = i
Next i

total = Application.WorksheetFunction.Transpose(total)
Range("A3").Resize(FN2, 1).Value = total
End Sub
braX
  • 10,905
  • 5
  • 18
  • 32

0 Answers0