Xiotos
Messages postés34Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention19 juillet 2010
-
1 sept. 2006 à 14:26
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 2012
-
11 oct. 2006 à 14:50
Bonjour à tous,
voilà mon problème, Je développe une application où l'utlisateur
sélectionnera un classeur excel avec une vingtaine de feuille contenant
des chiffres. Le programme ouvre le fichier en caché ( Dans mon appli,
j'ai mis appExcel.visible = false), lit les feuilles et insere dans la
BDD. Ce qui se passe très bien mais met un peu de temps(environ 6000
chiffre à lire). Lors de test, pour patienter, je voulus ouvrir une
autre feuille excel, Hors le fichier excel qui est lu apparaît.
Quelqu'un connaît il le moyen que celui ci reste caché?
pas de problème (surtout pas avec ceux qui reviennent de vacances:) ),
essaies cet exemple, il reprend les parties de ton code liées à l'instanciation d'Excel, et du classeur Import, il déplace la déclaration de l'application en lui ajoutant un hanler d'évènements, et ajoute une déclaration de référence à la fenêtre du classeur.
Il modifie aussi un peu la façon de lier les instances, mais c'est documenté dans le code :
Private WithEvents appExcel As Excel.Application 'avec les évènements
Private wnImport As Excel.Window 'une référence à la fenêtre du classeur
Private
Sub appExcel_WindowActivate(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
'si la fenêtre qui vient de s'activer
'est celle de notre classeur
If Wb.Name = "Import.xls" Then
'récupère une référence à la fenêtre
Set wnImport = Wn
'rend la fenêtre invisible
wnImport.Visible = False
End If
End Sub
Private Sub appExcel_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel As Boolean)
'si le classeur sur le point d'être fermé
'est notre classeur
If Wb.Name = "Import.xls" Then
'rend la fenêtre visible
wnImport.Visible = True
'libère la référence
Set wnImport = Nothing
End If
End Sub
Private Sub Command1_Click()
'Dim appExcel As Excel.Application 'désactivée
Dim I As Integer
Dim J As Integer
Dim wbExcel As Excel.Workbook
Dim wsExcel As Excel.Worksheet
'instancie Excel
Set appExcel = New Excel.Application
'invisible
appExcel.Visible = True
'ouvre le classeur et en garde la référence
Set wbExcel = appExcel.Workbooks.Open(App.Path & "\Import.xls")
'j'ai corrigé ce que tu as écris (qui n'est pas faux)
'mais tant qu'à conserver une référence au classeur
'nouvellement ouvert, autant l'utiliser
'(toi, tu retournais chercher une référence au classeur
'actif dans l'application, ce n'est pas faux, mais
'ce n'est pas correct non plus).
Set wsExcel = wbExcel.Worksheets(1)
'le corps, je n'y touche pas
'...
'...
'on libère la référence à la feuille
Set wsExcel = Nothing
'on ferme le classeur
'en prenant soin de l'argument qui force l'enregistement
wbExcel.Close False 'ou true, c'est selon ton besoin
'ensuite on libère la référence
Set wbExcel = Nothing
'et, ici, je t'invite à vérifier qu'il n'y a pas
'd'autres classeurs ouverts pour quitter (des classeurs
'ouverts par l'utilisateur qui patiente pendant le
'traitement import, mais qui ne veut pas pour autant
'qu'on lui ferme Excel au nez)
If appExcel.Workbooks.Count = 0 Then
'pour pouvoir quitter Excel
appExcel.Quit
End If
'dans tous les cas, on libère la référence
Set appExcel = Nothing
End Sub
voilà, qu'en penses-tu?
à+
rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 1 sept. 2006 à 15:09
Met je comprends pas trop !
Si tu es en vb6, tu fais tes imports de données d'excel, cache le fichier excel, fait appraitre via ton Projet VB6 le ProgressBar sur une Form, une fois terminé, ferme la Form contenant le Progress et fait réapparaitre le fichier excel.
Sinon, pour ouvrir excel, voit avant le CreateObject, d'utiliser un GetObject, histoire de savoir si excel était déjà lancé sur le poste de l'utilisateur.
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Vous n’avez pas trouvé la réponse que vous recherchez ?
Xiotos
Messages postés34Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention19 juillet 2010 1 sept. 2006 à 15:29
Je réexplique :
Dans mon projet :
J'ouvre la feuille excel (elle est caché)
Je fais mon import qui dure environ 2-3 minutes.
Si l'utilisateur lors de l'import, ouvre une feuille excel en
double-cliquant dessus dans l'explorer (N'importe quelle feuille excel
qui lui appartient).Il voit apparaître en plus de sa feuille excel, la
feuille excel que je suis en train d'importer.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 1 sept. 2006 à 15:39
Là je sais pas vraiment. En fait tu accèdes à un fichier déjà ouvert et utilisé.
Peut-être qu'avant ton import, tu devrais copier le fichier dans un répertoire temporaire, tu fais tes imports, et ensuite supprime le fichier !
C'est la seule solution que je vois.
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Si j'ai bien compris, via Automation, VB pilote Excel, pour lui faire ouvrir un classeur, récupérer les données contenues dans différentes feuilles de ce classeur, et les insérer dans une base de données dont nous tairons volontairement la marque (éditeur ToutPetitLogiciel ® peut-être).
Lorsqu'un utilisateur du poste veut utiliser (et c'est ce qu'il fait souvent de mieux, sauf quand il est aussi le développeur) Excel, pour ouvrir un classeur quelconque, Excel se rappelle que, avant de savoir se faire piloter par VB, tout en restant caché (quelle hulilité!), il avait aussi un métier qui consistait (en grande partie) à s'afficher modestement (non maisquelle hulilité, vraiment!),, en compagnie du-dit classeur (comme pour la photo, en somme, ..., photo, graphes, somme,...humour!).
Et comme c'est surtout pour ça qu'on le paie (ce cher Excel), il fait passer son vrai métier en priorité, donc il redevient visible, n'est-ce pas?
Si c'est le cas, il ne reste pas énormément de solution pour palier à cet affront :
1/. Comment faire un avenant au contrat d'Excel pour qu'il cesse, temporairement, son activité dans les relations publiques?
2/. Comment s'adresser directement aux saints d'Excel plutôt qu'à son Dieu, aussi loué soit-il, pour obtenir un miracle?
Si je développe tout de suite ces solutions, il surviendra 2 problèmes :
1/. Je ne suis pas du tout sûr que tu es encore intéressé (vu la date où je me pointe), et je risque fort de ne me parler qu'à (formule difficile, j'en conviens, mais j'aime les zigzags et les Pivot).
2/. Je risque aussi (et là c'est beaucoup plus dramatique) de réduire à peau de chagrin le fantastique suspens que j'ai réussi à développer jusque là, suspens qui, au passage, n'est pas dénudé d'un style hachement aiguisé qui ferait palir la plume de nombreux éditorialistes (VBAistes à leur temps perdu), et d'ainsi donc (encore plus pointu comme formule), délibéremment déstabiliser les, j'en suis sûr, nombreux lecteurs en les privant du 2ème épisode de la saga, maintenant mondialement connue, "Excel, gloire et beauté".
Alors, sont-ce des avatars de solutions? N'en existe-t-il aucune? N'en existe-t-il, Oh, qu'une?
Pour laisser parler rvblogn, tapez [1],
pour laisser encore 93255 Xiotos nous dire, en parlant de VB, des "oui mais"( :) ), tapez [2],
et pour laisser le glaive aussi puissant qu'aiguisé du Mystérieux Chevalier "Provençal, le Gaulois" trancher au plus vif ce débat, tapez [3] (non, tapez pas, c'est lui qui tape).
à bientôt, peut-être!
PS : =93255 Xiotos, ne prends mes betises comme une affaire personnelle, je ne suis pas méchant, je suis juste joueur parfois.
PS2 : Nix, désolé pour la longueur, mais tout ça fait partie des tests de charge demandés par ton hébergeur :)
PS3 : Mais quand vont-ils se décider à sortir la PS3? On attend!
rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Xiotos
Messages postés34Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention19 juillet 2010 21 sept. 2006 à 17:50
Salut rvblog<sup>n,
Si tu as un miracle voire une solution, je suis toujours prenant car
pour l'instant la seule que j'ai trouvé, c'est de mettre un message
disant à l'utilisateur de ne pas se servir d'excel pendant l'import des
données. Donc je decide de taper 1 afin de te laisser parler.
mais là tout de suite, faut qu'j'm'occupe de mon fiston, donc je rajoute un peu de suspens (disons une grosse page de pub), et je reviens d'ici 1 heure ou 2.
PS : et puisqu'on (je) parle de pub, profites-en, si tu as le temps, pour surfer un peu sur le site, y'a des endroits excellents (je te conseille les menus livres, divers [livre d'or] et téléchargements, et bien sûr les forums:) )
ad'taleur
rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
je savais bien que tu étais encore dans l'attente (en camping), c'est un problème simple, et tout le monde ne se bagarre pas pour le résoudre. J'ai déjà rencontré ces problèmes, mais je n'ai pas de solution toute faite.
Par contre, je suis du genre engagé (t'as qu'à voir mes anciens messages), et je prends engagement, ici, à faire le maximum pour trouver une solution avec toi .
J'invite aussi n'importe qui, qui lira le fil de ce topic, à apporter de l'eau au moulin (voire même le moulin, s'il l'a).
il me faut, pour être efficace, quelques informations :
- ta version d'Excel - confirmation du codage sous VB6 - un échantillon de la façon dont tu instancies Excel (déclaration de variables, création de l'objet, manipulation de classeurs, et récupération des données), j'ai bien dit échantillon, pas tout.
à+
rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
je veux bien m'engager, mais l'engagement est réciproque! Fini les belles phrases (les miennes), il faut du sérieux, et ça commence là :
il me faut, pour être efficace, quelques informations :
- ta version d'Excel - confirmation du codage sous VB6 - un échantillon de la façon dont tu instancies Excel (déclaration de variables, création de l'objet, manipulation de classeurs, et récupération des données), j'ai bien dit échantillon, pas tout.
à+
rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Xiotos
Messages postés34Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention19 juillet 2010 11 oct. 2006 à 14:41
Salut rvblog<sup>n,
J'ai essayé ton code et
là, un miracle c'est produit, ma page n'apparait plus lors de
l'ouverture d'excel. Je te remercie, oh toi, grand seigneur de VB6 et
serai toujours la pour toi afin de taper 1 et te laisser parler.