title: VBA subroutine slows down a lot after first execution
body: <p>I have a subroutine that generates a report of performance of different portfolios within 5 families. The thing is that the portfolios in question are never the same and the amount in each family neither. So, I copy paste a template (that is formated and...) and add the formated row (containing the formula and...) in the right family for each portfolio in the report. Everything works just fine, the code is not optimal and perfect of course, but it works fine for what we need. The problem is not the code itself, it is that when I execute the code the first time, it goes really fast (like 1 second)... but from the second time, the code slows down dramatically (almost 30 second for a basic task identical to the first one). I tried all the manual calculation, not refreshing the screen and ... but it is really not where the problem comes from. It looks like a memory leak to me, but I cannot find where is the problem! Why would the code runs very fast but sooooo much slower right after... Whatever the length of the report and the content of the file, I would need to close excel and reopen it for each report.</p>
  
  <p>**Not sure if I am clear, but it is not because the code makes the excel file larger or something, because after the first (fast) execution, if I save the workbook, close and reopen it, the (new) first execution will again be very fast, but if I would have done the same excat thing without closing and reopening it would have been very slow...^!^!</p>
  
  <pre><code>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) &lt;&gt; "") And (i &lt; 100)
  
      Family = Sheets("RawDataMV").Cells(i, 4)
      FamilyN = Sheets("RawDataMV").Cells(i + 1, 4)
  
      If (Sheets("RawDataMV").Cells(i, 3) &lt;&gt; "TOTAL") And _
      (Sheets("RawDataMV").Cells(i, 2) &lt;&gt; "Total") Then
  
          If (Family &lt;&gt; 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$" &amp; zone
  
  
  Sheets("Rapport").Calculate
  Sheets("RANK").Calculate
  Sheets("SommaireGroupeMV").Calculate
  Sheets("SommaireGroupeAlpha").Calculate
  Application.CutCopyMode = False
  </code></pre>
  
  <p>End Sub</p>