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 :

execution trop lente


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 81
    Par défaut execution trop lente
    Bonjour,
    J'ai un code qui permet de comparer des colonnes 2 à 2 .
    En revanche quand j'augmente la valeur de x(cf code) l'execution prend enormement de temps.
    Est ce que quelqu'un pourrait me dire ce qui ne va pas?.
    Est ce qu'il y'a des choses dans le code qui sont unitiles?
    ou faut il ajouter des options?
    Merci de vos réponses
    bien cordialement
    voici mon 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
    Sub egalite()
           Dim x As Integer, y As Long
           Dim row As Range
           Application.ScreenUpdating = False
       ' Worksheets("Feuil1").Activate
     
        For Each row In Selection
     
            For x = 2 To 500   'mais quand je remplace 500 par 10000 j'aten 2 h voir plus 
    For y = 3 To 525 Step 3
     
                    Cells(x, y) = "=RC[-2]=RC[-1]"
                Next y
            Next x
            Next row
        Application.ScreenUpdating = True
        MsgBox "terminée"
    End Sub
    je vois joint le fichier en question
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonjour
    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
    Sub egalite()
           Dim x As Integer, y As Integer
    '       Dim row As Range
           Application.ScreenUpdating = False
           Application.Calculation = xlCalculationManual 'pour accelerer encore, on desactive le calcul automatique
     
     
    '    For Each row In Selection ' quel selection?
    's'il n'y a que 10 lignes, pourquoi chercher dans la 10000
     
             x = Range("A65000").End(xlUp).row '10000
                 For y = 3 To 525 Step 3
    'et pourquoi coller la formule dans une seule cellule, autant selectionner la colonne
                 Range(Cells(2, y), Cells(x, y)) = "=RC[-2]=RC[-1]"
    '                Cells(x, y) = "=RC[-2]=RC[-1]"
                Next y
     
    '        Next row
        Application.Calculation = xlCalculationAutomatic
        Application.ScreenUpdating = True
        MsgBox "terminée"
        End Sub
    En gros et si c'est juste, 1 seconde avec le fichier fourni

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par keygen08 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                 For y = 3 To 525 Step 3
    'et pourquoi coller la formule dans une seule cellule, autant selectionner la colonne
                 Range(Cells(2, y), Cells(x, y)) = "=RC[-2]=RC[-1]"
    '                Cells(x, y) = "=RC[-2]=RC[-1]"
                Next y
    Peut encore être simplifié en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                 Range(Cells(2, 3), Cells(x, y)) = "=RC[-2]=RC[-1]"
    Par contre, je ne comprends pas du tout l'intérêt de la boucle For Each sur la sélection.
    Déjà, il n'y a rien dans cette boucle qui fait référence à Row.
    Ensuite, Row va désigner une variable et non les lignes de la sélection. Sans garantie, je pense que "Row" va sans doute devenir une variable de type Range et la boucle va tourner sur toutes les cellules de la sélections, sans pour autant utiliser leurs référence.
    Donc, en gros, ça ralenti sans servir à rien.
    A mon avis, il y a un gros couac là-dessus.

  4. #4
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(2, 3), Cells(x, y)) = "=RC[-2]=RC[-1]"
    Pas du tout, et le step 3.
    Par contre je suis d'accord sur le row, c'est pourquoi je l'ai commenté

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par keygen08 Voir le message
    Pas du tout, et le step 3.
    Oups

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut





    Désactiver le mode de calcul automatique pendant la procédure puis le réactiver à la fin (propriété Calculation) …



  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    les données des colonnes que tu compares sont-elles déjà présentes ou les ajoutes tu par la suite ?

    Une première chose serait de supprimer une boucle sur les lignes en utilisant AutoFill, comme par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("C2").FormulaR1C1 = "=RC[-2]=RC[-1]"
    Range("C2").Autofill Destination:=Range("C2:C" & Range("C65536").end(xlup).row)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 81
    Par défaut
    Bonjour,
    Merci à vous tous pour vos vos retours et vos remarques.
    je vais le tester et vous tiendrai au courant.
    merci encore une fois
    cdt
    sakhob

    Citation Envoyé par jpcheck Voir le message
    Salut,

    les données des colonnes que tu compares sont-elles déjà présentes ou les ajoutes tu par la suite ?

    Une première chose serait de supprimer une boucle sur les lignes en utilisant AutoFill, comme par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("C2").FormulaR1C1 = "=RC[-2]=RC[-1]"
    Range("C2").Autofill Destination:=Range("C2:C" & Range("C65536").end(xlup).row)

    les données existent déjà.

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 81
    Par défaut
    Merci à vous
    je viens de tester avec le code de keygen08 ça marche .
    Bonne journée à vous
    cdt

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

Discussions similaires

  1. Temps d'execution trop lent : hive=> neo4j
    Par lobna20 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 03/03/2015, 11h38
  2. [AC-2003] Temps d'execution trop lent - Recordset DAO
    Par casavba dans le forum VBA Access
    Réponses: 14
    Dernier message: 15/10/2012, 21h31
  3. execution trop lente
    Par étoile de mer dans le forum Débuter
    Réponses: 3
    Dernier message: 30/10/2009, 12h50
  4. execution trop lente
    Par mathiew dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 31/03/2009, 21h46
  5. [VBA-E]temps d execution trop lent
    Par chmod777 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/03/2006, 15h10

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