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 :

Optimiser une macro VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Par défaut Optimiser une macro VBA
    Bonjour,

    J'aimerais optimiser la macro suivantes qui marche trés bien mais qui prend un peu de temps.

    Est-ce qu'il est possible d'optimiser la macro pour qu'elle aille plus vite

    Cdt,

    Code VBA : 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
    29
    30
    31
    Sub Indice()
     
    Sheets("loyer").Select
     
    Dim A, N, P, M, Indice
     
      For L = 2 To Sheets("suivi").Range("A1").CurrentRegion.Rows.Count
      For c = 15 To 70
     
      N = Sheets("suivi").Cells(L, 11)
      P = Sheets("suivi").Cells(1, c)
      M = Sheets("suivi").Cells(L, 12)
     
        A = Sheets("indice").Range("a4:a2872").Resize(, 3)
      For i = 1 To UBound(A, 1)
     
        If A(i, 1) = N And A(i, 2) = P And A(i, 3) = M Then
     
    Indice = Sheets("indice").Range("d4:d2872")(i).Value
     
    Sheets("loyer").Cells(L, c).FormulaLocal = Indice
     
        End If
     
      Next i
     
      Next c
     
      Next L
     
    End Sub

  2. #2
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 229
    Par défaut
    Bonjour momo,

    Déjà ajoute au début de ta macro ( après le sub)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating=False
    et juste avant la fin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating= True
    Après tu peux remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     N = Sheets("suivi").Cells(L, 11)
      P = Sheets("suivi").Cells(1, c)
      M = Sheets("suivi").Cells(L, 12)
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With sheets("suivi")
      N = .Cells(L, 11)
      P = .Cells(1, c)
      M = .Cells(L, 12)
    End With

    Après s'il explore toutes ces cellules, c'est normal que ca prenne du temps,

    C'est tout ce que je peux te dire, les pro pourront certainement l'améliorer d'avantages...

    Cdlt
    DoDo

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Sans fichier difficile d'adapter. mais quand même une supposition (qui risque fort de ne pas fonctionner faute de ton fichier)

    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
    Sub Indice()
    Dim L As Long, LastLig As Long, i As Long
    Dim A, Tb, Res() As String
    Dim N As String, M As String, P As String
    Dim C As Integer
     
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    A = Sheets("indice").Range("A4:D2872")
    With Sheets("suivi")
        LastLig = .Range("A1").CurrentRegion.Rows.Count
        Tb = .Range("A1").CurrentRegion
    End With
    ReDim Res(1 To LastLig - 1, 1 To 56)
    For L = 2 To LastLig
        N = Tb(L, 11)
        M = Tb(L, 12)
        For C = 15 To 70
            P = Tb(1, C)
            For i = 1 To UBound(A, 1)
                If A(i, 1) = N And A(i, 2) = P And A(i, 3) = M Then Res(L - 1, C - 14) = A(i, 4)
            Next i
        Next C
    Next L
    Sheets("loyer").Cells(2, 15).Resize(LastLig - 1, 56) = Res
    Application.Calculation = xlCalculationAutomatic
    End Sub

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Par défaut
    merci à tous les 2

    J'ai testé les 2 methodes et j'ai gagné 15 secondes avec la premieres methodes en revanche la seconde est un peu plus longue

    Bien à vous,

Discussions similaires

  1. Copier Coller du Code dans une macro VBA
    Par ted the Ors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/04/2008, 16h11
  2. [WD11] Lancer une macro VBA Excel
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 1
    Dernier message: 11/09/2007, 11h46
  3. Nouveau problème avec un tableau Excel et une macro VBA
    Par valouche dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 30/06/2007, 09h30
  4. Lancer une macro vba par menu
    Par jedwiller dans le forum Access
    Réponses: 3
    Dernier message: 09/05/2006, 16h19
  5. Connaître la taille d'un module avec une macro VBA ou autre
    Par beegees dans le forum Général VBA
    Réponses: 15
    Dernier message: 22/11/2005, 09h47

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