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 :

Temps execution macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 69
    Par défaut Temps execution macro
    Bonjour,

    Voila j'ai écrit une macro pour faire un calcul de moyenne. Celle fonctionne avec un test à 100 ligne ou 1000 au delà elle tourne sans s'arreter.

    Meme avec XLcalutionmanual et Screenupdating=false je ne gagne pas mieux en execution

    Quelqu'un pourrait m'aider à la transformer pour gagner en temps d'execution?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
         For i = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
     
    .Cells(i, 149).FormulaArray = "=AVERAGE(IF((R2C72:R37030C72=RC[-77])*(R2C74:R37030C74=RC[-75])>0,R2C86:R37030C86))"
     .Cells(i, 147).FormulaArray = "=IF(RC[-65]<>"""",AVERAGE(IF((R2C72:R37030C72=RC[-75])*(R2C74:R37030C74=RC[-73])>0,R2C82:R37030C82)),"""")"
     .Cells(i, 148).FormulaArray = "=AVERAGE(IF((R2C72:R37030C72=RC[-76])*(R2C74:R37030C74=RC[-74])>0,R2C84:R37030C84))"
         Next i
    Merci

  2. #2
    Membre éclairé Avatar de verredewhisky
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Janvier 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Janvier 2013
    Messages : 63
    Par défaut
    Si tu veux être plus rapide tu devrais tout mettre dans des tableaux, travailler dessus et tout recracher dans les cellules.

    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
     
    '...
        While Sheets("E").Cells(i, j).Value <> ""
            tableau(2, x) = Sheets("E").Cells(i, j).Value
            tableau(3, x) = Sheets("E").Cells(i, j + 1).Value
            tableau(4, x) = Sheets("E").Cells(i, j + 2).Value
            tableau(5, x) = Sheets("E").Cells(i, j + 3).Value
            tableau(6, x) = Sheets("E").Cells(i, j + 4).Value
            x = x + 1
            i = i + 1
        Wend
    '...
    'ton calcul de moyenne
    '...
     
     
    For i = 1 To NBR
        Sheets("L").Cells(i, 2).Value = tableau(1, i)
        Sheets("L").Cells(i, 3).Value = tableau(2, i)
        Sheets("L").Cells(i, 4).Value = tableau(3, i)
        Sheets("L").Cells(i, 5).Value = tableau(4, i)
        Sheets("L").Cells(i, 6).Value = tableau(5, i)
        Sheets("L").Cells(i, 7).Value = tableau(6, i)
    Next i
    '....

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 69
    Par défaut
    J'ai essayé avec cette solution
    çà fonctionne sauf que la validation de formule (ctrl+maj+entree) n'est pas prise en compte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
             dern = Sheets("extraction").Range("A65536").End(xlUp).Row
            .Range("ES2").FormulaArray = "=AVERAGE(IF((R2C72:R37030C72=RC[-77])*(R2C74:R37030C74=RC[-75])>0,R2C86:R37030C86))" 'timeliness ra
            .Range("ES2").Copy
            .Range("ES3:ES" & dern).Select
            Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Quelqu'un peut m'aider?

  4. #4
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Bonjour,

    Essaie comme ça je pense que ce sera plus rapide:
    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
    Sub test()
     
         Dim Destination as Range
         Dim lastLigne as Long
         '.....
         '.....
         With taFeuille
     
            lastLigne = .Cells(Application.Rows.Count, 1).End(xlUp).Row
     
            .Cells(2, 147).FormulaArray = "=IF(RC[-65]<>"""",AVERAGE(IF((R2C72:R37030C72=RC[-75])*(R2C74:R37030C74=RC[-73])>0,R2C82:R37030C82)),"""")"
            .Cells(2, 148).FormulaArray = "=AVERAGE(IF((R2C72:R37030C72=RC[-76])*(R2C74:R37030C74=RC[-74])>0,R2C84:R37030C84))"
            .Cells(2, 149).FormulaArray = "=AVERAGE(IF((R2C72:R37030C72=RC[-77])*(R2C74:R37030C74=RC[-75])>0,R2C86:R37030C86))"
     
            Set Destination = .Range(.Cells(2, 147), .Cells(lastLigne, 149))
            .Range(.Cells(2, 147), .Cells(2, 149)).AutoFill Destination:=Destination
     
        End With
     
    End Sub
    Bonne journée.

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 69
    Par défaut
    Merci beaucoup çà fonctionne ;-)

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

Discussions similaires

  1. [XL-2007] Optimisation temps execution d'une macro
    Par Ltspitfire dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 22/01/2015, 15h18
  2. Réponses: 4
    Dernier message: 19/05/2005, 11h51
  3. temps execution CreateProcess
    Par dighou dans le forum MFC
    Réponses: 7
    Dernier message: 26/04/2005, 16h18
  4. [MFC] pb temps execution
    Par ricky78 dans le forum MFC
    Réponses: 4
    Dernier message: 21/01/2005, 11h50
  5. Temps execution mysql
    Par azman0101 dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/07/2004, 09h42

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