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 :

Améliorer la vitesse d'une macro [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Améliorer la vitesse d'une macro
    Bonjour

    Je suis débutant en macro et j'ai un soucis de vitesse avec une macro qui mets une trentaine de seconde à s'exécuter.
    En effet je dois faire la somme dans une feuille Excel de 65000 lignes, en fonction de 2 paramètres et il doit me ressortir la durée en heures.
    Cette macro fonctionne bien mais mets un temps fort long pour m'afficher les résultats dans mon tableau.
    Environ 100 lignes pour 15 colonnes.

    Est-il possible d'accélerer la vitesse de cette macro?

    Merci pour vos réponses

    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
    Sub test()
     
        For i = 6 To 160 Step 1
            i = 6
            For j = 3 To 30 Step 1
                If Cells(5, j) = "" Then
                    Exit For
                End If
     
                Cells(i, j) = "=IF(RC2="""","""",IF(SUMPRODUCT(('Poste de travail'!R1C5:R65000C5=RC2)*('Poste de travail'!R1C10:R65000C10=R5C),('Poste de travail'!R1C8:R65000C8))=0,"""",SUMPRODUCT(('Poste de travail'!R1C5:R65000C5=RC2)*('Poste de travail'!R1C10:R65000C10=R5C),('Poste de travail'!R1C8:R65000C8))))"
                Cells(i, j).Select
                Selection.Copy
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
            Next
     
            If Cells(i + 1, 2) = "" Then
     
            End If
     
     
        Next
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    D'abord en début de procédure tu peux placer ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim flgCalcul As Integer
     With Application
      .ScreenUpdating = False
      flgCalcul = .Calculation
     End With
    Et en fin de procédure celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Application
      .ScreenUpdating = True
      .Calculation = flgCalcul
     End With
    Maintenant, il y a une élément qui m'échappe, pourquoi alors que tu es dans une boucle, tu fais un Select sur la cellule sur laquelle tu es déjà (Cells(i, j).Select).
    En plus c'est parfaitement inutile de faire une sélection sur une cellule.
    Pourquoi ce Copy/Paste Special, y a-t-il une raison particulière ?
    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

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    personelement, je ne comprend pas une boucle qui dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 6 To 160 Step 1
    i = 6
    next

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par alsimbad Voir le message
    personelement, je ne comprend pas une boucle qui dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 6 To 160 Step 1
    i = 6
    next
    Ah, celle là m'a échappée
    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

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Maintenant, il y a une élément qui m'échappe, pourquoi alors que tu es dans une boucle, tu fais un Select sur la cellule sur laquelle tu es déjà (Cells(i, j).Select).
    En plus c'est parfaitement inutile de faire une sélection sur une cellule.
    Pourquoi ce Copy/Paste Special, y a t'il une raison particulière ?
    Le coller spécial valeur était une astuce qui me permettait de ne pas avoir la formule qui se répétaient des milliers de fois et qui ralentissait encore plus la macro.
    comme je débute en macro, je ne comprends pas tout.

    Citation Envoyé par alsimbad Voir le message
    personelement, je ne comprend pas une boucle qui dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 6 To 160 Step 1
    i = 6
    next
    Pour le I=6 c'était une erreur de frappe de ma part.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    As-tu déjà essayé ce que je t'ai proposé.
    Vois-tu une amélioration ?
    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

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Oui j'ai essayé et je ne vois pas franchement de gain de temps.

    Toujours environ 40s à s'éxecuter sur Excel 2003

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Je ne comprends pas pourquoi écrire une formule dans excel si ensuite tu écrase cela par sa valeur ?

    pour quoi ne pas effectuer directement le calcul en VBA et écrire dans le tableau le résultat du calcul ..?

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par bbil Voir le message
    Je ne comprends pas pourquoi écrire une formule dans excel si ensuite tu écrase cela par sa valeur ?

    pour quoi ne pas effectuer directement le calcul en VBA et écrire dans le tableau le résultat du calcul ..?
    C'est un peu ce que je cherche à faire mais je ne sais pas comment m'y prendre

  10. #10
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Une piste peut être ? Pas testé du tout :
    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
     
    Sub test()
     
        For i = 6 To 160
     
            For j = 3 To 30
     
                If Cells(5, j) = "" Then
                    Exit For
                End If
     
                If Range("B" & i) <> "" Then
     
                    With Worksheets("Poste de travail")
     
                        If SumProduct((.[E1:E65000] = Range("B" & i)) * (.[J1:J65000] = Range("E" & i)), (.[H1:H65000])) <> 0 Then
                            Cells(i, j) = SumProduct((.[E1:E65000] = Range("B" & i)) * (.[J1:J65000] = [E1]), (.[H1:H65000]))
                        End If
     
                    End With
     
                End If
     
                'sinon au lieu du copier/coller tu peux affecter la valeur (pas testé mais je pense plus rapuide)
    '            Cells(i, j) = "=IF(RC2="""","""",IF(SUMPRODUCT(('Poste de travail'!R1C5:R65000C5=RC2)*('Poste de travail'!R1C10:R65000C10=R5C),('Poste de travail'!R1C8:R65000C8))=0,"""",SUMPRODUCT(('Poste de travail'!R1C5:R65000C5=RC2)*('Poste de travail'!R1C10:R65000C10=R5C),('Poste de travail'!R1C8:R65000C8))))"
    '            Cells(i, j).Value = Cells(i, j).Value
     
            Next
     
            If Cells(i + 1, 2) = "" Then
     
            End If
     
        Next
     
    End Sub
    Hervé.

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    J'ai bien avancé sur l'amélioration de ma macro grâce à votre aide

    Il me reste juste un dernier problème que je n'arrive pas à résoudre.
    Dans ma formule il me rajoute des ' ' qui empêche le calcul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                ActiveCell.Formula = _
                "=SUMPRODUCT((('Poste de travail'!E" & LigneDeB & "):('Poste de travail'!E" & ligneFin & ")=RC2)*(('Poste de travail'!J" & LigneDeB & "):('Poste de travail'!J" & ligneFin & ")=R5C),(('Poste de travail'!H" & LigneDeB & "):('Poste de travail'!H" & ligneFin & ")))"
    Le résultat sur EXcel donne la ligne suivante

    =SOMMEPROD((('Poste de travail'!'E357'): ('Poste de travail'!'E1126')=$B6)*(('Poste de travail'!'J357'): ('Poste de travail'!'J1126')=C$5);(('Poste de travail'!'H357'): ('Poste de travail'!'H1126')))

    Il m'écrit le paramètre E357 entre des guillemets et je ne comprends pas d’où cela peut venir.

    Merci pour votre aide

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    J'ai trouvé, il fallait juste que je rentre dans les formules les lignes et colonnes en R357C5 au lieu de E357.

    Du coup ça marche

    Et ça tourne en 3s

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

Discussions similaires

  1. Améliorer et faire fonctionner une macro !
    Par laurent481826 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/01/2015, 16h08
  2. Recherche de l'aide pour améliorer une macro excel
    Par Yul80 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/09/2008, 10h21
  3. macro pour calculer la vitesse d'execution d'une macro
    Par victorzecat dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 08/12/2007, 14h34
  4. améliorer une macro
    Par casavba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/08/2007, 06h02
  5. Améliorer une macro
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 30/05/2007, 22h33

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