Pourquoi c'est si long ?!

Fermé
Moto84 Messages postés 26 Date d'inscription vendredi 12 mai 2017 Statut Membre Dernière intervention 6 mars 2024 - Modifié le 4 août 2020 à 13:04
Moto84 Messages postés 26 Date d'inscription vendredi 12 mai 2017 Statut Membre Dernière intervention 6 mars 2024 - 6 août 2020 à 09:35
Bonjour,
J'ai créé des macros sur un fichier excel 2010 mais elles sont très longues à réagir, parfois jusqu'à 10 secondes. Il me semble que je ne peux pas faire plus court pourtant... J'ai fouillé sur les forums pour voir comment optimiser un code vba mais par exemple, on propose de supprimer des "select" mais si je fais cela, la macro ne fonctionne plus du tout. Est-ce que quelqu'un pourrait me dire ce qui coince sur ces macros et comment les accélérer svp ? Merci

1ère macro

Sub PlazzaSPAThomas()
'
' PlazzaSPAThomas Macro
'
    Application.ScreenUpdating = False
    Sheets("RE").Select
    ActiveWindow.ScrollRow = 1
    ActiveSheet.PivotTables("TCD_RE").PivotFields("Equipe").ClearAllFilters
    ActiveSheet.PivotTables("TCD_RE").PivotFields("Equipe").CurrentPage = _
        "Thomas Pascale"
    Call MiseEnForme
    Application.ScreenUpdating = True
End Sub

2è macro

Sub MiseEnForme()
'
' Mets les colonnes et les lignes à la bonne dimension
'
    Application.ScreenUpdating = False
    Columns("A:A").ColumnWidth = 36
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Columns("B:B").ColumnWidth = 28
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Columns("C:C").EntireColumn.AutoFit
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Columns("D:D").ColumnWidth = 45
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Rows("2:1500").RowHeight = 25
    Columns("C:E").Select
        With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
    End With
    Selection.Font.Bold = True
    Rows("2:5").EntireRow.Hidden = True
    Rows("6:6").RowHeight = 43
    Rows("6:6").Select
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    With Selection.Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    ActiveWindow.DisplayGridlines = False
    Application.ScreenUpdating = True
End Sub

4 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
4 août 2020 à 13:42
Bonjour,

La procedure MiseEnForme est tres rapide, bien quelle pourrait etre plus courte en groupant les colonnes car il y a pas beaucoup de difference
0
Bonjour,
Ok je vais essayer de faire des trucs plus uniformes pour essayer de gagner du temps sur le déroulement.
Merci ;-)
0
yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 Ambassadeur 1 551
4 août 2020 à 15:09
bonjour, c'est long, 10 secondes. as-tu exécuté en pas à pas pour déterminer quelle instruction prend du temps?
tu peux supprimer les Select, en faisant ainsi, par exemple:
au lieu de:
Rows("6:6").Select
With Selection

tu peux faire:
With Rows("6:6")

que fais-tu en ligne 81? ne viens-tu pas de faire ce travail en ligne 70?
0
Bonjour,
J'avais vu des astuces de ce style sur des forums mais si je fais cela, la macro "plante". Peux-être parce que je suis en Excel 2010...
Dans le pas à pas, il n'y a rien de particulier. J'essaierai de faire tourner cette macro chez moi, sur mon pc perso et non pro pour voir. Merci pour ta réponse en tout cas ;-)
0
yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551
5 août 2020 à 15:10
elle plante avec quel message d'erreur, sur quelle ligne?
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709 > yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024
5 août 2020 à 18:11
Salut, ca roule?

Comprends pas ces 10s, car la mise en forme prend max 0.02 s avec son code!
Peux pas tester le TCD sans son fichier, bizarre...
0
yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551 > f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024
5 août 2020 à 19:05
@f894009 tout va!
le code est bizarre, mais, à part le TCD, rien qui pourrait durer si longtemps, en effet.
sauf si nous n'avons pas étés informés de tout, ce qui m'étonnerait pas, étant donné le flou des réponses..
0
yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551
5 août 2020 à 19:05
que fais-tu en ligne 81? ne viens-tu pas de faire ce travail en ligne 70?
0
Moto84 Messages postés 26 Date d'inscription vendredi 12 mai 2017 Statut Membre Dernière intervention 6 mars 2024
6 août 2020 à 09:35
Bonjour,

Excusez-moi, je ne suis qu'un "bidouilleur" d'Excel et je tatonne un peu. D'abord, quand je dis que la macro se "plante", c'est que rien ne se passe après avoir fait certaines modifs comme enlever des .select par exemple. Ensuite, j'ai fait tourner ligne par ligne et c'est très rapide jusqu'à (par ex)
ActiveSheet.PivotTables("TCD_RE").PivotFields("Equipe").ClearAllFilters
ActiveSheet.PivotTables("TCD_RE").PivotFields("Equipe").CurrentPage = _
"Thomas Pascale"
donc la mise à jour du TCD.
Si vous encore un peu de temps pour m'aider, je vous joins le fichier complet dans ce lien.
https://www.cjoint.com/c/JHghy7SNAN4
J'ai lu les conditions, et le fichier comporte des noms mais rien de confidentiel comme les revenus ou la santé.
Et si vous n'avez pas de temps, c'est pas grave, je chercherai une autre solution sans TCD.
Merci déjà pour vos interventions.
0