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 :

Macro extrêmement lente


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Par défaut Macro extrêmement lente
    J'ai une macro qui permet à l'utilisateur de charger plusieurs données sur différentes feuilles excel afin d'effectuer des recherches sur les différents fichiers chargés.
    cependant ces fichiers excel comportent souvent des centaines de millier de lignes et rendent la macro lente et même très très lente.

    j'aimerais savoir s'il est possible de rendre ma macro plus rapide, et si oui comment.

    Merci de bien vouloir me venir en aide.

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    Private Sub Workbook_open()
     
        'Chargement du récapitulatif
        ChargeRecap ("C:\Users\UA-Vie\Desktop\DOC PROD\Recap KAMAGATE\BICICI.xlsx")
        ChargeRecap ("C:\Users\UA-Vie\Desktop\DOC PROD\Recap KAMAGATE\ALIOS BIA acceptés.xlsx")
        ChargeRecap ("C:\Users\UA-Vie\Desktop\DOC PROD\Recap KAMAGATE\Adhésion globale (PA et PU).xlsx")
     
        'bordure de cellules
        Range("A1").CurrentRegion.Cells.Borders.Weight = xlThin
     
    End Sub
    Sub ChargeRecap(ByVal chemin As String)
     
        Dim ClassSource As Object
        Dim DerLine As Long
        Dim DerLineRecap As Long
        Dim DerColumn As Integer
        Dim i As Long
        Dim j As Integer
        Dim table() As Variant
     
        'Application.ScreenUpdating = False
     
        'choisir classeur source
        Set ClassSource = GetObject(chemin)
        'N° de la dernière ligne non vide de la colonne A ClassSource1
        DerLine = ClassSource.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row - 1
        'N° de la dernière colonne non vide de la ligne 1 ClassSource1
        DerColumn = ClassSource.Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column
     
        'Redimenssionner le tableau
        ReDim table(1 To DerLine, 1 To DerColumn)
     
        'Ranger les informations du premier classeur dans le tableau
        For i = 1 To DerLine
            For j = 1 To DerColumn
                table(i, j) = ClassSource.Sheets(1).Cells(i + 1, j)
            Next j
        Next i
     
        'Copier le tableau dans le classeur recap
        For i = 1 To DerLine
        DerLineRecap = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row + 1
            For j = 1 To DerColumn
                Sheets(1).Cells(DerLineRecap, j) = table(i, j)
            Next j
        Next i
         Set ClassSource = Nothing
    End Sub
     
    Sub Total()
     
      Dim Ligne As Long
      Dim i As Long
      Dim tot As Double
     
      Ligne = ThisWorkbook.Sheets(1).Range("B" & Rows.Count).End(xlUp).Row
      tot = 0
      For i = 2 To Ligne
        tot = tot + Range("B" & i).Value
      Next i
      Range("A" & Ligne + 1).Value = "TOTAL"
      Range("B" & Ligne + 1).Value = tot
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Quand les données sont trop volumineuses, ma première idée est d'utiliser les variables et de copier les données dans ces variables. Il y a des restrictions (volume de données trop important ou utilisation de formules par exemple) mais en général, le gain de temps est considérable.

    Oups, c'est ce que tu as l'air de faire.

    Mais il faut les copier d'un coup. Regarde un exemple ici :

    http://www.developpez.net/forums/d15...ichiers-excel/

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sauf si je n'ai pas compris la lecture du code publié, s'il s'agit de copier tout simplement une liste de données d'une feuille d'un autre classeur vers une feuille d'un classeur cible, il me semble qu'un simple Copier/Coller doit suffire ? (Copier la source Coller vers la liste cible à partir de la dernière ligne +1)

    Si ce que j'ai compris est correct, une solution dans cette contribution Regrouper plusieurs feuilles sur une autre. (2003-2010)

    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Par défaut
    Merci pour ces pistes, je ferai des essaies et je vous dirai le résultat.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    si les feuilles porte le même nom!
    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
    Private Sub Workbook_open()
     
        'Chargement du récapitulatif
        ChargeRecap ("C:\Users\UA-Vie\Desktop\DOC PROD\Recap KAMAGATE\BICICI.xlsx")
        ChargeRecap ("C:\Users\UA-Vie\Desktop\DOC PROD\Recap KAMAGATE\ALIOS BIA acceptés.xlsx")
        ChargeRecap ("C:\Users\UA-Vie\Desktop\DOC PROD\Recap KAMAGATE\Adhésion globale (PA et PU).xlsx")
     
        'bordure de cellules
        Range("A1").CurrentRegion.Cells.Borders.Weight = xlThin
     
    End Sub
    Sub ChargeRecap(ByVal chemin As String)
    Set Connexion = CreateObject("Adodb.Connection")
    Connexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & chemin & ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""
    Set rs = CreateObject("Adodb.recordset")
    rs.Open "select * from [Feuil1$]", Connexion
    Sheets(1).Range("A" & cells.Rows.Count).End(xlUp).Offset(1).CopyFromRecordset rs
    rs.close
    Connexion.Close
    End Sub

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Par défaut
    J'ai testé ta solution mais je me retrouve avec une erreur : la table externe n'est pas dans le format attendu .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Flex3] Rendering extrêmement lent
    Par Sergejack dans le forum Flex
    Réponses: 6
    Dernier message: 16/04/2010, 12h20
  2. Sélection d'une plage de dates par macro très lente
    Par yvesduc dans le forum QlikView
    Réponses: 1
    Dernier message: 11/03/2010, 15h48
  3. [XL-2007] macros trop lentes (85 onglets)
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 16/04/2009, 21h20
  4. Internet est extrêmement lent
    Par InOCamlWeTrust dans le forum Réseau
    Réponses: 4
    Dernier message: 20/02/2009, 16h19
  5. Hyper-V extrémement lent
    Par c_creatix dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 21/08/2008, 12h34

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