Libération de la mémoire sous Excel 2002

Libération de la mémoire sous Excel 2002 - VB/VBA/VBS - Programmation

Marsh Posté le 10-04-2009 à 14:15:25    

Salut,
 
 
Je suis en train de développer un outil sous Excel et je rencontre quelques problèmes au niveau de l'occupation de la mémoire.
 
Dans mon code VBA, je récupère un range que j'insère dans un tableau.
Je fais un traitement sur ce tableau et ensuite je le recolle sur ma feuille Excel.
Le problème est qu'une fois le traitement terminé, je ne parviens pas à libérer la mémoire occupée pendant le traitement.
 
Dans le gestionnaire de tâches, je vois bien qu'Excel occupe de plus en plus de mémoire pendant l'opération mais pas moyen de la libérer.
L'outil Excel est bien évidemment de plus en plus lent et au bout d'un moment Excel plante.
 
Voici la partie du code qui pose problème :

Code :
  1. Tableau = Range(Cells(DepartJoursRow, DepartAgentsCol + 1), Cells(LigneDernierAgent, ColonneLastDate))
  2. TabNbLigne = UBound(Tableau, 1)
  3. TabNbCol = UBound(Tableau, 2)
  4. For i = 1 To TabNbLigne
  5.     If Len(Tableau(i, 1)) <> 0 Then
  6.         Agent = Tableau(i, 1)
  7.         For j = 2 To TabNbCol
  8.             If Len(Tableau(1, j)) = 0 And Len(Tableau(1, j - 1)) = 0 Then
  9.                 Exit For
  10.             End If
  11.             If IsDate(Tableau(1, j)) Then
  12.                 Tableau(1, j) = Format(Tableau(1, j), "dd/mm/yyyy" )
  13.                 Dte = Tableau(1, j)
  14.                 NumJour = Weekday(Dte, vbMonday)
  15.                 ChampM = "HOR_" & NumJour & "M"
  16.                 ChampA = "HOR_" & NumJour & "A"
  17.                
  18.                 Sql = "SELECT * FROM [T_HPPendantPeriode] WHERE HOR_AGENT='" & Agent & "' AND #" & Format(Dte, "mm/dd/yyyy" ) & "#>=HOR_DATEDEBUT;"
  19.                 Set rsPendant = db.OpenRecordset(Sql, DAO.dbOpenSnapshot)
  20.                
  21.                 If rsPendant.RecordCount = 0 Then
  22.                
  23.                     Sql = "SELECT * FROM [T_HPAvantPeriode] WHERE HOR_AGENT='" & Agent & "';"
  24.                     Set rsAvant = db.OpenRecordset(Sql, DAO.dbOpenSnapshot)
  25.                    
  26.                     If rsAvant.RecordCount <> 0 Then
  27.                         If IsNumeric(rsAvant(ChampM)) And IsNumeric(rsAvant(ChampA)) Then
  28.                             Tableau(i, j) = CInt(rsAvant(ChampM)) + CInt(rsAvant(ChampA))
  29.                         End If
  30.                     End If
  31.                    
  32.                     rsAvant.Close
  33.                     Set rsAvant = Nothing
  34.                
  35.                 End If
  36.                
  37.                 rsPendant.Close
  38.                 Set rsPendant = Nothing
  39. '***********************************************
  40.                
  41.             End If
  42.         Next j
  43.     End If
  44. Next i
  45. Range(Cells(DepartJoursRow, DepartAgentsCol + 1), Cells(LigneDernierAgent, ColonneLastDate)) = Tableau
  46. Erase Tableau()


 
Comment pourrais-je faire pour qu'Excel libère correctement la mémoire ?


Message édité par jaymzwise le 10-04-2009 à 14:16:11
Reply

Marsh Posté le 10-04-2009 à 14:15:25   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed