Sauvegarder un classeur excel depuis VB6

jctgt Messages postés 57 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 27 novembre 2023 - Modifié par ucfoutu le 5/01/2015 à 07:59
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 5 janv. 2015 à 07:25
Bonjour,

J'ai et je fais:
Dim oXLApp As Excel.Application, XLBook As Excel.Workbook, XLSheet As Excel.Worksheet, ListIndex As Integer
Set oXLApp = New Excel.Application 'Create a new instance of Excel
Set XLBook = oXLApp.Workbooks.Open("C:\Billard\Billard8.xlsx") 'Open an existing workbook
oXLApp.Visible = True

J'écris dessus avec VB6 et fais "XLBook.Save"

J'ai une erreur qui me demande si je veux le remplacer parce qu'il existe déjà.

Si je dis "non" j'ai une erreur à "XLBook.Save" et le programme doit se fermer.

Si je le sauve et que j'écris dessus, je le sauve à nouveau sans qu'il me demande de le remplacer.

Je peux voir que tout y est bien inscrit sur excel.

Avant de fermer VB6, je fais "XLBook.Close"

Je vais directement sur le fichier excel en question, je double clic dessus et j'ai le message qu'il est en lecture seulement,

Je ne peux rien faire avec. Ni le lire ni le fermer. Je dois redémarrer pour le faire disparaitre.

Quoi faire?

Jean-Claude

3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 14/12/2014 à 22:59
Le code montré (nous ne voyons pas le reste) ne devrait générer aucune erreur de cette nature, si toutes les conditions suivantes sont réunies :
1) - la référence cochée à Excel correspond bien à la version dans laquelle a été écrit le classeur ouvert
2) - une instance de ce classeur n'est pas déjà ouverte !
3) - le classeur en cause (ou l'une de ses feuilles) n'est pas protégé

En ce qui concerne le 1 : je donnerais personnellement la préférence à une liaison tardive, plutôt qu'à une référence cochée à Excel. Cela t'affranchirait d'une erreur de version cochée.
Ouvre ton aide VB6 sur le mot CreateObject
Je ne créerais par ailleurs un object Excel que si Excel n'est pas déjà ouvert par ailleurs. Ouvre à ce sujet ton aide VB6 sur le mot GetOIbject

Par ailleurs (mais c'est là encore autre chose) : ne te contente pas de fermer ensuite le classeur ouvert. Quitte également l'application (oXLApp.quit) et libère la mémoire en détruisant l'objet créé par ton Set ( Set oXLApp = nothing)



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
jctgt Messages postés 57 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 27 novembre 2023
5 janv. 2015 à 03:13
Bonjour Jacques,

J'ai enfin résolu mon problème qui en était un de VisualBasic.

J'ai découvert cela quand j'avais une erreur à txtCommande.setfocus, alors que ce txtCommande devait être visible et enabled.
Après vérification, txtCommande.visible était false. J'ai donc ajouté txtCommade.visible = true et txtCommade.enabled = true avant avant txtCommande.setfocus mais visible était toujours false. Le logiciel ne répondait pas à la commande.

C'est ce qui m'a conduit à faire des recherches pour mettre VB6 compatible avec Windows7 64 que j'ai comme OS

VisualBasic est sorti en 1998. J'avais VB6 SP3. J'ai découvert que VB6 SP6 existait étant une mise à jour pour mon ordinateur.

J'e l'ai désinstallé complètement pour le réinstaller suivi de l'installation de SP6. (Sans installer SP3, c'est important selon mon expérience)

Voilà, çà fonctionne très bien.

J'apprécie beaucoup ton idée de donner la préférence à une liaison tardive, plutôt qu'à une référence cochée à Excel.
Je suis allé sur le site de MNS comme tu me le propose (Je n'ai pas l'aide d'installé sur mon DD)

J'ai ôté la Référence à Excel et dans la section General j'ai remplacé :
Dim oXLApp As Excel.Application, XLBook As Excel.Workbook, XLSheet As Excel.Worksheet

Par:
Dim XLApp As Microsoft.Office.Interop.Excel.Application, XLBook As Microsoft.Office.Interop.Excel.Workbook, XLSheet As Microsoft.Office.Interop.Excel.Worksheet

Au lancement, j'ai l'erreur Compile error: User-defined type not defined, sur XLApp As Microsoft.Office.Interop.Excel.Application,

Si ce n'est pas trop demandé, j'aimerais que tu me guides pour cela, si possible.

Merci beaucoup,

Jean-Claude
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 5/01/2015 à 07:48
Tu as simplement pêché un poisson écrit pour VB.Net et non pour VB6.
Sous VB6 et EN LIAISON TARDIVE (LATE BINGING) ===>>
Dim xlapp As object ' on ne sait pas encore quel objet
Dim xlbook As object ' on ne sait pas encore quel objet

'il faut maintenant créer et définir ces objets
Set xlapp = CreateObject("Excel.Application") 'on utilise la session excel déjà ouverte
Set xlbook = xlapp.Workbooks.Open("c:\blablabla.xls")
etc ...
IMPORTANT : ne pas oublier de libérer la mémoire en détruisant ces objets lorsque l'on n'en a plus besoin (on détruit un objet lobjet par : setl objet = Nothing)

IMPORTANT 2 : il faut savoir éviter de créer un objet (par C reateObject) s'il l'a déjà été (par createobject ou si une instance de l'objet exi_ste déjà... si Excel a été ouvert) . Si tel est le cas, il vaut alors mieux s'y référer en utilisant GetObject.
Il te faut donc bien te familiariser avec ces deux fonctions (CREATEOBJECT et GETOBJECT) pour les utiliser au mieux.
Tu me dis que tu n'as pas installé l'aide VB6 ! ===>>
1) Fais-le donc le plus vite possible, car il n'est pas raisonnablement envisageable de développer valablement sans cette aide que consultent quasi systématiquement même les plus adroits des développeurs.
2) dans l'attente de cette installation de cette aide : consulte donc ton aide VBA/Excel. Ce qui y est dit aux rubriques CreateObject et GetObject est exactement la même chose que ce que dit l'aide VB6.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Rejoignez-nous