Affichage UserForm trop lent

  • Initiateur de la discussion Initiateur de la discussion Kim75
  • 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 !

Kim75

XLDnaute Occasionnel
Bonjour

Dans un classeur (avec une base de données de 34 colonnes et 260 lignes), le UserForm (avec une ListView de 2 colonnes) met plus de 40 secondes pour s’afficher. Est-ce normal et peut-on parer à cette lenteur ?

Merci de votre aide, Kim.

PHP:
Private Sub UserForm_Initialize()
Dim i As Long, sNom As String
    Sheets("BD").AutoFilterMode = False
    With ListView1
        With .ColumnHeaders
            .Clear
            .Add , , "Service", 230
            .Add , , "Nbre salaries par service", 80
        End With
        .View = lvwReport
        .FullRowSelect = True
        .Gridlines = True
        Application.ScreenUpdating = False
        Sheets("BD").Select
        i = Sheets("BD").Range("A65536").End(xlUp).Row
        Sheets("BD").Range("A1:AH" & i).Select
        Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
        Sheets("BD").Cells(1, 1).Select
        sNom = ""
        For i = 2 To Sheets("BD").Range("B65536").End(xlUp).Row
            If Sheets("BD").Cells(i, 2) <> sNom Then
                .ListItems.Add , , Sheets("BD").Cells(i, 2)
                .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("BD").Cells(i, 15)
                sNom = Sheets("BD").Cells(i, 2)
            End If
        Next
        ListView1.ListItems(1).Selected = False
        Set ListView1.SelectedItem = Nothing
    End With
    Sheets("Accueil").Select
Application.ScreenUpdating = True
End Sub

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Application.ScreenUpdating = False
    ListView1.Sorted = False
    ListView1.SortKey = ColumnHeader.Index - 1
    If ListView1.SortOrder = lvwAscending Then
        ListView1.SortOrder = lvwDescending
        Else
        ListView1.SortOrder = lvwAscending
    End If
    ListView1.Sorted = True
Application.ScreenUpdating = True
End Sub

Private Sub ImprimeLstVw1_Click()
   Application.ScreenUpdating = False
   Dim Ligne As Integer, Colonne As Integer
   ActiveWorkbook.Sheets.Add
   With ActiveSheet
     For Ligne = 1 To ListView1.ListItems.Count
        .Cells(Ligne, 1) = ListView1.ListItems(Ligne).Text
     For Colonne = 1 To ListView1.ColumnHeaders.Count - 1
        .Cells(Ligne, Colonne + 1) = ListView1.ListItems(Ligne).ListSubItems(Colonne).Text
     Next Colonne
     Next Ligne
   .PrintOut
   Application.DisplayAlerts = False
   .Delete
   Application.DisplayAlerts = True
   End With
   Application.ScreenUpdating = True
End Sub

Private Sub Fermer_Click()
   Application.ScreenUpdating = False
   Unload Me: Sheets(1).Activate
   Application.ScreenUpdating = True
End Sub
 
Re : Affichage UserForm trop lent

Bonsoir Kim75,

Avec le fichier, il serait plus simple de tester....

Ne pas oublier, toutefois, que plus on demande à VBA, plus le temps peut-etre long. Il faut le comparer au même calcul fait "à la main".

Bonne nuit.

Jean-Pierre
 
Re : Affichage UserForm trop lent

Bonjour,

En fait ce n'est pas l'affichage du formulaire qui est lent, mais le recalcul de la feuille qui se fait au moment du tri alphabétique de la colonne B et juste avant l'affichage.

Application.ScreenUpdating = False
Sheets("BD").Select
i = Sheets("BD").Range("A65536").End(xlUp).Row
Sheets("BD").Range("A1:AH" & i).Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Sheets("BD").Cells(1, 1).Select


Pour bien faire il faudrait empecher le recalcul, ou bien mettre des formules moins gourmande en temps sur la feuille BD.

@ bientôt
 
Re : Affichage UserForm trop lent

Bonjour,
C'est le recalcul de la feuille qui prend du temps (Sommeprod)
Voir mettre le recalcul sur manuel peut-être
J'ai supprimer le tri de la macro
Code:
Private Sub UserForm_Initialize()
Dim i As Long, d As Object
Set d = CreateObject("Scripting.Dictionary")

With ListView1
    With .ColumnHeaders
        .Clear
        .Add , , "Service", 230
        .Add , , "Nbre salaries par service", 80
    End With
    .View = lvwReport
    .FullRowSelect = True
    .Gridlines = True
    With Sheets("BD")
        For i = 2 To .Range("B65536").End(xlUp).Row
            c = .Cells(i, 2)
            If Not d.Exists(c) Then
                d.Add c, c
                ListView1.ListItems.Add , , c
                ListView1.ListItems(ListView1.ListItems.Count).ListSubItems.Add , , .Cells(i, 15)
            End If
        Next
    End With
    .ListItems(1).Selected = False
    Set ListView1.SelectedItem = Nothing
End With

End Sub
A+
kjin
 
Dernière édition:
Re : Affichage UserForm trop lent

Re

Quelle est l'utilité de répéter les calculs de Ratio pour chaque personnels ? (d'autant plus que la pluspart de ces calculs renvoyent le même résultât)

Le mieux c'est de faire une liste des bureaux avec leur surface sachant que d'aprés le n° du bureau tu retrouve l'étage !

Le tableau des personnels ne devrait contenir que les élements individuels, Nom, Prénom, une liste déroulante avec choix du bureau tiré de la liste précédente, le service sous forme de liste déroulante s'il n'est pas systématique d'aprés le bureau, et à la limite le calculs des ratios individuels.

Ensuite faire des tableaux ratios pour les services et pour les étages

ça soulagera largement les calculs et accélerera le processus du formulaire

Bon courage !
 
Re : Affichage UserForm trop lent

Bonjour Jean-Pierre, Kjin, Poilamonnez, le forum, 🙂

Merci pour vos conseils qui m’ont permis d’alléger considérablement la base de données tout en gardant les mêmes objectifs.

Pour le UserFom1, je pense que la fonction de tri n’est pas conseillée, je crains qu’elle fasse ralentir le processus comme avant.

En revanche, avec la fonction de tri que j’ai maintenue pour le UserFom2, je rencontre 2 principaux soucis avec un 3em de moindre importance :

1. Lorsqu’on trie la base de données dans sa totalité, le tri ne ressort pas dans l’impression, l’ordre des éléments de colonnes reste figé sur une forme initiale inchangeable.

2. Lorsqu’on opère une sélection et fait un tri, là aussi le tri ne ressort pas dans l’impression, l’ordre des éléments de colonnes reste figé sur une forme initiale inchangeable.

3. Le code du tri utilisé ici n’est prévu pour trier que du texte seulement, ce qui fait que la 5em et dernière colonne (surface individuelle) qui comporte des nombres n’est pas triée.



Cordialement, Kim.
 
- 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
247
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
489
  • Question Question
XL 2021 listbox
Réponses
18
Affichages
289
Réponses
10
Affichages
282
Retour