Après de nombreux désagrément de programmation d'une application devant manipuler des fichiers Excel en automation (processus restant en mémoire à la fermeture du classeur, références différentes d'Excel suivant le poste de travail utilisé), j'ai du, dans un premier temps, déporter mon code en vba sur les feuille de calcul; mais après acharnement, j'ai enfin trouvé la solution.
Code utilisé fréquemment pour manipuler les fichiers Excel sous VB6 :
'Déclaration des variables Dim appExcel As Excel.Application 'Application Excel Dim wbExcel As Excel.Workbook 'Classeur Excel Dim wsExcel As Excel.Worksheet 'Feuille Excel 'Ouverture de l'application Set appExcel = CreateObject("Excel.Application") 'Ouverture d'un fichier Excel Set wbExcel = appExcel.Workbooks.Open("C:\MonFichierExcel.xls") 'wsExcel correspond à la première feuille du fichier Set wsExcel = wbExcel.Worksheets(1) ' ' code divers ' wbExcel.save wbExcel.Close appExcel.Quit Set wsExcel = Nothing Set wbExcel = Nothing Set appExcel = Nothing
Et ce code me génère des processus en mémoire qu'il faut tuer en fermant l'application et en plus il faut référencer Excel dans l'appli. Hors développement sur Excel 2003 et utilisation sur des postes utilisant Excel 2000 -> gros BUG
J'en suis venu à essayer :
'Déclaration des variables Dim appExcel As Object Dim wbExcel As Object Dim wsExcel As Object Set appExcel = CreateObject("Excel.application") Set wbExcel = appExcel.Workbooks.Open("C:\MonFichierExcel.xls") Set wsExcel = wbExcel.ActiveSheet ' ' code divers ' wbExcel.save wbExcel.Close appExcel.Quit Set wsExcel = Nothing Set wbExcel = Nothing Set appExcel = Nothing
Notez la différence dans la déclaration des variables ; cela a résolu mes deux gros problèmes.
Cependant, il faut tenir compte que comme Excel n'est pas référencé, la syntaxe du code Excel sous vb6 doit être maitrisé (on perd l'intuitivité de la programmation). Il faut à tout moment rappeler les objects créés pour faire fonctionner le code; je m'explique :
Avec le référencement d'Excel il suffit d'écrire:
Sheets(2).Range("A1").value = "" 'pour remplir une cellule
Sans le référencement vous serez obligé d'écrire :
wbExcel.Sheets(2).Range("A1").value = ""
Je pense que ce tutoriel servira à un bon nombre de programmeur débutant comme moi.