Probleme de mémoire entre VB et EXCEL

cybergoustaf Messages postés 10 Date d'inscription mardi 17 septembre 2002 Statut Membre Dernière intervention 15 avril 2008 - 7 janv. 2003 à 14:59
Oxilat Messages postés 17 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 17 juillet 2007 - 3 mars 2004 à 14:44
voila:

ma config: Pentium III 700 Mgz, 256Mo, WinNT4 SP4, VB6 Sp5, Excel 97

Depuis un programme VB je génère un fichier excel composé de 3 feuilles (chaque feuille contient un tableau, il n'y a pas plus de 5 pages par feuille) quand je lance cette édition à partir de VB, ca plante lamentablement en me générant une erreur DR Watson (des fois ca marche au moins une fois, voire deux, des fois ca ne marche pas du tout) comme DRwatson n'apporte aucune information (sic!) je suis allé dans la base re registres pour désactiver la prise en charge des plantages par DRwatson afin de voir quel était le message généré par VB lors du plantage. Voici donc la boîte de dialogue VB quand l'édition excel plante (elle ne plante pas toujours au meme endroit, même s'il s'agit toujours de la meme édition avec les mêmes données):

"L'instruction à "0x77f8d5cc" emploie l'adresse mémoire "0x00000000". La mémoire ne peut pas êter 'written'. Appuyez sur OK pour fermer l'application"

sur un site, j'ai lu qu'en fait, la RAM état saturée, VB ou Excel essayait d'écrire dans la ROM (ca ne doit pas être mon cas car j'ai 256Mo de mem et je vois bien qu'il en reste pas mal de libre)

sur un autre site j'ai lu que ce problème était étroitement lié au système windows NT et qu'une mise à jour vers un Service Pack plus récent corrigerait cette erreur (mais j'en doute)

un troisième site dit qu'il s'agit de problèmes des drivers imprimante et qu'en réinstallant WinNT de nouveau ainsi que les pilotes imprimante les plus récents ce problème devrait être résolu (mais là je me marre vraiment)

à titre indicatif voici comment j'ouvre et ferme excel:

'* globales de gestion d'excel
Public MyExcel As Excel.Application
Public Fichier As Excel.Workbook
Public Feuille As Excel.Worksheet
Public CellSelect As Excel.Range
Public ExcelWasNotRunning As Boolean

ouverture d'excel:
Public Sub Démarrer_Excel()
On Error Resume Next
Set MyExcel = GetObject(, "Excel.Application") '* recherche une instance d'Excel
If err.Number <> 0 Then '* Si Excel n'est pas chargé
Set MyExcel = CreateObject("Excel.Application") '* on l'exécute
ExcelWasNotRunning = True
Else
ExcelWasNotRunning = False
End If
MyExcel.DisplayAlerts = False
err.Clear '* Efface l'objet Err en cas d'erreur.
MyExcel.Visible = False
End Sub

Récupération du fichier modèle pour mon édition:
Set Fichier = MyExcel.Workbooks.Open(App.Path & "ModRecap.xls")

Je me positionne sur un des trois onglets en fonction des données lues de cette manière:
select case TypDon
Case "A"
Set Feuille = Fichier.Worksheets(3)
Case "X"
Set Feuille = Fichier.Worksheets(1)
Case "W"
Set Feuille = Fichier.Worksheets(2)
end Select

une fois l'édition terminée, je sauvegarde mon fichier excel dans un répertoire spécifique avec un nom spécifique:
Fichier.SaveAs gStrDriveLetter & gStrRep & gStrRepEdition & gStrNomFic
Fichier.Close 'Ferme la feuille de travail
Set Fichier = Nothing

puis je ferme Excel:

Public Sub Cleanup()
On Error GoTo Cleanup_ERR
' Invoque cette fonction avant la fermeture de l'app.
' Définit toutes les variables globales sur nothing.
If ExcelWasNotRunning = True Then
' si c'est mon prog qui a crée l'instance excel, je la ferme
MyExcel.Quit
ExcelWasNotRunning = False
Else
' sinon je rends visible l'isntance excel qu'utilisait l'utilisateur
MyExcel.Visible = True
MyExcel.WindowState = xlMaximized
End If
'* vidage des variables
Set MyExcel = Nothing
Set Fichier = Nothing
Set Feuille = Nothing
Set CellSelect = Nothing
Exit Sub
Cleanup_ERR:
Ihm_Error err, "Cleanup"
End Sub

Voila, mon code me semble propre (d'ailleurs il marche TRES bien avec une autre édition excel qui elle ne contient qu'un seul onglet)
malheuresement, avec l'édition où je dois alimenter 3 onglets j'ai systématiquement l'érreur décrite supra voire, carrément, un plantage vb avec "mémoire insuffisante"

je suis dans la mouise, je ne trouve aucune solution de contournement, quelqu'un a-t-il déjà été confronté à ce genre de problème?

2 réponses

Oxilat Messages postés 17 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 17 juillet 2007
3 mars 2004 à 14:44
tu peu essailer de paser pare MyExcel.Sheets(Feuil1).Select
mai je doute que sa change qulque chause
mai merci pour ton code il va petaitre m'aider
0
Oxilat Messages postés 17 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 17 juillet 2007
3 mars 2004 à 14:44
tu peu essailer de paser pare MyExcel.Sheets(Feuil1).Select
mai je doute que sa change qulque chause
mai merci pour ton code il va petaitre m'aider
0
Rejoignez-nous