[VBA] - Vitesse d'exécution code VBA

Y compris Power BI, Power Query et toute autre question en lien avec Excel
L
Le Drosophile
Membre fidèle
Membre fidèle
Messages : 317
Appréciation reçue : 1
Inscrit le : 27 juin 2018
Version d'Excel : 2016

Message par Le Drosophile » 13 juillet 2019, 17:03

Bonjour,

Après avoir modifié les codes suivants :

Sumdel (ancien)
SpoilerAfficher
Sub sumdel()

Dim x As Long

Application.EnableEvents = False
'Application.ScreenUpdating = False

For x = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
    If Cells(x, 3) = Cells(x - 1, 3) And Cells(x, 2) = Cells(x - 1, 2) And Cells(x, 8) = Cells(x - 1, 8) Then
        Rows(x).delete Shift:=xlUp
    End If
Next

Application.EnableEvents = True
'Application.ScreenUpdating = True
Sumdel (nouveau)
SpoilerAfficher
Sub sumdel01()

    lrco = co.Cells(Rows.Count, 1).End(xlUp).Row
    lcco = co.Cells(1, co.Columns.Count).End(xlToLeft).Column

co.Range(Cells(2, 1), Cells(lrco, lcco)).RemoveDuplicates Columns:=Array(3)

End Sub

Ancien
SpoilerAfficher
   With co
        For del = co.Range("B" & .Rows.Count).End(xlUp).Row To 2 Step -1
            If .Range("B" & del).Value <> n Then
                .Rows(del).delete
            End If
        Next del
    End With
Nouveau
SpoilerAfficher
    With co
    lrco = .Range("A" & Rows.Count).End(xlUp).Row
        .Rows(1).AutoFilter
        .Rows("1:" & lrco).AutoFilter Field:=2, Criteria1:="<>" & n, Operator:=xlAnd
        .Rows("2:" & lrco).delete Shift:=xlUp
        .ShowAllData
    End With
J'ai un temps d'exécution qui atteint 26 secondes.
En comparaison avec mon ancien test, c'est pas immense haha !

Celui-ci prend encore 6 secondes :
CorrectAuto
SpoilerAfficher
Sub CorrectAuto()

Dim dic As Worksheet, co As Worksheet
Dim lrdic As Integer, lrco As Integer
    
Set dic = Worksheets("Bibliothèque")
Set co = Worksheets("Correspondances")

Application.ScreenUpdating = False
    Dim n As Integer
    Dim d() As String
    Dim t As Long, j As Long, p As Long

With dic
    lrdic = .Cells(.Rows.Count, 1).End(xlUp).Row ' compte le nombres de lignes utilisées dans table
    ReDim Preserve d(2, lrdic + 1) ' défini un tableau à 2 dimensions (2 , Nb de lignes)
        For p = 1 To lrdic
            d(1, p) = .Cells(p, 1).Value 'boucle qui charge dans le tableau les anciens codes et les nouveaux
            d(2, p) = .Cells(p, 2).Value
        Next p
End With

With co
lrco = .Cells(.Rows.Count, 1).End(xlUp).Row ' compte le nombre de lignes utilisées dans base

    For t = 1 To lrco ' boucle sur nombre de lignes de base
    For j = 1 To lrdic ' boucle sur nombre de lignes de table

    If d(1, j) = .Cells(t, 3).Value Then _
    .Cells(t, 3).Value = d(2, j) ' compare la valeur ancienne du tableau avec le contenu de la cellule colonne a de base
    Next j ' change la valeur si la comparaison est vrai
    Next t
    .Activate
End With
End Sub
Mais celui-ci, le plus gourmand prend 15 secondes, pourtant lors des premiers tests, il ne me semblais pas qu'il prenait tant de temps :
structab
SpoilerAfficher
Sub structab()
    Dim tb As ListObject
    
    Set dc = Worksheets("Database complete")
    Set ds = Worksheets("Database synonymes complete")
    Set co = Worksheets("Correspondances")
    
    With co
        If .ListObjects.Count Then
        .ListObjects(1).Name = "Correspondances"
        Else
        Set tb = .ListObjects.Add(xlSrcRange, .Range("A1").CurrentRegion)
        tb.Name = "Correspondances"
        End If
    End With
End Sub
Comme on me l'a fait remarquer, pensez-vous que ça puisse simplement venir du fait que j'utilise "Correspondances" pour désigner plusieurs choses dans tout le document ? (Feuille, tableau, liste, etc.)

Bonne journée !
L
Le Drosophile
Membre fidèle
Membre fidèle
Messages : 317
Appréciation reçue : 1
Inscrit le : 27 juin 2018
Version d'Excel : 2016

Message par Le Drosophile » 20 septembre 2019, 18:15

Bonsoir,

Je n'ai rien trouvé pour accélérer l'exécution de ce code pour le moment :/
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message