HELP => VB6 / Excel : Déploiement & Compatibilité !!!!

LibiMarion Messages postés 13 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 10 novembre 2005 - 7 nov. 2005 à 22:20
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 10 nov. 2005 à 17:39
INTRODUCTION :
---------------------





Salut à tous,





je suis en charge de maintenir un executable Visual Basic (developpé sous VB 6) qui pilote des classeurs Excel via la Microsoft Excel Object Library 8.0 (excel 97). Celui-ci utilise simplement des fichiers .txt comme data d'entrée et l'executable parse celui ci et met en forme les diverses feuilles d'excel résultante et insere les données du fichier (graphique compris)... jusque là tout va bien.





J'avais déjà rencontré des problèmes de compatibilité entre les diverses versions d'Excel avec un autre executable du même genre (son code sert d'ailleurs de base sur le nouvel executable) et celà venait de la version de l'OLB d'EXCEL utilisé lors de la compilation (onglet "references" dans VB6). J'avais donc compilé en version EXCEL8 pour "assurer" la compatibilité ascendante vers les autres versions d'office et ca fonctionnait pour cet executable.... mais pas pour le nouveau !!! Je n'arrive pas a faire fonctionner mon executable (compilé avec Excel8) sous excel 97 / wind XP sp2 ou encore excel 2000 / win 2000... Par contre avec XP SP2 et office 2000 ou encore 2003 ca marche !!!!






MA QUESTION :
-------------------





Comment créer un executable (compilé sous VB6) qui est capable de piloter toutes les versions d'EXCEL et qui ne soit pas dépendant de la version de Windows.





Les contraintes de compatibilité : toutes les versions d'EXCEL (depuis 97 à aujourd'hui)
tous les windows (depuis 98 à maintenant y compris NT)





J'ai bien utilisé " l'assistant d'empaquetage et déploiement " fourni avec VB6 mais rien n'y fait ... CA NE MARCHE PAS !!!





Avez vous une solution concrete à me donner ?





Je ne sais plus quoi faire ET je désepere !!





Merci d'avance pour vos réponses.

LibiMarion

11 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 nov. 2005 à 12:04
salut,
le meilleur moyen de ne jamais être emmer*** par les versions est de ne pas appeler leurs contrôles correpondant.

c'est plus contraignant, souvent plus de lignes à taper, etc... mais çà permet, la plupart du temp, beaucoup plus de libertés!

exemple, déclarer la variable en objet, et l'instancier en application
Set ExlObj = CreateObject("Excel.Application")

pas besoin de référencer d'objet excel. j'ai toujours fait comme çà, il y a sans doute d'autres manières telles que tester la version et faire le code pour chaque (), mais celle-ci me semble une des meilleures.

