5 つのファミリ内のさまざまなポートフォリオのパフォーマンスのレポートを生成するサブルーチンがあります。問題は、問題のポートフォリオが同じになることはなく、各ファミリーの金額も同じではないということです。そのため、テンプレート (書式設定されたもの) をコピーして貼り付け、書式設定された行 (数式および... を含む) をレポートの各ポートフォリオの適切なファミリに追加します。もちろん、コードは最適でも完璧でもありませんが、必要なものには問題なく機能します。問題はコード自体ではありません。最初にコードを実行すると、非常に速くなります (1 秒程度)。最初のタスクと同じ)。画面を更新せずにすべて手動で計算してみましたが、実際には問題の原因ではありません。私にはメモリリークのように見えますが、どこに問題があるのか わかりません! なぜコードは非常に高速に実行されるのに、実行直後は非常に遅くなるのでしょうか...レポートの長さとファイルの内容に関係なく、レポートごとに Excel を閉じて再度開く必要があります。
**明確かどうかはわかりませんが、コードがExcelファイルを大きくするなどの理由ではありません。最初の(高速)実行後、ワークブックを保存して閉じてから再度開くと、(新しい)最初の実行再び非常に高速になりますが、閉じて再度開くことなく同じ excat を実行したとしたら、非常に遅くなっていたでしょう...^!^!
Dim Family As String
Dim FamilyN As String
Dim FamilyP As String
Dim NumberOfFamily As Integer
Dim i As Integer
Dim zone As Integer
Sheets("RapportTemplate").Cells.Copy Destination:=Sheets("Rapport").Cells
Sheets("Rapport").Activate
i = 3
NumberOfFamily = 0
FamilyP = Sheets("RawDataMV").Cells(i, 4)
While (Sheets("RawDataMV").Cells(i, 3) <> "") And (i < 100)
Family = Sheets("RawDataMV").Cells(i, 4)
FamilyN = Sheets("RawDataMV").Cells(i + 1, 4)
If (Sheets("RawDataMV").Cells(i, 3) <> "TOTAL") And _
(Sheets("RawDataMV").Cells(i, 2) <> "Total") Then
If (Family <> FamilyP) Then
NumberOfFamily = NumberOfFamily + 1
End If
With Sheets("Rapport")
.Rows(i + 8 + (NumberOfFamily * 3)).EntireRow.Insert
.Rows(1).Copy Destination:=Sheets("Rapport").Rows(i + 8 + (NumberOfFamily * 3))
.Cells(i + 8 + (NumberOfFamily * 3), 6).Value = Sheets("RawDataMV").Cells(i, 2).Value
.Cells(i + 8 + (NumberOfFamily * 3), 7).Value = Sheets("RawDataMV").Cells(i, 3).Value
End With
End If
i = i + 1
FamilyP = Family
Wend
For i = 2 To 10
If Sheets("Controle").Cells(16, i).Value = "" Then
Sheets("Rapport").Cells(1, i + 11).EntireColumn.Hidden = True
Else
Sheets("Rapport").Cells(1, i + 11).EntireColumn.Hidden = False
End If
Next i
Sheets("Rapport").Cells(1, 1).EntireRow.Hidden = True
'Define printing area
zone = Sheets("Rapport").Cells(4, 3).End(xlDown).Row
Sheets("Rapport").PageSetup.PrintArea = "$D$4:$Y$" & zone
Sheets("Rapport").Calculate
Sheets("RANK").Calculate
Sheets("SommaireGroupeMV").Calculate
Sheets("SommaireGroupeAlpha").Calculate
Application.CutCopyMode = False
サブ終了