Raccourcir une boucle pour éviter une grosse latence

Signaler
-
 JRH832 -
Bonjour à tous,

Je débute un peu avec VBA dans la cadre professionnel. J'ai programmé une macro qui réactualise l'affichage de ma base de données dans une table spécifiquement prévue à cet effet.
La base de donnée a environ 45 entrées et est en Feuille 2.
L'afficheur est situé en Feuille 1. Cette macro s'exécute en cliquant sur un bouton d'une autre feuille permettant de revenir à la Feuille 1 à jour.

Cependant quand je l'exécute, elle met bien 10 secondes à charger la Feuill 1 et passe par un "Excel ne Répond Plus" pendant ce temps.
1- Est-ce normal ?
2 - Y a-t-il un moyen d'éviter ça, peut être en raccourcissant la boucle de copie (chose que je ne sais pas faire) ?

Je vous laisse ci-dessous le code pour y voir plus clair.

Merci par avance pour l'aide que vous pourrez m'apporter


Sub ReturnToApp()
Dim IndexRow As Integer 'Indice de ligne dans la base
Dim IndexNewTable As Integer 'Indice de ligne correspondant dans l afficheur
IndexNewTable = 24 'debut de l'afficheur en igne 24
Sheets(1).Range("D24:AB167").Value = Empty 'Vider l'afficheur
For IndexRow = 3 To Sheets(2).Range("A999").End(xlUp).Row 'Pour chaque entree de la bdd
With Sheets(1)
.Range("D" & IndexNewTable).Value = Sheets(2).Range("A" & IndexRow).Value 'placer l'entree correctement dans la feuille 1
.Range("E" & IndexNewTable).Value = Sheets(2).Range("B" & IndexRow).Value
.Range("G" & IndexNewTable).Value = Sheets(2).Range("C" & IndexRow).Value
.Range("H" & IndexNewTable).Value = Sheets(2).Range("D" & IndexRow).Value
.Range("J" & IndexNewTable).Value = Sheets(2).Range("E" & IndexRow).Value
.Range("L" & IndexNewTable).Value = Sheets(2).Range("F" & IndexRow).Value
.Range("P" & IndexNewTable).Value = Sheets(2).Range("G" & IndexRow).Value
.Range("T" & IndexNewTable).Value = Sheets(2).Range("H" & IndexRow).Value
.Range("X" & IndexNewTable).Value = Sheets(2).Range("I" & IndexRow).Value
.Range("AA" & IndexNewTable).Value = Sheets(2).Range("J" & IndexRow).Value
.Range("AC" & IndexNewTable).Value = IndexRow 'cle d indice d'une feuille a l autre
.Range("AB" & IndexNewTable).Value = Sheets(2).Range("N" & IndexRow).Value
IndexNewTable = IndexNewTable + 1 'entree suivante
End With
Next IndexRow
Sheets(1).Select ' se rendre en feuille 1 et premiere entree
Sheets(1).Range("D24").Select
End Sub


Configuration: Windows / Chrome 89.0.4389.90

2 réponses

Messages postés
8535
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
9 avril 2021
1 647
Bonjour,

Ajouter au code :
' Ajouter au début du code :
Dim calcul As XlCalculation
  calcul = Application.Calculation
  Application.Calculation = xlCalculationManual
  Application.ScreenUpdating = False

' suite du code
'....

' Ajouter à la fin du code :
  Application.Calculation = calcul



Cordialement
Patrice

Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
Bonjour,

Merci de votre réponse.
C'est pile ce qu'il me manquait !

JRH832