Manipuler des fichiers excel sous vb6 sans référencer excel et sans laisser de processus dans le gestionnaire des taches

Description

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.

AVANT

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 :

APRES

'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.

Ce document intitulé « Manipuler des fichiers excel sous vb6 sans référencer excel et sans laisser de processus dans le gestionnaire des taches » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous