Améliorer la vitesse d'un code VBA

babacool

XLDnaute Nouveau
Bonjour à tous,

Le code que j'ai écrit a pour objectif de copier les données de la plage G8:G200 dans la plage O8:O200 si des conditions sont respectées (si gauche = AA, AB, AC ou AD)

Pour une raison que j'ignore (niveau en VBA limité), ce code est très lent. Plus d'une minute à tourner.
Auriez-vous une suggestion pour accélérer le temps de traitement ?

Merci par avance pour votre aide.

Voici le code utilisé :

Sub Copier_données()

Dim i As Long

Application.ScreenUpdating = False

For i = 8 To 200
If Left(Cells(i, "G"), 2) = "AA" Or Left(Cells(i, "G"), 2) = "AB" Or Left(Cells(i, "G"), 2) = "AC" Or Left(Cells(i, "G"), 2) = "AD" Then
Cells(i, "O").Value = Cells(i, "G").Value

End If

Next i

Application.ScreenUpdating = True

End Sub
 

vgendron

XLDnaute Barbatruc
Re : Améliorer la vitesse d'un code VBA

Bonjour,

Perso, je viens de tester ton code dans un fichier (qui ne contient pas 800 lignes). et c'est."instantané".
peut etre le pb vient il de ton fichier lui meme. mais bon. sans l'avoir ca va etre dur de t'aiguiller
t'est il possible de joindre ton fichier en l'état? sans donnée confidentielle dedans?
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Améliorer la vitesse d'un code VBA

Bonjour Babacool, bonjour le forum,

Peut-être comme ça :

Code:
Sub Copier_données()
Dim i As Integer

Application.ScreenUpdating = False
For i = 8 To 200
    Select Case Left(Cells(i, "G").Value, 2)
        Case "AA", "AB", "AC", "AD"
            Cells(i, "O").Value = Cells(i, "G").Value
    End Select
Next i
Application.ScreenUpdating = True
End Sub
 

Efgé

XLDnaute Barbatruc
Re : Améliorer la vitesse d'un code VBA

Bonjour à tous,
Allez, je joue aussi:
VB:
Sub Copier_données_2()
Dim i As Long, Liste As String
Liste = ",AA,AB,AC,AD," 'doit commencer et finir par une virgule
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = 8 To 200
    If InStr(Liste, "," & Left(Cells(i, "G"), 2) & ",") <> 0 Then _
                        Cells(i, "O").Value = Cells(i, "G").Value
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Cordialement
 

babacool

XLDnaute Nouveau
Re : Améliorer la vitesse d'un code VBA

Merci à tous pour vos réponses.

Comme j'ai pas mal de formules matricielles dans ce fichier, je pense que c'est ça qui ralentit le processus.
Du coup, j'ai mis un Application.Calculation = xlCalculationManual en début de macro et un Application.Calculation = xlCalculationAutomatic à la fin. Je me suis inspiré de Efgé.

Et là, ça va beaucoup mieux.

Bonne journée à tous !
 

Statistiques des forums

Discussions
312 677
Messages
2 090 813
Membres
104 672
dernier inscrit
robaine salah