Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VBA] EXCEL : Reduire temps d'execution pr boucle

Sujet résolu
    4 juin 2013 à 11:18:03

    Bonjour,

    Voici mon problème :

    J'ai un tableau Excel qui avoisine les 550 000 lignes (cela peut varier de plus ou moins 200 000), je cherche a rajouter une colonne et a y reporter le premier caractère d'une autre colonne et cela de manière automatique par le biais du VBA.

    Mon code fonctionne mais il prend une dizaine de minutes pour parcourir l'ensemble du tableau, alors que, fais manuellement cela ce fait en quelques secondes ! Je désirerai réduire ce temps de calculs qui est tout simplement énorme ! Il me semble que une chose que l'on peut faire par clique sur Excel est une chose que l'on peut coder en VBA, quel est la fonction ou méthode qui peut me permettre de réduire ce temps de calcule ?

    Voici mon code :

        For i = 2 To DernLigne_taux
            xls11.Range("N" & i).Value = Left(xls11.Range("E" & i).Value, 1)
        Next i

    DernLigne_taux représente la dernière ligne de mon tableau.

    Merci pour vos réponses multiples et nombreuses :)



    -
    Edité par jossdu39 5 juin 2013 à 13:46:45

    • Partager sur Facebook
    • Partager sur Twitter
      4 juin 2013 à 14:09:05

      Hello jossdu39.

      Le temps de traitement de ton code dans cet exemple est intimement lié au nombre d'enregistrements à parcourir et je pense qu'il n'y pas grand chose à faire pour ralentir le temps d'exécution. Tu peux jouer sur la propriété Application.ScreenUpdating = False ... ton code... Application.ScreenUpdating = True afin d'empêcher le rafraichissement de ton écran (le temps que ton code s'exécute) m'enfin pas sûr que cela augmente la rapidité sur le temps d'exécution de ta macro.

      Cordialement, Mat'

      -
      Edité par Matheop 4 juin 2013 à 14:10:21

      • Partager sur Facebook
      • Partager sur Twitter

      Le Kansas City Shuffle.. c’est quand tout le monde regarde à gauche et que tu vas à droite.

        5 juin 2013 à 13:45:46

        J'ai essayé en ajoutant ces propriétés, ça réduit a 5 min le temps d’exécution (au lieu de 5.30)...

        Ce qui m’étonne c'est qu'avec quelques clique directement sur Excel, cela prend quelques secondes...

        Pourquoi cela devrait prendre autant de temps en VBA ?

        Il n'y a pas une autre méthode ?

        • Partager sur Facebook
        • Partager sur Twitter
          6 juin 2013 à 11:53:31

          J'ai trouvé la solution !!!

          Grace a ce lien : http://www.developpez.net/forums/d1232064/logiciels/microsoft-office/excel/macros-vba-excel/optimisation-temps-dexecution-code-vba-resolu/

          L’exécution de mon code prenait 17 minutes avec l'ajout de modifs supplémentaire par rapport a mon précédent message...

          Ça la réduit a 10 secondes !!!!

          Voici mon code pour tout ceux qui cherche a optimiser leurs temps de travail !

              Set plage = xls11.Range("L2:N" & DernLigne_taux)
              v = plage
              Set plage2 = xls11.Range("A2:K" & DernLigne_taux)
              v2 = plage2
              
              For i = 1 To DernLigne_taux - 1
              
              'Remplissage de la colonne secteur
              
                  If Left(v2(i, 5), 2) = 32 Then
                  v(i, 3) = "Culture"
                  Else
                  v(i, 3) = Left(v2(i, 5), 1)
                  End If
              
              'Remplissage de la colonne etat
              
                  If v2(i, 8) = "" And v2(i, 9) < 5 Then
                  v(i, 2) = "INTEGRABLE"
                  Else
                  v(i, 2) = "NON INTEGRABLE"
                  End If
                  
              Next i
              
              plage = v



          -
          Edité par jossdu39 6 juin 2013 à 11:54:17

          • Partager sur Facebook
          • Partager sur Twitter

          [VBA] EXCEL : Reduire temps d'execution pr boucle

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown