IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Chargés des données dans une spreadsheet


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Chargés des données dans une spreadsheet
    Bonjour ,

    J'importe des données excel dans une spreadsheet et je trouve le temps de chargement extrement long.

    Je n'ai meme pas pu attendre la fin. Le fichier de données fait 55 colonnes sur 30 000 lignes. Si je limite a 50 * 50 le temps est tres axeptable , avec 50*5 000 ca ralenti bcp mais ça va, par contre si je lui balance le fichier entier c'est du délire !

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     
     
    Sub CopieColle(ByVal cheminFichier As String)
    '
    ' CopieColle Macro
    ' Ouvre le fichier de données et exporte les données sur notre spreadsheet (excel)
    '
        Dim NomFichier As String
        Dim nbLig As Long, nbCol As Byte
     
        On Error GoTo restauration
        With Application
            .ReferenceStyle = xlR1C1 ' Affichage des feuilles en mode L1C1
            .DisplayAlerts = False
            .ScreenUpdating = False     ' Gèle l'écran pour accélérer le traitement
            .Interactive = False
        End With
     
        ' Ouvre le fichier de données
        Workbooks.Open FileName:=cheminFichier
     
        nbLig = 1
        Do Until IsEmpty(Cells(nbLig, 1))
            nbLig = nbLig + 1
        Loop
     
        nbCol = 1
        Do Until IsEmpty(Cells(1, nbCol))
            nbCol = nbCol + 1
        Loop
     
        Range(Cells(1, 1), Cells(nbLig - 1, nbCol - 1)).Select
        Selection.Copy
        spreadsheet.excel.Sheets("Données").Activate
        spreadsheet.excel.Cells(1, 1).Select
        spreadsheet.excel.ActiveSheet.Paste
        Application.CutCopyMode = False ' Vide le presse-papier
     
        NomFichier = Replace(Mid$(cheminFichier, InStrRev(cheminFichier, "\")), "\", "")
        Workbooks(NomFichier).Close SaveChanges:=False
     
        spreadsheet.Show
     
    restauration:
        With Application
            .DisplayAlerts = True
            .ScreenUpdating = True   ' Désactive le gelage d'écran
            .Interactive = True
        End With
     
    End Sub

    Une idée ??

    Pour info j'ai du télécharger OWC Spreadsheet 9 (fichier MSOWC.DLL ) et j'ai excel 2000.


    Merci d'avance


    edit : Je viens de me rendre compte à l'aide de spreadsheet.show que ma "feuille_excel" est bien remplie avant l'étape restauration et si je remet cette instruction apres elle est vide

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Ça devrait être plus rapide sans toutes ces boucles et ces sélections/activations. Bien sur, comme je n'ai pas MSOWC.DLL, je ne peux rien tester...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub CopieColle(ByVal cheminFichier As String)
        '
        ' CopieColle Macro
        ' Ouvre le fichier de données et exporte les données sur notre spreadsheet (excel)
        '
        Dim NomFichier As String
     
        ' Ouvre le fichier de données
        Workbooks.Open Filename:=cheminFichier
        ActiveSheet.UsedRange.Copy
        spreadsheet.Excel.Sheets("Données").Cells(1, 1).Paste
        Application.CutCopyMode = False ' Vide le presse-papier
     
        NomFichier = Replace(Mid$(cheminFichier, InStrRev(cheminFichier, "\")), "\", "")
        Workbooks(NomFichier).Close SaveChanges:=False
     
        spreadsheet.Show
    End Sub
    Je ne comprends pas ce que tu veux accomplir avec NomFichier puisque tu fais référence à un autre classeur que celui que tu as ouvert. Mais tu dois avoir une bonne raison...

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Bonjour Singular,

    Et merci pour ta réponse

    Pour tout dire c'est un code que j'ai repris donc j'ai peur de ne pas pouvoir t'expliquer le pourquoi de ce 2eme nom de fichier...

    Sinon j'ai testé ton code et malheureusement le temsp est tres long...Je n'ai encore pas pu attendre jsuqu'a la fin il a fallu que je stop l'appli...

    Je vais abandonner les spreadsheet je crois et trvailler avec une bonne feuille excel

    En tout k merci

Discussions similaires

  1. Récupérer des données dans une page HTML
    Par newdelirium dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2005, 19h18
  2. ajouter des données dans une requête htttp en js
    Par jeromejanson dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/10/2005, 15h34
  3. Réponses: 4
    Dernier message: 19/09/2005, 15h59
  4. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24
  5. Réponses: 2
    Dernier message: 15/06/2005, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo