Lenteurs fichier Excel 2013 avec macro VBA

Bonjour,

Je me permets à nouveau de faire appel à la communauté, son aide m'ayant été très précieuse les fois précédentes.

j'ai créé un fichier excel sur Excel 2013 servant à suivre l'avancement des travaux des dossiers de mon cabinet.

J'ai une liste déroulante dans laquelle on choisi la déclaration que l'on souhaite afficher. C'est assez simple comme fichier.

Cependant, depuis 2 semaines, la macro met beaucoup de temps à s'exécuter (temps entre le moment où on choisit la déclaration dans la liste des déclarations et le moment où les colonnes sont triées.

Voici le code :

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("b3")) Is Nothing Then

If Range("b3") = "Toutes" Then

Range(Columns("a"), Columns("er")).Hidden = False

Else

Dim i As Integer

For i = 9 To 180

If Cells(1, i).Value = Cells(3, 2).Value Then Cells(3, i).Columns.Hidden = False

If Cells(1, i).Value <> Cells(3, 2).Value Then Cells(3, i).Columns.Hidden = True

Next

End If

End If

End Sub

Avez-vous une idée d'où ces lenteurs peuvent venir ?

Merci d'avance.

Bonjour GUILLOCHO, bonjour le forum,

Mets la macro en commentaire et teste celle-ci.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer

Application.ScreenUpdating = False

If Not Intersect(Target, Cells(3, 2)) Is Nothing Then
    If Cells(3, 2).Text = "Toutes" Then
        Range(Columns("A"), Columns("ER")).Hidden = False
    Else
        For i = 9 To 180
            If Cells(1, i).Text = Cells(3, 2).Text Then
                Columns(i).Hidden = False
            Else
                Columns(i).Hidden = True
            End If
        Next i
    End If
End If
End Sub

Joseph

Bonsoir,

Essaye comme ça :

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Dim i As Integer
    If Not Intersect(Target, Range("b3")) Is Nothing Then
        If Target = "Toutes" Then
            Range(Columns("a"), Columns("er")).Hidden = False
        Else
            For i = 9 To 180
                If Cells(1, i) = Target Then
                    Columns(i).Hidden = False
                Else
                    Columns(i).Hidden = True
                End If
            Next
        End If
    End If
    Application.ScreenUpdating = True
End Sub

Bonjour,

Encore un poil d'optimisation :

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Dim i As Integer
    If Not Intersect(Target, Range("B3")) Is Nothing Then
        If Target = "Toutes" Then
            Range(Columns("a"), Columns("er")).Hidden = False
        Else
            For i = 9 To 180
                    Columns(i).Hidden = Cells(1, i) = Range("B3")
            Next
        End If
    End If
    Application.ScreenUpdating = True
End Sub

Vous êtes des pros !

Merci beaucoup !

Rechercher des sujets similaires à "lenteurs fichier 2013 macro vba"