Améliorer la vitesse d'un code VBA

  • Initiateur de la discussion Initiateur de la discussion babacool
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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?
 
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
 
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
 
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 !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
917
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
5
Affichages
665
Réponses
3
Affichages
924
Réponses
3
Affichages
432
Réponses
0
Affichages
658
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
906
Retour