pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009
-
28 juin 2006 à 21:08
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009
-
30 juin 2006 à 21:16
Bonjour,
J'ai un gros problème avec les différentes versions d'Excel. Je m'explique : je programme le tout chez moi, l'exécute et il n'y a aucun problème (Excel est lancé, les données y sont insérées et le fichier enregistré) ; j'ai d'ailleurs pris plusieurs exemples sur ce site pour m'aider.
Le problème, c'est que si j'exécute mon programme sur d'autres ordinateurs qui ont des versions plus anciennes d'Excel, mon programme plante systématiquement sur la commande de sauvegarde (app.SaveAs) et Excel reste en exécution. Pourquoi ?
J'ai, chez moi, la version 2007 Beta 2 d'Office. Sur Excel 2003, ça plante. Je suis ensuite allé sur mon autre Windows XP, équipé d'Office 2003 et ai remis les références pour Office 2003 (Office Excel 11 Object Library). Là, mon exécutable recompilé marche à la fois sur Excel 2003 et 2007. Le problème, c'est que les machines sur lesquelles je veux utiliser mon programme utilisent Excel 2000 !
Je n'ai pas cette version, et surtout je pense qu'il doit bien y avoir une solution à mon problème (je ne suis certainement pas le premier à être dans ce cas).
Donc, je fais appel à votre expérience pour voir si vous pouvez me sortir de ce gros problème.
gplog
Messages postés82Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juillet 20091 29 juin 2006 à 14:28
Salut,
J'ai aussi eu ce genre problème avec les différentes version d'Excel. j'ai contourné le problème en supprimant les référence Excel du projet.
Explication : pour utiliser 'Excel.Application', tu ajoute comme référence à ton projet la version d'Excel qui est installé sur ton poste : 'Microsoft Excel 9.0' pour le Excel 2000, 10.0 pour Excel 2003 ... Et c'est là que ça peut coincer. Une solution consiste à ne pas utiliser directement ces référence grace à la fonction 'CreateObject' .
'Déclaration des variables
Dim appExcel As Object
Dim wbExcel As Object
Dim wsExcel As Object
'Ouverture de l'application
' Ici tu transforme ton objet en Application Excel suivant le poste et la version
Set appExcel = CreateObject("Excel.Application")
' Ensuite le code est le même
appExcel.Workbooks.Add
Set wbExcel = appExcel.ActiveWorkbook
'Récupération de la feuille
Set wsExcel = wbExcel.Sheets.Item(1) wsExcel.Cells(1, 1) "Libellé": wsExcel.Cells(1, 2) "Autre":
wbExcel.SaveAs CommonDialogExportService.FileName
wbExcel.Close 'Fermeture du classeur Excel
appExcel.Quit 'Fermeture de l'application Excel
Set wsExcel = Nothing
Set wbExcel = Nothing
Set appExcel = Nothing
Le problème dans ce cas c'est que cela t'oblige à connaitre les fonctions d'excel mais cela résoud les problèmes de compatibilité de version.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 29 juin 2006 à 07:05
Salut,
Il y a des arguments rajoutés d'une version à l'autre pour les fonctions.
Par exemple, le méthode 'Find', possède un argument (le dernier ou avant dernier) qui existe en sur Excel 2003 mais qui n'est pas pris en compte avec la version 2000.
@++
--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009 29 juin 2006 à 09:00
Salut,
Le problème, c'est que j'utilise des fonctions très basiques : création du fichier, et du classeur ; insertion de données (ex : ws.Cells (1,2) = "bla bla"), puis un .SaveAs nomdufichier.xls, et enfin le close. D'après ce que j'ai pu voir, c'est au SaveAs qu'il plante, je ne sais vraiment pas pourquoi. Saurais-tu comment remédier à ce problème ?
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009 29 juin 2006 à 12:13
Je vais carrément mettre tout mon code, ça sera plus clair ;)
'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")
appExcel.Workbooks.Add
Set wbExcel = appExcel.ActiveWorkbook
'Récupération de la feuille
Set wsExcel = wbExcel.Sheets.Item(1) wsExcel.Cells(1, 1) "Libellé": wsExcel.Cells(1, 2) "Autre":
wbExcel.SaveAs CommonDialogExportService.FileName
wbExcel.Close 'Fermeture du classeur Excel
appExcel.Quit 'Fermeture de l'application Excel
Set wsExcel = Nothing
Set wbExcel = Nothing
Set appExcel = Nothing
Voili voilà, s'il y a un problème dans le code, je suis preneur !