Temps d'ouverture

djam21 Messages postés 11 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 5 juin 2007 - 31 mai 2007 à 14:00
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 - 31 mai 2007 à 16:55
Hello!

J'expose mon problème. Je fais une application en ce moment. Au lancement de celle-ci, je vais lire des fichiers excel pour en récupérer des infos. En phase de test, je n'utilise que 3 fichiers, et le temps d'execution s'approche des 10s. En pratique, elle devrait avoir à gérer une 30aine de fichiers à chaque lancement. Si je compte bien, cà fait 100s... Trop long pour moi, et pour les utilisateurs...
J'ai trouvé que ce pb de temps était dû au temps d'ouverture d'un fichier:

      DocExcel.Workbooks.Open FileName:=nomXLS, Editable:=False

Quelqu'un a-t-il une solution pour augmenter la vitesse d'ouverture???
Est-ce qu'il est possible de l'ouvrir autrement?

Merci. Djam!

19 réponses

cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 14
31 mai 2007 à 14:03
Salut,

Ouvre des fichiers vide....lol..

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 14
31 mai 2007 à 14:05
Re,

Bon, après la boutade, tu es bien sous VB6 et non VBA ?

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
31 mai 2007 à 14:13
1ère question : quelle est la taille des fichiers que tu ouvres ?
2ème question : quelles instructions exécutent-ils à l'ouverture ? Des calculs ?
Réponds déjà à celà, ce sera bien...
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
31 mai 2007 à 14:15
salut,
la boutade n'est pas si mauvaise....
charger excel (appli vide) masqué au chargement de l'appli, et y charger ton classeur quand besoin (rendre l'appli visible ^^)

c'est pas le document qui est long mais bien excel donc...
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0

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

Posez votre question
djam21 Messages postés 11 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 5 juin 2007
31 mai 2007 à 14:29
Quelle réactivité!!!! Je suis impressionné! ;-)

Je suis sous VB6.
Les fichiers font environ 200ko!
En fait, c'est un format type, qui est rempli par d'autres personnes. Elles me les renvoient par mail, je les stocke. Et l'appli vient en faire le traitement. Elle récupère des valeurs dans des cases prédeterminées.

Voilà!
0
djam21 Messages postés 11 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 5 juin 2007
31 mai 2007 à 14:44
Donc ça devrait faire 10s quelque soit le nb de fichiers???? Je teste...
0
djam21 Messages postés 11 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 5 juin 2007
31 mai 2007 à 14:50
48 fichiers! 2 min 16 s... Pffff
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
31 mai 2007 à 14:56
Et si tu ouvres tes 40 fichiers Exel sans passer par VB6, combien de temps ça met donc ?
Mesure !
VB6 n'a pas grand chose  à voir dans cette affaire !
0
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 14
31 mai 2007 à 14:58
Salut,

Alors essaye cela  via une focntion :

Utilisation de la fonction :
OpenXls "C:\toto.Xls"

Public Function OpenXls(MyFichierExc As String)


     ' Variable object
      Dim ApExcel As Object
    
     ' Définition de l'object
       Set ApExcel = CreateObject("excel.application")
      
     ' True pour Excel visible et false pour le mettre en arrière plan
       ApExcel.Visible = False
       
     ' Evite les erreurs de traitement
       ApExcel.DisplayAlerts = False
      
     ' Ouvre le fichier
       ApExcel.Workbooks.Open  MyFichierExc
      
     ' Libération des ressources
       Set ApExcel = Nothing




End Function


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
0
djam21 Messages postés 11 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 5 juin 2007
31 mai 2007 à 15:09
Déjà fait:

ModuleXLS.ControleXLS (Serveur & SourceXLSPath & nomXLS)

Y a t il une fonction qui permet de sauvegarder un fichier XLS en TXT (séparateur tabulation) sans ouvrir le fichier source???
0
djam21 Messages postés 11 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 5 juin 2007
31 mai 2007 à 15:10
C'est une possibilité qui me permettrait d'aller beaucoup plus vite...
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
31 mai 2007 à 15:17
Exploreur
-> NON. créer UNE appli excel cachée, et la réutiliser...
pas la créer pour chaque fichier
(revoir page précédente)

djam21 -> CSV = TXT
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 14
31 mai 2007 à 15:18
Salut,

Regarde cette source

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
djam21 Messages postés 11 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 5 juin 2007
31 mai 2007 à 15:40
Oui mais dans tout les cas je suis obligé de l'ouvrir, et c'est ça le pb!!!
Merci pour le lien et votre aides, je vais regarder çà!
0
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 14
31 mai 2007 à 16:18
Salut,

Donc si bien suivi PCPT, on peux faire ainsi :

Option Explicit


' Variable object
  Dim ApExcel As Object


Private Sub Command1_Click()
      
       ApExcel.Workbooks.Open "C:\Tonfichier1.xls" ' Fichier1
       ApExcel.Workbooks.Open "C:\TonFichier2.xls" ' fichier2
      
       ' Au besoin faire une boulce sur les fichiers
      
      ' Passe a True pour Excel Visible
       ApExcel.Visible = True
      
End Sub


Private Sub Command2_Click()
    
     ' Libération des ressources
       Set ApExcel = Nothing


End Sub


Private Sub Form_Load()
     ' Définition de l'object
       Set ApExcel = CreateObject("excel.application")
      
     ' True pour Excel visible et false pour le mettre en arrière plan
       ApExcel.Visible = False
      
     ' Evite les erreurs de traitement
       ApExcel.DisplayAlerts = False
End Sub


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
0
djam21 Messages postés 11 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 5 juin 2007
31 mai 2007 à 16:31
Voilà mon code:

Public Sub LectureXLS()
Dim nomXLS As String


nomXLS = Dir(ServeurQCE & SourceXLSPath)
indiceRapport = -1
Set DocExcel = CreateObject("Excel.Application")
DocExcel.Visible = False ' Pas visible
DocExcel.DisplayAlerts = False ' Message XLS désactivé


While nomXLS <> ""
    ModuleXLS.ControleXLS (ServeurQCE & SourceXLSPath & nomXLS)
    nomXLS = Dir()
Wend


DocExcel.Application.Quit
Set DocExcel = Nothing
End Sub

Le Sub secondaire:

Public Sub ControleXLS(nomXLS As String)
Dim NouveaunomXLS As String
Dim incomplet, mauvais, incoherent As Boolean
Dim raison As String
Dim Somme, i As Integer


incomplet = False
mauvais = False
incoherent = False
Somme = 0
raison = ""


' Ouverture du fichier
DocExcel.Workbooks.Open FileName:=nomXLS, Editable:=False ' temps de démarrage >> 0


CodeSupplier = DocExcel.Range("F6").Text
If InStr(CodeSupplier, "-") Then
    CodeSupplier = Replace(CodeSupplier, "-", "")
End If
If Len(CodeSupplier) <> 5 Then
    incomplet = True
    raison = "code supplier"
End If


CodePart = DocExcel.Range("F8").Text
If InStr(CodePart, "-") Then
    CodePart = Replace(CodePart, "-", "")
End If
If (Len(CodePart) < 10) Or (Len(CodePart) > 11) Then
    incomplet = True
    If raison = "" Then
        raison = "part code"
    Else
        raison = raison & "-part code"
    End If
End If


DatePER = DocExcel.Range("F16").Text
If Not (DatePER Like "##-####") Then
    incomplet = True
    If raison = "" Then
        raison = "date"
    Else
        raison = raison & "-date"
    End If
End If


StatusPER = DocExcel.Range("N5").Text
If StatusPER = "X" Then
    mauvais = True
End If


TotalItem = DocExcel.Range("P12").Text
PlanItem = DocExcel.Range("Q12").Text
OItem = DocExcel.Range("R12").Text
XItem = DocExcel.Range("S12").Text
UnderItem = DocExcel.Range("T12").Text
NotEvalItem = DocExcel.Range("U12").Text


Somme = CInt(OItem) + CInt(XItem) + CInt(UnderItem) + CInt(NotEvalItem)
If Somme <> CInt(TotalItem) Then
    incoherent = True
End If


NouveaunomXLS = ServeurQCE & ArchivePath & CodeSupplier & "_" & CodePart & "_" & DatePER & ".XLS"


' Archivage si OK
DocExcel.ActiveWorkbook.SaveAs FileName:=NouveaunomXLS, _
FileFormat:=17, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False


DocExcel.ActiveWorkbook.Close


indiceRapport = indiceRapport + 1
ReDim Preserve Rapport(1 To 6, indiceRapport)


For i = 1 To 7
    Select Case i        Case i 1: Rapport(i, indiceRapport) CodeSupplier        Case i 2: Rapport(i, indiceRapport) CodePart        Case i 3: Rapport(i, indiceRapport) DatePER
        Case i = 4:
                    If (incomplet = True) Then
                        Rapport(i, indiceRapport) = raison
                    Else: Rapport(i, indiceRapport) = "O"
                    End If
        Case i = 5:
                    If (mauvais = True) Then
                        Rapport(i, indiceRapport) = "X"
                    Else: Rapport(i, indiceRapport) = "O"
                    End If
        Case i = 6:
                    If (incoherent = True) Then
                        Rapport(i, indiceRapport) = "X"
                    Else: Rapport(i, indiceRapport) = "O"
                    End If
    End Select
Next


End Sub
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
31 mai 2007 à 16:32
manque la fermeture du doc mais à première vue oui

maintenant si le format n'est pas capital, on peut convertir tes XLS en CVS, accessible comme tout doc TXT (donc plus besoin d'excel)

++
0
djam21 Messages postés 11 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 5 juin 2007
31 mai 2007 à 16:43
Ca m'irait parfaitement. Mais si je fais juste un "renommage", ca marchera pas!!!

Sans l'ouvrir??? Et donc les inconvénients en terme de temps??? Racontes!!! ;-)

En utilisant "DocExcel.ActiveWorkbook.SaveAs", il y a un paramètre qui s'appelle FileFormat. Là, il est égale à 17.
Tu sais où je pourrais avoir les autres codes et leurs significations?
Ca ne résoud en rien le problème (ouverture nécessaire), mais c'est juste pour info.

Merci.
0
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 14
31 mai 2007 à 16:55
Re,

Regarde ce lien

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0