suriyahi
07-07-2009, 08:48 PM
Hi Friends -
I have the following codes below and with my test file it used to take about 22 seconds to run it but now after inserting real data in other sheets it is taking almost 7 minutes to run it. And, I wanted to request you to see if there is any tweaking required in my code so that performance gets little better. I apologize for the long code below but I thank you in advance for your help...and time!!!:banghead:
Sub Main_Macro()
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Call Setup_Pricing_Detail_Sheet
Call Delete_Rows_With_Parts_No_Longer_Ordered
Call Change_Part_Numbers
Call Copy_Data_From_Pricing_Detail_to_MAPICS_Order
Sheets("Pricing Detail Dummy").Delete
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub
Sub Setup_Pricing_Detail_Sheet()
Dim rng As Range, ix As Long
Sheets("Pricing Detail").Select
Sheets("Pricing Detail").Copy Before:=Sheets(1)
Sheets("Pricing Detail (2)").Name = "Pricing Detail Dummy"
Cells.EntireRow.Hidden = False
Application.Calculation = xlCalculationManual
' *Delete rows in Col F that are blank
Set rng = Intersect(Range("F:F"), ActiveSheet.UsedRange)
For ix = rng.Count To 13 Step -1
If Trim(Replace(rng.Item(ix).Text, Chr(160), Chr(32))) = "" Then
rng.Item(ix).EntireRow.Delete
End If
Next
' *Delete rows in Col I that have "0" in them
Set rng = Intersect(Range("I:I"), ActiveSheet.UsedRange)
For ix = rng.Count To 13 Step -1
If Trim(Replace(rng.Item(ix).Text, Chr(160), Chr(32))) = "0" Then
rng.Item(ix).EntireRow.Delete
End If
Next
' *Delete rows in Col D that are blank (ie warranty lines)
Set rng = Intersect(Range("D:D"), ActiveSheet.UsedRange)
For ix = rng.Count To 13 Step -1
If Trim(Replace(rng.Item(ix).Text, Chr(160), Chr(32))) = "" Then
rng.Item(ix).EntireRow.Delete
End If
Next
Application.Calculation = xlCalculationAutomatic
End Sub
Sub Delete_Rows_With_Parts_No_Longer_Ordered()
Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long
Dim CalcMode As Long
Dim ViewMode As Long
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
With ActiveSheet
Firstrow = 14
Lastrow = Range("F14").End(xlDown).Row
For Lrow = Lastrow To Firstrow Step -1
With .Cells(Lrow, "F")
If Not IsError(.Value) Then
Select Case .Value
Case Is = "32 R2906", "F2L088 -6", "USR5686E", "ACK-595UB", _
"14173148", "6073 IFC_V2", "CB -SATD11 - S1", "MK -35 / 525 - HD - BW", _
"2811", "1841", "WIC-1T", "CAB -V35MT", "408", "4221530", "CBL0029", _
"355022", "????", "90-C5XO-1OR": .EntireRow.Delete
End Select
End If
End With
Next Lrow
End With
With Application
.ScreenUpdating = True
.Calculation = CalcMode
End With
End Sub
'Part2: Find the parts and replace with new part numbers
Sub Change_Part_Numbers()
Dim c As Range
Dim TotalParts As Range
Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long
Firstrow = 14
Lastrow = Range("F14").End(xlDown).Row
Set TotalParts = Range("F14:F" & Lastrow)
For Each c In TotalParts
c = Replace(c, "39M5785", "46C7418")
c = Replace(c, "LTA-00040-IHG", "LTA-00040")
c = Replace(c, "12205112", "14344822")
c = Replace(c, "12107484", "14174504")
c = Replace(c, "3400-32", "X3400-V9")
c = Replace(c, "6073-ADU", "6234-A1U")
c = Replace(c, "73P4984", "45J5435")
c = Replace(c, "6073FN_V2", "6234A1U_FN")
c = Replace(c, "6073FO_V2", "6234A1U_FO")
c = Replace(c, "1532N", "30G0100")
c = Replace(c, "39V0214", "30G0802")
c = Replace(c, "WS-C2950-24", "WS-C2960-24TT-L")
c = Replace(c, "SUA1500RM2U", "SUA1500R2X122")
Next
done:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Sub Copy_Data_From_Pricing_Detail_to_MAPICS_Order()
Dim wSht1 As Worksheet, wSht2 As Worksheet
Dim rng1 As Range
Dim LastCel As Long, lastAdd1cel As Long, lastPartcel As Long
Set wSht1 = Sheets("Pricing Detail Dummy")
Set wSht2 = Sheets("MAPICS Order")
wSht1.Select
LastCel = wSht1.Range("F65536").End(xlUp).Row
Set rng1 = wSht1.Range("F14:F" & LastCel)
Set rng2 = wSht1.Range("I14:I" & LastCel)
Application.ScreenUpdating = False
rng1.Select
rng1.Copy
LastCel = wSht2.Range("X65536").End(xlUp).Row
With wSht2
.Range("X" & LastCel).Offset(1, 0).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End With
rng2.Select
rng2.Copy
LastCel = wSht2.Range("AC65536").End(xlUp).Row
With wSht2
.Range("AC" & LastCel).Offset(1, 0).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End With
wSht2.Select
lastAdd1cel = Range("B65536").End(xlUp).Row
lastPartcel = Range("X65536").End(xlUp).Row
Range("B" & lastAdd1cel).AutoFill Destination:=Range("B" & lastAdd1cel & ":B" & lastPartcel)
With Cells.Font
.Name = "Verdana"
.Size = 8
End With
Range("A2:AE" & lastPartcel).Borders.LineStyle = xlNone
Application.ScreenUpdating = True
End Sub
I have the following codes below and with my test file it used to take about 22 seconds to run it but now after inserting real data in other sheets it is taking almost 7 minutes to run it. And, I wanted to request you to see if there is any tweaking required in my code so that performance gets little better. I apologize for the long code below but I thank you in advance for your help...and time!!!:banghead:
Sub Main_Macro()
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Call Setup_Pricing_Detail_Sheet
Call Delete_Rows_With_Parts_No_Longer_Ordered
Call Change_Part_Numbers
Call Copy_Data_From_Pricing_Detail_to_MAPICS_Order
Sheets("Pricing Detail Dummy").Delete
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub
Sub Setup_Pricing_Detail_Sheet()
Dim rng As Range, ix As Long
Sheets("Pricing Detail").Select
Sheets("Pricing Detail").Copy Before:=Sheets(1)
Sheets("Pricing Detail (2)").Name = "Pricing Detail Dummy"
Cells.EntireRow.Hidden = False
Application.Calculation = xlCalculationManual
' *Delete rows in Col F that are blank
Set rng = Intersect(Range("F:F"), ActiveSheet.UsedRange)
For ix = rng.Count To 13 Step -1
If Trim(Replace(rng.Item(ix).Text, Chr(160), Chr(32))) = "" Then
rng.Item(ix).EntireRow.Delete
End If
Next
' *Delete rows in Col I that have "0" in them
Set rng = Intersect(Range("I:I"), ActiveSheet.UsedRange)
For ix = rng.Count To 13 Step -1
If Trim(Replace(rng.Item(ix).Text, Chr(160), Chr(32))) = "0" Then
rng.Item(ix).EntireRow.Delete
End If
Next
' *Delete rows in Col D that are blank (ie warranty lines)
Set rng = Intersect(Range("D:D"), ActiveSheet.UsedRange)
For ix = rng.Count To 13 Step -1
If Trim(Replace(rng.Item(ix).Text, Chr(160), Chr(32))) = "" Then
rng.Item(ix).EntireRow.Delete
End If
Next
Application.Calculation = xlCalculationAutomatic
End Sub
Sub Delete_Rows_With_Parts_No_Longer_Ordered()
Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long
Dim CalcMode As Long
Dim ViewMode As Long
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
With ActiveSheet
Firstrow = 14
Lastrow = Range("F14").End(xlDown).Row
For Lrow = Lastrow To Firstrow Step -1
With .Cells(Lrow, "F")
If Not IsError(.Value) Then
Select Case .Value
Case Is = "32 R2906", "F2L088 -6", "USR5686E", "ACK-595UB", _
"14173148", "6073 IFC_V2", "CB -SATD11 - S1", "MK -35 / 525 - HD - BW", _
"2811", "1841", "WIC-1T", "CAB -V35MT", "408", "4221530", "CBL0029", _
"355022", "????", "90-C5XO-1OR": .EntireRow.Delete
End Select
End If
End With
Next Lrow
End With
With Application
.ScreenUpdating = True
.Calculation = CalcMode
End With
End Sub
'Part2: Find the parts and replace with new part numbers
Sub Change_Part_Numbers()
Dim c As Range
Dim TotalParts As Range
Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long
Firstrow = 14
Lastrow = Range("F14").End(xlDown).Row
Set TotalParts = Range("F14:F" & Lastrow)
For Each c In TotalParts
c = Replace(c, "39M5785", "46C7418")
c = Replace(c, "LTA-00040-IHG", "LTA-00040")
c = Replace(c, "12205112", "14344822")
c = Replace(c, "12107484", "14174504")
c = Replace(c, "3400-32", "X3400-V9")
c = Replace(c, "6073-ADU", "6234-A1U")
c = Replace(c, "73P4984", "45J5435")
c = Replace(c, "6073FN_V2", "6234A1U_FN")
c = Replace(c, "6073FO_V2", "6234A1U_FO")
c = Replace(c, "1532N", "30G0100")
c = Replace(c, "39V0214", "30G0802")
c = Replace(c, "WS-C2950-24", "WS-C2960-24TT-L")
c = Replace(c, "SUA1500RM2U", "SUA1500R2X122")
Next
done:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Sub Copy_Data_From_Pricing_Detail_to_MAPICS_Order()
Dim wSht1 As Worksheet, wSht2 As Worksheet
Dim rng1 As Range
Dim LastCel As Long, lastAdd1cel As Long, lastPartcel As Long
Set wSht1 = Sheets("Pricing Detail Dummy")
Set wSht2 = Sheets("MAPICS Order")
wSht1.Select
LastCel = wSht1.Range("F65536").End(xlUp).Row
Set rng1 = wSht1.Range("F14:F" & LastCel)
Set rng2 = wSht1.Range("I14:I" & LastCel)
Application.ScreenUpdating = False
rng1.Select
rng1.Copy
LastCel = wSht2.Range("X65536").End(xlUp).Row
With wSht2
.Range("X" & LastCel).Offset(1, 0).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End With
rng2.Select
rng2.Copy
LastCel = wSht2.Range("AC65536").End(xlUp).Row
With wSht2
.Range("AC" & LastCel).Offset(1, 0).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End With
wSht2.Select
lastAdd1cel = Range("B65536").End(xlUp).Row
lastPartcel = Range("X65536").End(xlUp).Row
Range("B" & lastAdd1cel).AutoFill Destination:=Range("B" & lastAdd1cel & ":B" & lastPartcel)
With Cells.Font
.Name = "Verdana"
.Size = 8
End With
Range("A2:AE" & lastPartcel).Borders.LineStyle = xlNone
Application.ScreenUpdating = True
End Sub