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
    Wend

Bon 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 = xlCalculationManual

et à la fin avant End Sub

Application.Calculation = xlCalculationAutomatic

Trè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 !

Rechercher des sujets similaires à "code vba simple long executer"