jaymzwise | 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 :
- Tableau = Range(Cells(DepartJoursRow, DepartAgentsCol + 1), Cells(LigneDernierAgent, ColonneLastDate))
- TabNbLigne = UBound(Tableau, 1)
- TabNbCol = UBound(Tableau, 2)
- For i = 1 To TabNbLigne
- If Len(Tableau(i, 1)) <> 0 Then
- Agent = Tableau(i, 1)
- For j = 2 To TabNbCol
- If Len(Tableau(1, j)) = 0 And Len(Tableau(1, j - 1)) = 0 Then
- Exit For
- End If
- If IsDate(Tableau(1, j)) Then
- Tableau(1, j) = Format(Tableau(1, j), "dd/mm/yyyy" )
- Dte = Tableau(1, j)
- NumJour = Weekday(Dte, vbMonday)
- ChampM = "HOR_" & NumJour & "M"
- ChampA = "HOR_" & NumJour & "A"
-
- Sql = "SELECT * FROM [T_HPPendantPeriode] WHERE HOR_AGENT='" & Agent & "' AND #" & Format(Dte, "mm/dd/yyyy" ) & "#>=HOR_DATEDEBUT;"
- Set rsPendant = db.OpenRecordset(Sql, DAO.dbOpenSnapshot)
-
- If rsPendant.RecordCount = 0 Then
-
- Sql = "SELECT * FROM [T_HPAvantPeriode] WHERE HOR_AGENT='" & Agent & "';"
- Set rsAvant = db.OpenRecordset(Sql, DAO.dbOpenSnapshot)
-
- If rsAvant.RecordCount <> 0 Then
- If IsNumeric(rsAvant(ChampM)) And IsNumeric(rsAvant(ChampA)) Then
- Tableau(i, j) = CInt(rsAvant(ChampM)) + CInt(rsAvant(ChampA))
- End If
- End If
-
- rsAvant.Close
- Set rsAvant = Nothing
-
- End If
-
- rsPendant.Close
- Set rsPendant = Nothing
- '***********************************************
-
- End If
- Next j
- End If
- Next i
- Range(Cells(DepartJoursRow, DepartAgentsCol + 1), Cells(LigneDernierAgent, ColonneLastDate)) = Tableau
- 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
|