Macro très lente

Signaler
Messages postés
154
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
16 septembre 2021
-
Messages postés
154
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
16 septembre 2021
-
Bonjour,

J'ai créé un planning annuel dont l'une de mes macros est très lente. (Changement de mois d'affichage)
Comment puis-je vous envoyer le fichier si cela intéresse qqn de me le regarder et voir si une piste d'amélioration est possible?

Cordialement
--

4 réponses

Messages postés
7531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2021
127
Bonjour,

voir cela pour mesurer le temps d'exécution d'une macro:

https://excel-malin.com/faq/vba-faq/comment-mesurer-la-vitesse-des-macros-vba/

voir ceci pour diminuer le temps d'exécution d'une macro

https://docs.microsoft.com/fr-fr/office/vba/api/excel.application.screenupdating

Messages postés
2468
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
15 septembre 2021
141
Bonjour
L'envoi de fichier n'est pas spécialement conseillé sur Codes-Sources.
En expliquant ce que fait la macro et en montrant le code de celle-ci ( voir https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code pour montrer du code ) ceci devrait être solutionnable .
En mettant le plus de détails sur le code en question ( variables utilisées, explication sur les boucles internes, etc ... ) tu mettras toutes les chances de ton côté .
Messages postés
154
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
16 septembre 2021

La macro suspecte est lancée par une liste déroulante dans la feuille excel.
On choisit le mois et ainsi la macro affiche le planning du mois sélectionné en masquant toutes les colonnes non concernées.
Le code est le suivant:

Private Sub ComboBox1_Change()
Dim Col As Integer
Dim mois, moisref As String

moisref = ComboBox1.Value
    Application.ScreenUpdating = False
    Cells.EntireColumn.Hidden = False
    If ComboBox1.Value <> "Tous" Then
        For Col = 4 To Cells(8, Columns.Count).End(xlToLeft).Column Step 1
        
        jourdeb = Format(Cells(8, Col).Value, "dd/mm/yyyy")
                mois = Cells(8, Col).Value
        mois = MonthName(Month("" & mois))
        'jourdebmois
        'jourfinmois
 '*******************************************************************
      mois = Application.Match(ComboBox1.Value, Sheets("Ferié").Range("D4:D15"), 0)

     jourdebmois = Format(DateSerial(Range("A3"), mois, 1), "dd/mm/yyyy")

     jourfinmois = Format(DateSerial(Range("A3"), mois + 1, 1) + 3, "dd/mm/yyyy")
        
        'MsgBox "du " & jourdebmois & " au " & jourfinmois
        
 '**********************************************************************
        'MsgBox "" & mois
            'If mois <> "" & ComboBox1.Value Then Cells(8, Col).Resize(, 1).EntireColumn.Hidden = True
            If Int(CDate(jourdeb)) < Int(CDate(jourdebmois)) Then
            Cells(8, Col).Resize(, 1).EntireColumn.Hidden = True
            End If
            
            If Int(CDate(jourdeb)) > Int(CDate(jourfinmois)) Then
            Cells(8, Col).Resize(, 1).EntireColumn.Hidden = True
            End If
            
        Next Col
    End If
    
  Call TextBox1_Change
  
End Sub


Pour info, j'utilise cette même macro dans un autre planning contenant moins de ligne (mais je ne vois pas où est l'impact!!?) et le changement est instantané.

MErci de vous pencher sur mon problème
Messages postés
154
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
16 septembre 2021

Pour info, j'utilise cette même macro dans un autre planning contenant moins de ligne (mais je ne vois pas où est l'impact!!?) et le changement est instantané.

En écrivant cela, j'ai eu l'idée de tester en supprimant tous les onglets de planning hebdomadaire et effectivement la macro tourne normalement.
En fait mon fichier devient trop lourd car chaque semaine je prends une photo de mon planning annuel (où sont gérées les absences) pour la coller dans le planning hebdomadaire correspondant. De cette manière si des changements sont portés dans le planning annuel ils sont automatiquement reportés dans le planning hebdo.
Je n'ai trouvé que ce moyen!!


--