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 :

Comment accélérer une macro excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    ingénieur RAM
    Inscrit en
    Novembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur RAM
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 5
    Par défaut Comment accélérer une macro excel
    Bonjour,

    Je suis novice en VBA et j'aimerai accélérer une macro excel.

    La macro effectue une recherche dans une feuille nommée "DATA_INPUT" et renvoi une information dans une feuille nommée "ANALYSIS". Je me demandais comment on pouvait accélérer la macro suivante:
    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
    Sub Extrait_Valeurs_lignes()
     
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        Dim ligne, i As Long
        Dim niv_prod_label As String
        Dim flag_trouve As Range
        Dim FeuilleData, FeuilleAnalysis As Worksheet
     
        Set FeuilleData = ActiveWorkbook.Worksheets("DATA_INPUT")
        Set FeuilleAnalysis = ActiveWorkbook.Worksheets("ANALYSIS")
     
        ligne = 1
     
        Dim v As Long
     
        Set DeletePlage = FeuilleData.Cells.Find("5 - VALEUR MOYENNE ENTRE 0 ET T", LookAt:=xlWhole, MatchCase:=True)
     
     
        For v = 1 To DeletePlage.Row - 1
        FeuilleData.Cells(v).EntireRow.Delete
     
        Next
     
        Do Until (FeuilleAnalysis.Cells(ligne, 2).Value = "END" Or ligne = 40000)
        niv_prod_label = FeuilleAnalysis.Cells(ligne, 2).Value
        If niv_prod_label = "" Then
        GoTo lignesuivante
        End If
     
        Set flag_trouve = FeuilleData.Cells.Find(FeuilleAnalysis.Cells(ligne, 2).Value, LookAt:=xlWhole, MatchCase:=True)
     
        If flag_trouve Is Nothing Then
        MsgBox "Niveau " & niv_prod_label & " non trouvé dans DATA_INPUT !!"
        FeuilleAnalysis.Cells(ligne, 3).Value = Null
        GoTo lignesuivante
        End If
     
        FeuilleAnalysis.Cells(ligne, 3).Value = FeuilleData.Cells(flag_trouve.Row, 3).Value
     
     
        lignesuivante:
        ligne = ligne + 1
        Loop
        Application.Calculation = xlCalculationAutomatic
        Application.ScreenUpdating = True
        MsgBox "Terminé"
     
     
        End Sub
    Comme je ne veux pas supprimer les valeurs de la feuille data_input, j'avais penser à copier tout d'abord les valeurs dans une autre feuille ex: data_input2 et de supprimer au fur et à mesure les lignes dans data_input mais je ne sais pas si cela vaut le coup en terme de temps d’exécution.

    Merci d'avance pour vos conseils.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Difficile pour moi de vous donner une quelconque piste sans exemple .... sauf cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For v = 1 To DeletePlage.Row - 1
        FeuilleData.Cells(v).EntireRow.Delete
     
    Next
    => c'est terrible d'un point de vue temps d'exécution, même avec un affichage non raffraichit et je ne vois pas ce qui vous empêche de faire le 'delete' en un coup

  3. #3
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Désolé Fredems, mais j'ai modifié par habitude le nom de certaines de tes variables. Je ne sais pas si c'est cette partie qui ralentit l'exécution du code, j'ai repris l'idée de Vinc_bilb, mais voici le début du code modifié :

    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
    Dim OD As Object 'déclare la variable OD (Onglet DATA_INPUT)
    Dim OA As Object 'déclare la variable OA (Onglet ANALYSIS)
    Dim ligne As Long, i As Long
    Dim R As Range 'déclare la varialbe R (Recherche)
    Dim LI As Long 'déclare la variable LI (LIgne)
    Dim niv_prod_label As String
    Dim flag_trouve As Range
     
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
     
    Set OD = ActiveWorkbook.Worksheets("DATA_INPUT") 'définit l'onglet OD
    Set OA = ActiveWorkbook.Worksheets("ANALYSIS") 'définit l'onglet OA
    Set R = OD.Cells.Find("5 - VALEUR MOYENNE ENTRE 0 ET T", LookAt:=xlWhole, MatchCase:=True) 'définit la recherche R
    If Not R Is Nothing Then 'condition : si il existe au moint une occurrence touvée
        LI = R.Row - 1 'définit la ligne LI
        Rows("1:" & LI).Delete 'supprime les lignes 1 à LI
    End If 'fin de la condition
    ligne = 1

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    ingénieur RAM
    Inscrit en
    Novembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur RAM
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 5
    Par défaut
    J'ai moi aussi modifié la macro et la durée d’exécution devient raisonnable.

    Merci à vous deux

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

Discussions similaires

  1. [AC-2003] Comment executer une macro Excel sous Access
    Par Deustalos dans le forum VBA Access
    Réponses: 6
    Dernier message: 04/11/2009, 12h30
  2. comment associer une macro à excel ?
    Par rudboy86 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/05/2008, 11h02
  3. Comment lancer une macro excel en selectionnant une cellule?
    Par itony dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/03/2008, 10h08
  4. comment executer une macro excel depuis page asp ?
    Par auboulot909 dans le forum ASP
    Réponses: 12
    Dernier message: 10/01/2008, 19h26
  5. Comment insérer une macro excel dans une macro word?
    Par max2245 dans le forum VBA Word
    Réponses: 15
    Dernier message: 07/01/2006, 17h44

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