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 :

Accélérer l'exécution d'une macro (boucle)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 11
    Par défaut Accélérer l'exécution d'une macro (boucle)
    Bonjour,

    j'essaie de copier une liste de lignes depuis une feuille à une autre. mon premier tableau que je copie peux aller jusqu’à 5000 lignes et cela prend énormément de temps pour s’exécuter ( plus de 10 min)

    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
    Sub remonter_stock()
     
    Application.ScreenUpdating = False
     
    Dim wb As Workbook
     
     
    der_ligne_stock = ThisWorkbook.Worksheets("copie extract stock").Range("A122222").End(xlUp).Row
    X = 2
     
    For i = 4 To der_ligne_stock
     
     
            Worksheets("vérification affichage").Range("X" & X) = ThisWorkbook.Worksheets("copie extract stock").Range("A" & i)
            Worksheets("vérification affichage").Range("Y" & X) = ThisWorkbook.Worksheets("copie extract stock").Range("B" & i)
            Worksheets("vérification affichage").Range("Z" & X) = ThisWorkbook.Worksheets("copie extract stock").Range("C" & i)
            Worksheets("vérification affichage").Range("AA" & X) = ThisWorkbook.Worksheets("copie extract stock").Range("D" & i)
            Worksheets("vérification affichage").Range("AB" & X) = ThisWorkbook.Worksheets("copie extract stock").Range("R" & i)
            Worksheets("vérification affichage").Range("AC" & X) = ThisWorkbook.Worksheets("copie extract stock").Range("X" & i)
     
     
            X = X + 1
     
     
    Next i
     
    Application.ScreenUpdating = True
    End Sub
    est t'il possible de minimiser le temps d’exécution de la macro ? je ne trouve pas d'autre solution pour copier/coller le tableau sans passer par une boucle

    Merci d'avance pour votre aide !

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Pourquoi une boucle?
    Un objet Range peut être composé de plusieurs cellules.

    On peut donc très bien coder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("A1:A10").Value = Range("B1:B10").Value
    (au rattachement des objets près)

    Parallèlement, l'un des moyens de diminuer le temps d'exécution d'une procédure consiste à désactiver la mise à jour de l'écran.
    (Je te laisse traduire en VBA)

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Essaies :
    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
    Option Explicit
    Sub remonter_stock()
    Dim c As Integer, d As Long, f As Long
      Application.ScreenUpdating = False
      c = Application.Calculation
      Application.Calculation = xlCalculationManual
      d = ThisWorkbook.Worksheets("copie extract stock").Range("A122222").End(xlUp).Row
      f = d - 2
      With Worksheets("vérification affichage")
        .Range("X2:AA" & f).Value = ThisWorkbook.Worksheets("copie extract stock").Range("A4:D" & d).Value
        .Range("AB2:AB" & f).Value = ThisWorkbook.Worksheets("copie extract stock").Range("R4:R" & d).Value
        .Range("AC2:AC" & f).Value = ThisWorkbook.Worksheets("copie extract stock").Range("X4:X" & d).Value
      End With
      Application.Calculation = c
      Application.ScreenUpdating = True
    End Sub

  4. #4
    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
    Déjà, je ne vois pas l'intérêt de ta variable X.
    Dans tes Ranges, tu peux la remplacer par (i - 2).
    Mais c'est pas ça qui fera gagner du temps.

    Par contre, ceci en fera gagner :
    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 remonter_stock()
     
    Dim WSSource As Worksheet, WSDest As Worksheet
    Dim Lig As Long
     
    Application.ScreenUpdating = False
     
    Set WSSource = ThisWorkbook.Worksheets("copie extract stock")
    Set WSDest = Worksheets("vérification affichage")
     
    Lig = WSSource.Cells(Rows.Count, 1).End(xlUp).Row
     
    WSSource.Range("A4:D" & Lig).Copy
    WSDest.Range("X2").PasteSpecial(xlPasteValues)
     
    WSSource.Range("R4:R" & Lig).Copy
    WSDest.Range("AB2").PasteSpecial(xlPasteValues)
     
    WSSource.Range("X4:X" & Lig).Copy
    WSDest.Range("AC2").PasteSpecial(xlPasteValues)
     
    Application.ScreenUpdating = True
    End Sub
    Sans certitude, ceci aussi pourrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub remonter_stock()
    Dim WSSource As Worksheet, Lig As Long
     
    Set WSSource = ThisWorkbook.Worksheets("copie extract stock")
    Lig = WSSource.Cells(Rows.Count, 1).End(xlUp).Row
     
    WSSource.Range("A4:D" & Lig & ",R4:R" & Lig & ",X4:X" & Lig).Copy
    Worksheets("vérification affichage").Range("X2").PasteSpecial(xlPasteValues)
    End Sub

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 11
    Par défaut
    Merci à vous tous pour votre aide !

    le code de Menhir est top

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

Discussions similaires

  1. Exécution d'une macro dans une base Access en VB6
    Par Safaritn dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 25/05/2007, 17h00
  2. Revenir sur la cellule sélectionné après exécution d'une macro
    Par Daniel-Gérald dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/02/2007, 21h50
  3. [EXCEL] interrompre l'exécution d'une macro
    Par ustilago dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/10/2006, 10h24
  4. [VBA-E]Exécution d'une macro en arrière-plan
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/04/2006, 23h13
  5. Allongement d'uin temps d'exécution d'une macro
    Par avanrill dans le forum Access
    Réponses: 2
    Dernier message: 06/03/2006, 19h29

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