Code VBA simple long à exécuter
Bonjour à tous,
Voila, j'ai un petit "problème" avec mon code qui met entre 20 et 30 secondes à s'executer alors qu'il est très simple...
Le but est simplement de copier des données d'une feuille à une autre.
Auriez vous une solution pour cela svp ? Est-ce normal ?
Le premier bloc avec les If est la portion la plus longue à executer (sachant qu'elle passe principalement dans le 1er "if") ==> Environ 15sec
Le 2eme bloc avec les If est l'autre partie longue également (idem, 1er "If" plus utilisé) ==> Environ 10sec
La moulinette tourne sur une 100aine de ligne
MERCI D'AVANCE !!!
Ligne = 7
LigneGeneral = 5
While WsGeneral.Cells(LigneGeneral, Col_Statut_Global).Value <> ""
If WsGeneral.Cells(LigneGeneral, Col_Type).Value = "Essai" And WsGeneral.Cells(LigneGeneral, Col_Abréviation).Value = "" Then
WsPlann.Cells(Ligne, ColPlann_Tache).Value = WsGeneral.Cells(LigneGeneral, Col_Type_Essai).Value & " - " & WsGeneral.Cells(LigneGeneral, Col_Essai_Demandé).Value
ElseIf WsGeneral.Cells(LigneGeneral, Col_Type).Value = "Essai" And WsGeneral.Cells(LigneGeneral, Col_Abréviation).Value <> "" Then
WsPlann.Cells(Ligne, ColPlann_Tache).Value = WsGeneral.Cells(LigneGeneral, Col_Type_Essai).Value & " - " & WsGeneral.Cells(LigneGeneral, Col_Abréviation).Value & " - " & WsGeneral.Cells(LigneGeneral, Col_Essai_Demandé).Value
ElseIf WsGeneral.Cells(LigneGeneral, Col_Statut_Global) = "Transfert Train" Then
WsPlann.Cells(Ligne, ColPlann_Tache).Value = WsGeneral.Cells(LigneGeneral, Col_Statut_Global).Value
ElseIf WsGeneral.Cells(LigneGeneral, Col_Type) = "Retrofit" Then
WsPlann.Cells(Ligne, ColPlann_Tache).Value = WsGeneral.Cells(LigneGeneral, Col_Type).Value & " - " & WsGeneral.Cells(LigneGeneral, Col_Lieu_Essai).Value
Else
WsPlann.Cells(Ligne, ColPlann_Tache).Value = WsGeneral.Cells(LigneGeneral, Col_Type).Value & " - " & WsGeneral.Cells(LigneGeneral, Col_Commentaire).Value
End If
If TypePlanning = "Plannifié" Then
WsPlann.Cells(Ligne, ColPlann_Date_Début).Value = WsGeneral.Cells(LigneGeneral, Col_Date_Début).Value
WsPlann.Cells(Ligne, ColPlann_Date_Fin).Value = WsGeneral.Cells(LigneGeneral, Col_Date_Fin).Value
WsPlann.Cells(Ligne, ColPlann_Nom_Train).Value = WsGeneral.Cells(LigneGeneral, Col_Nom_Train).Value
ElseIf TypePlanning = "Réel" Then
WsPlann.Cells(Ligne, ColPlann_Date_Début_Réelle).Value = WsGeneral.Cells(LigneGeneral, Col_Date_Début_réelle).Value
WsPlann.Cells(Ligne, ColPlann_Date_Fin_Réelle).Value = WsGeneral.Cells(LigneGeneral, Col_Date_Fin_réelle).Value
WsPlann.Cells(Ligne, ColPlann_Nom_Train).Value = WsGeneral.Cells(LigneGeneral, Col_Nom_Train).Value
ElseIf TypePlanning = "LesDeux" Then
WsPlann.Cells(Ligne, ColPlann_Date_Début).Value = WsGeneral.Cells(LigneGeneral, Col_Date_Début).Value
WsPlann.Cells(Ligne, ColPlann_Date_Fin).Value = WsGeneral.Cells(LigneGeneral, Col_Date_Fin).Value
WsPlann.Cells(Ligne, ColPlann_Date_Début_Réelle).Value = WsGeneral.Cells(LigneGeneral, Col_Date_Début_réelle).Value
WsPlann.Cells(Ligne, ColPlann_Date_Fin_Réelle).Value = WsGeneral.Cells(LigneGeneral, Col_Date_Fin_réelle).Value
WsPlann.Cells(Ligne, ColPlann_Nom_Train).Value = WsGeneral.Cells(LigneGeneral, Col_Nom_Train).Value
End If
Ligne = Ligne + 1
LigneGeneral = LigneGeneral + 1
WendBon ben j'aurais du réfléchir avant de poster....
J'avais des "ALEA.ENTRE.BORNES()" dans une autre feuille qui se mettait à jour entre chaque execution.... Tu m'étonnes que c'était long a executer
Désolé pour le spam inutile, j’espère que si quelqu'un avec le meme problème voit ça, ca l'aidera un peu ;)
Bonjour,
Teste en mettant au début
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManualet à la fin avant End Sub
Application.Calculation = xlCalculationAutomaticTrès bien vu, ca me permet de garder mes fonctions ALEA du coup !
Bon sur le résultat final, je vais les enlever dans tous les cas, c'était pour simuler des avancements et evolution d'indicateurs.
Merci !