XL 2013 problème de charge mémoire

patricktoulon

XLDnaute Barbatruc
Bonsoir a tous
j'ai fini mon creatorribbonX imageMso V4.X
dans ce fichier j'ai utilisé ma boite de dialog perso pour les icone excel qui date de 2020

cependant j'ai mis la liste des icon a jour et il se trouve que pour la lettre O ou P ou encore S j'ai plus de 250 icônes voir 348 pour s ou P
ce qui fait que ma fausse listview prends de la memoire en se chargeant
y aurait il un moyen de partager en 3 listes par exemple quand il y a trop d'icônes

cliquez sur la trre P ou S vous verez
 

Pièces jointes

  • test XLD dialog imageMso.xlsm
    70.8 KB · Affichages: 13
Solution
Bonsoir @Dudu2 oui ben moi je n'ai que 8 giga sur W10
et le portable encore moins alors selon le pc c'est diférent mais tout de même
de toute facon comme d' habitude j'ai fini par trouver une solution

en fait c'est le classing des "bt" ajouter dynamiquement qui posait probleme
j'ai donc supprimé le classing et je me sert d'un seul controls(une image transparente
et avec le move et son Y je divise par la hauteur des boutons (int ou pas int) et hop j'ai mon index

là oui c'est rapide 🤣
et voila

patricktoulon

XLDnaute Barbatruc
re
bonjour @Dudu2
ben teste
VB:
Sub rempli()
Range("A1:A30000").Formula = "=ROW()"
End Sub

Sub test1()
 r = Range("A1:A30000").Value
t = Timer
For Each element In r
Next
MsgBox Timer - t
End Sub

Sub test2()
Set r = Range("A1:A30000")
t = Timer
For Each cel In r.Cells
Next
MsgBox Timer - t
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir,

Je ne pense pas que deux boucles vides soient significatives.
Sur ma bécane, avec le code ci-dessous, Test1 prend 0 ms et Test2 prend 54 ms.
30 000 lectures d'une cellule est plus long que la lecture d'un array de 30 000 éléments.

VB:
Sub rempli()
   Range("A1:A30000").Formula = "=ROW()"
End Sub

Sub test1()
   t = Timer
   r = Range("A1:A30000").Value
   For Each element In r: x = element: Next
   MsgBox 1000# * (Timer - t) & " ms."
End Sub

Sub test2()
   t = Timer
   Set r = Range("A1:A30000")
   For Each cel In r: x = cel.Value: Next
   MsgBox 1000# * (Timer - t) & " ms."
End Sub

Préférer le code ci-dessous qui réalise l'opération une centaine de fois pour chaque Test :
(chez moi : Test1 en 0.005 s et Test2 en 0.05 s)
VB:
Sub test1()
   t = Timer
   For i = 1 To 100
      r = Range("A1:A30000").Value
      For Each element In r: x = element: Next
   Next i
   MsgBox Format((Timer - t) / 100#, "0.000\ s.")
End Sub

Sub test2()
   t = Timer
   For i = 1 To 100
      Set r = Range("A1:A30000")
      For Each cel In r: x = cel.Value: Next
   Next i
   MsgBox Format((Timer - t) / 100#, "0.000\ s.")
End Sub
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Bonjour la liste,
Pareil chez moi, j'ai un rapport de 1 à 10 selon qu'on utilise le tableau ou le Range en lecture des valeurs (0.320 vs 3.54) en reprenant le code de @mapomme, et en ajoutant les valeurs de @patricktoulon aux cellules.
VB:
Option Explicit

Sub test1()
    Dim r() As Variant
    Dim t As Single
    Dim i As Long
    Dim k As Long
    Dim x As Variant
   
    Range("A1:A30000").Formula = "=row()"
   
    t = Timer
    For i = 1 To 100
        r = Range("A1:A30000").Value
        For k = 1 To UBound(r, 1)
            x = r(k, 1)
        Next k
   Next i
   MsgBox Format((Timer - t), "0.000 s.")
End Sub

Sub test2()
    Dim t As Single
    Dim i As Long
    Dim cel As Range
    Dim x As Variant
   
    Range("A1:A30000").Formula = "=row()"
   
    t = Timer
    For i = 1 To 100
        For Each cel In Range("A1:A30000").Cells
            x = cel.Value
        Next
    Next i
   MsgBox Format((Timer - t), "0.000 s.")
End Sub
 
Dernière édition:

Statistiques des forums

Discussions
312 211
Messages
2 086 294
Membres
103 171
dernier inscrit
clemm