PCPT [AFCK]
0
LibiMarion Messages postés 13 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 10 novembre 2005
8 nov. 2005 à 14:31
Un apercu rapide de mon programme (920 lignes, je tronque bien sur et tu remarquera que j'avais déjà fait comme tu le pense) :

Public MyExcel As Excel.Application
Public MyWorkbook As Excel.Workbook
Public MySheet_Plg As Excel.Worksheet
Public MyRange As Excel.Range

Set MyExcel = CreateObject("Excel.Application")


'on crée un nouveau classeur
Set MyWorkbook = MyExcel.Workbooks.Add


'on efface les feuilles excel au cas où
For i = 1 To MyWorkbook.Sheets.Count - 1
MyExcel.DisplayAlerts = False
MyExcel.Sheets(i).Delete
MyExcel.DisplayAlerts = True
Next i

'on donne un nom à la feuille
MyWorkbook.Sheets(1).Name = recuperer_traduction(fichier_trad, 5)
Set MySheet_Plg = MyWorkbook.Worksheets(1)

........

' Mise en page
Worksheets("Planning").Cells(2, 1).Value = recuperer_traduction(fichier_trad, 1)
MySheet_Plg.Columns(1).ColumnWidth = 35
MySheet_Plg.Columns(2).ColumnWidth = 7.57
Range(Cells(4, 1), Cells(nbligne, 1)).HorizontalAlignment = xlRight
Range(Cells(1, 1), Cells(3, 1)).HorizontalAlignment = xlLeft
MySheet_Plg.Cells(2, 1).Font.Bold = True
Worksheets("Planning").Cells(1, 2).Value = nom_sem(mindate)
MySheet_Plg.Cells(1, 2).HorizontalAlignment = xlCenter
Worksheets("Planning").Cells(2, 2).Value = mindate
Range(Cells(2, 2), Cells(2, 2)).Style.IncludeNumber = True
Range(Cells(2, 2), Cells(2, 2)).NumberFormat = "dd-mmm"

......

'on sauvegarde
On Error Resume Next
MyExcel.Workbooks.Item(1).SaveAs (fich3)
If Err.Number = 1004 Then
Call attribuer_titre(fich3)
Else
Call Class_Terminate
End If

MyExcel.WindowState = xlMaximized

'on rend la feuille visible
MyExcel.Visible = True

.....

Il faut absolument que je trouve une alternative. Ce matin après Update d'office 97, le programme semble fonctionner sous Win XP SP2 / Office 97... En revanche, il ne marche pas sur un Win 2000 / Office 2000 (certes non à jour)...

Une solution générique autre que celle que tu m'a donné ? De quoi peut venir ce porblème sur l'autre poste en 2000... alors que le même exec avec les mêmes data d'entrée fonctionne en office 97 ??????

Erreur 9 : Indice en dehors de la plage : Connerie ouai jamais eu ce message sur l'autre poste !!!
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 nov. 2005 à 15:31
indice peut être celui de la colonne, qui peut être indexée à 0 ou 1 à la place de .... l'inverse selon la version d'excel
0
LibiMarion Messages postés 13 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 10 novembre 2005
8 nov. 2005 à 16:32
Dites moi que c'est pas vrai !!!! Tu pense réellement que d'une version à l'autre l'indice des colonnes peut varier ? Dans ce cas je fais koi moi, je fais un CASE sur la version et je pars de 0 ou 1 selon la version ? Faudrai t il encore savoir quelle version comme à 0 et l'autre à 1 !!!

Sinon je sais récuperer dans les registres de windows la version d'Excel qui est employée sur le poste, je peut donc tester mais faut savoir koi avant !

Purée mais Bilou il a craqué avec ces divergences dans les versions d'office !!!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 nov. 2005 à 16:43
j'ai dit peut-être, c'est à tester (ou à se renseigner sur "copain google").
~peut-être~ aussi peut-on récupérer le libellé de la colonne au lieu de l'indice.....
ou alors, si excel n'est pas directement en jeu, d'après ton extrait de code, l'erreur pourrait aussi venir de ta boucle for
(genre MyExcel.Sheets(i) pour valeur de i n'existant pas), soit même de ta fonction recuperer_traduction, 5 étant peut-être un indice de tableau (donc variable) n'existant pas....
PCPT [AFCK]
0
LibiMarion Messages postés 13 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 10 novembre 2005
8 nov. 2005 à 17:03
Ah ouai aussi pas mal le truc de la définition de la mise en page qui marche pas si tu n'a aucune imprimante installée mon code est le suivant :

' Mise en page
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.393700787401575)
.RightMargin = Application.InchesToPoints(0.393700787401575)
.TopMargin = Application.InchesToPoints(0.590551181102362)
.BottomMargin = Application.InchesToPoints(0.590551181102362)
.HeaderMargin = Application.InchesToPoints(0.511811023622047)
.FooterMargin = Application.InchesToPoints(0.511811023622047)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With

Youpi faudrait en plus gérer ce genre de problème COOL !! La je suis aux anges .... merci Crosoft. Tu connais le moyen via VB de tester si au moins une imprimante est installée ?

Et sinon pour la fonction recuperer_traduction c'est des indices connu pour récuperer le contenu approprié de l'entete de colonnes (traduit dans la langues du user).

Je vais voir à tête reposée la gestion des indices dans ce programme (qui n'est pas le mien je le rappelle, sans ca tout serait verrouillé ! Point trop n'en faut disais l'autre).

Si tu as une soluc pour l'histoire de l'imprimante afin d'eviter l'erreur : la methode de l'objet pagesetup à echoué....
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 nov. 2005 à 17:40
re,
proprement, pour l'imprimante, normalement tu peux les compter ainsi :


Option Explicit
'
'
Private Sub Form_Load()
Dim Cpt As Long, ObjPrint As Printer
Cpt = 0
For Each ObjPrint In Printers
Cpt = Cpt + 1
Next

If Cpt > 0 Then
'ta vraie fonction
MsgBox "imprimante trouvée!!! ", 32
End If
'sous entendu ici \/
'ELSE
' MSGBOX "pas de bol !!!",32
'ENDIF

Unload Me '<- pour l'exemple^^
End Sub


<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>

bon courage
PCPT [AFCK]
0
LibiMarion Messages postés 13 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 10 novembre 2005
9 nov. 2005 à 10:33
Merci pour ton bout de code, je passe désormais le problème lié à l'objet pagesetup : Nickel et je préviens l'utilisateur par la même occasion => 2 en 1...

Sinon j'ai recrée hier soir depuis mon poste (Win XP SP2 + Office 97 SR2 ) mon exe VB et retester sur le poste en win 2000 et office 2000 : ca à l'air de fonctionner... enfin !

Autre chose, je cherche un moyen pour verifier l'ensemble des compatibilités de l'exe pour :

les OS : Windows 98, 2000, XP (avec et sans SP)
les offices : 97 à 2003

sur un même poste. J'ai entendu parler d'un logiciel d'emulation PC comme VMWARE... qui pourrait (au conditionnel) me permettre d'effectuer l'ensemble des tests et valider l'ensemble des configurations ....

Tu pense que c'est le meilleur moyen ou il y une autre possibilité ?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
9 nov. 2005 à 10:44
si tu avais fait toi-même l'émulateur, tu connaîtrais (au conditionnel également) son fonctionnement.
émuler, c'est bien beau, mais est-ce que les résultats seraient réellement fiables....
perso je n'aurais pas confiance. les Beta, çà sert à çà.
tu ne peux pas t'amuser à créer toutes les possibilités de configs.
tu peux dégrossir en fournissant l'exe + base sur VbF (topic testez svp...... DL ftp ici), et pour le reste, c'est selon les retours de tes clients.
j'vois çà comme çà du moins
PCPT [AFCK]
0
LibiMarion Messages postés 13 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 10 novembre 2005
10 nov. 2005 à 17:31
Sans perdre mon courage, j'ai installé VMWARE workstation 4.5 et crée pour le moment 2 configs de mon pc sous WIN XP et Win 2000 Pro. Chacune de ces bases à été décliné pour le moment en office 2000 et 2003, soit 4 configs différentes.

En faisant mes tests j'ai rencontré l'erreur suivante : VB6FR.dll introuvable ! Ok, je cherche cette dll sur google et je tombe sur ca : http://www.vbfrance.com/codes/SUPPRIMER-LES-REFERENCES-AUX-DLL-VB6FR-VB5FR/33592.aspx qui permet d'appeller directement le runtime Visual Basic 6 () natif de l'OS sans passer par cette DLL (installée avec MS Visual Basic 6 et qui au passage ne fait qu'appeller le runtime VB6 et ressortir les messages d'erreurs lié à l'execution en francais)...

Je passe mon premier et deuxieme programme dans cette petite moulinette, et en avant gimgamp !!! Et bien sûr ca fonctionne nickel (faudra quand que je teste sur windows server 2003 : voir cette breve http://support.microsoft.com/default.aspx?scid=kb;en-us;823746 car la version de Msvbvm60.dll à changé => J'ai donc téléchargé le runtime VB6 au cas où mon programme explose sur une configuration en Win 2003.

Voilà, j'ai appris pas mal de chose en 1 semaine sur VB, les références et les problèmes de compatibilités entre OS... et je m'en sors plutôt bien de ce côté là !!!

Merci à toi à tout cas pour tes precieux conseils et tes morceaux de codes qui me permettent de contourner certains soucis... Eh eh mon chef à eu l'ennui ce matin pour l'histoire de pas d'imprimante sur le PC : je lui dis alors t'inquiete pas je gère j'ai la soluc ! Illico presto exe remplacé, problème contourné, fichier excel généré et mon chef enjoué

A bientot pour de futurs demandes de conseils
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 nov. 2005 à 17:39
alors tout va bien dans le meilleur des mondes
attention!!! la VM (vb6.....dll) sera fournie lors de ton Package (à faire bien sûr).
donc ne pas confondre une config neuve (donc sans runtime puisque pas VB) et la supression des références pour la compatibilités des projets VB5/VB6
bonne continuation @+
PCPT [AFCK]
0
Rejoignez-nous