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 trop lente


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur SI
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur SI
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Par défaut Macro trop lente
    Bonjour,
    J’ai réalisé une macro pour faire de l’analyse de données issues d’un onglet selon certains critères.
    Mon soucis est que cette macro marche, par contre je peux mettre selon les cas jusqu’à 8000 lignes à analyser.
    Par exemple pour 2000 lignes elle va mettre facile 8mn!
    Alors je sais que mon PC est très lent, car je l'ai testée sur un autre et le temps est quand même réduit par 2...
    Mais comme c'est moi qui l'utilise, malheureusement la macro est trop longue à tourner.
    Je prends les infos sous forme de tableau, je pense que cela me permet d’optimiser le temps.
    Mais j’ai l’impression que pas vraiment.
    Je vous mets un bout de mon code qui pour moi est l’endroit lent.
    Si vous avez le temps et la gentillesse d’y jeter un œil ?
    Merci d’avance à vous


    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
    Private Sub RemplissageTab(Feuille, Feuille3, ColonnesMax, TabFeuille, TabFeuille3)
     
    Dim i, j, maxligneFeuille As Integer
     
     
    maxligneFeuille = Worksheets(Feuille).Range("B" & Worksheets(Feuille).Rows.Count).End(xlUp).Row
     
    '''''''''''''''''''''''''''''''''''''''''''''''Définition et remplissage des tableaux à partir des feuilles de départ et d'arrivée
    ReDim TabFeuille(maxligneFeuille - 1 - 3, ColonnesMax - 1 + 3 + 1 + 5) 'le tableau commence à 0, on ajoute 3 colonnes au tableau (indicateur, commentaires, couleur, aide à la progra, pour calcul pourcent ok KO Ko AT et sans commentaire(5))
    ReDim TabFeuille3(maxligneFeuille - 1 - 3, ColonnesMax - 1 + 3 + 1 + 5)
    For i = 0 To UBound(TabFeuille3, 1)
        For j = 0 To UBound(TabFeuille3, 2)
            Set TabFeuille3(i, j) = Worksheets(Feuille3).Cells(4 + i, 1 + j) 'Prend seulement la feuille de données sans la ligne 3 de titres
            Set TabFeuille(i, j) = Worksheets(Feuille).Cells(4 + i, 1 + j) 'Prend seulement la feuille de données sans la ligne 3 de titres
        Next
    Next
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     
     
    End Sub
     
    Private Sub RempliFeuilleArrivee(TabFeuille3, TabFeuille, Feuille3)
     
    Dim i As Integer
    Dim Couleur As String
     
    For i = 0 To UBound(TabFeuille, 1)
     
     
        'Rempli la 2eme feuille des nouvelles donnees d'analyse niveau 1
        For j = 0 To 7 - 1
            TabFeuille3(i, j) = TabFeuille(i, j)
        Next j
        For j = 8 - 1 To 22 - 1
            TabFeuille3(i, j + 2) = TabFeuille(i, j)
        Next j
        For j = 25 - 1 To 30 - 1
            TabFeuille3(i, j) = TabFeuille(i, j)
        Next j
     
        TabFeuille3(i, 8 - 1) = TabFeuille(i, 23 - 1) 'OK KO AT...
        TabFeuille3(i, 9 - 1) = TabFeuille(i, 24 - 1) 'message
     
     
        For j = 0 To UBound(TabFeuille3, 2)
            Worksheets(Feuille3).Cells(3 + 1 + i, 1 + j) = TabFeuille3(i, j)
        Next j    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     
     
    Next i
     
     
    End Sub

  2. #2
    Membre averti
    Homme Profil pro
    Contrôle de gestion
    Inscrit en
    Avril 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Contrôle de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 21
    Par défaut
    Hello,

    essayes d'ajouter ceci après la définition des variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Puis avant le End Sub, tu remets ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    En général c'est ce que je mets sur mes macros quand c'est trop lent, dis moi si ça fonctionne

  3. #3
    Candidat au Club
    Femme Profil pro
    Ingénieur SI
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur SI
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Par défaut
    Merci pour ta réponse!!!
    Malheureusement cest déjà fait dans la macro principale...
    Mais si tu as d'autres pistes je suis désespérément preneuse!!!

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    VBA/Excel te permet de faire une matrice à partir d'une plage de manière très rapide et sans boucles (toujours lentes) :
    Exemple :
    suffira pour obtenir une matrice de trois colonnes et quatre lignes comportant toutes les valeurs de la plage A1:C4
    Attention : la matrice ainsi obtenue est en base 1 et non en base0

  5. #5
    Candidat au Club
    Femme Profil pro
    Ingénieur SI
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur SI
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Par défaut
    Bonsoir, je te remercie, je vais étudier ca demain!!!

Discussions similaires

  1. macro trop lente
    Par ilissnmiden92 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 18/07/2015, 09h55
  2. [XL-2007] Solutions pour macros trop lente
    Par pasterlouis dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/08/2013, 12h04
  3. [XL-2003] macro trop lente
    Par tioch dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/07/2011, 08h48
  4. [XL-2007] Boucles for imbriquées, macro trop lente
    Par Jambonpurée dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/06/2011, 18h25
  5. [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

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