Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Lenteur sur rafraichissement Listbox

Guigui

XLDnaute Occasionnel
Bonsoir le forum,

Voici le "problème"

J'ai un listbox en multicolonnes (5) qui s'alimente via un rowsource sur une zone défini "FNL"

Quand je clic un item, les données de la ligne se "transposent" en arriere plan sur la feuille
Sur une autre feuille, un simple "=A1" reprend les données de tels ou tels céllules
Sur une autre feuille, le contenu de la celulle en rapport avec "A1" est récuperer avec ceci :
=SI(ESTERR(INDIRECT("LIMITATIONS!"&ADRESSE(MIN(SI(ESTNUM(CHERCHE(E14;zone));LIGNE(zone)));MIN(SI(ESTNUM(CHERCHE(E14;zone));COLONNE(zone)))-1)));"";INDIRECT("LIMITATIONS!"&ADRESSE(MIN(SI(ESTNUM(CHERCHE(E14;zone));LIGNE(zone)));MIN(SI(ESTNUM(CHERCHE(E14;zone));COLONNE(zone)))-1)))

qui fait partie de la zone défini "FNL"

du coup mon listbox (toujours affiché) se met à jours en replissant une des colonnes suite au résultat de la formule

Mon souci est que cet update est trés lent ! de 4 à 10 seconde c'est variable !

j'ai bien pensé à fermer mon USF une fois le "clic" effectuer, et de le faire réouvrir dans la foulée. (unload me suivit de TOTO.show)
cela fonctionne (malgrés un petit scintillement - normal) mais une fois que je clic sur la croix ou sur un "unload me" j'ai un bug dans le private sub "click" ... que je ne ccomprend pas

Existe t il une facon de mettre à jour une listbox avec action, un sorte de "rechargement"

Merci d'avance pour votre aide.

Je sent bien que c'est pas trés clair, mais en essayant de réduire mon fichier en taille acceptable, le probleme de lenteur disparait !! (moins de données)

Guillaume
 

skoobi

XLDnaute Barbatruc
Re : Lenteur sur rafraichissement Listbox

Bonsoir Guigui,

tout dépend du nombre de données (lignes) que tu récupères dans la listbox.
Les formules peuvent aussi ralentir le traitement, peut-être stopper temporairement ce calcul pendant le traitement.
Et aussi la manière dont tu régénère cette listbox.
Sans fichier, et une explication plus détaillé du rafraichissement et du problème car:
perso j'ai pas compris grand chose, difficile de t'aider plus.

bonne soirée.
 

Guigui

XLDnaute Occasionnel
Re : Lenteur sur rafraichissement Listbox

re,

J'avoue c'est le bronx. je joint un jpg qui explique le principe...

Sinon est ce que le fichier "réduit" donc sans problème apparent peut être utile ?
 

Pièces jointes

  • Explication.jpg
    51.6 KB · Affichages: 84
  • Explication.jpg
    51.6 KB · Affichages: 96
  • Explication.jpg
    51.6 KB · Affichages: 91

Guigui

XLDnaute Occasionnel
Re : Lenteur sur rafraichissement Listbox

Re,

J'ai réussi à réduire et le problème de lenteur est toujours présent... ouf ...

le truc :

clic droit sur une lettre ...
 

Pièces jointes

  • Voici.zip
    39.2 KB · Affichages: 36
  • Voici.zip
    39.2 KB · Affichages: 31
  • Voici.zip
    39.2 KB · Affichages: 34

skoobi

XLDnaute Barbatruc
Re : Lenteur sur rafraichissement Listbox

Re,

le traitement chez-moi dure 1s..... mais cela est dû "au moteur que j'ai sous le capot du PC"...
C'est le temps que met excel à calculer les formules et là, il n'est rien possible de faire.
Si, peut-être optimiser tes formules, à condition que tu expliques ce qu'elles font, mais là, je passe la main.
Ou alors, remplacer les formules par un calcul fait en VBA, qui peut être plus rapide...
 

GeoTrouvePas

XLDnaute Impliqué
Re : Lenteur sur rafraichissement Listbox

Bonsoir,

+1 Skoobi

Difficile de dire d'où ça peut venir sans avoir une idée de l'étendue des zones traitées par les formules.

Comme Skoobi, j'insiste sur le fait que les calculs vba sont beaucoup plus rapide que les formules (plus les zones sont larges, plus la différence se ressent).

En plus en passant par vba tu peux avoir l'avantage de bloquer le rafraichissement de l'image pendant tes calculs ce qui, en général, améliore grandement la rapidité de la macro (particulièrement dans les cas où tu modifie la valeur d'un grand nombre de cellule). Explique un peu plus en détail le fonctionnement de tes formules et on pourra t'aider à te lancer dans vba (si tu n'y as pas encore touché).

Bonne soirée
 

Guigui

XLDnaute Occasionnel
Re : Lenteur sur rafraichissement Listbox

re bonsoir à tous,

Je vois bien le problème... pourtant mon pc est bien doté !

Je me vois pas le courage de changer toutes mes formules en VBA ...
C'est super lourd, et en cas de bug j'aurais plus de facilité à comprendre d'ou cela peut venir.
Le VBA c'est extraordinaire mais je comprend rarement (en détail) les soluces qu'on me propose

je vais en rester là je pense.

Merci à vous tous
Slts
Guillaume
 

Guigui

XLDnaute Occasionnel
Re : Lenteur sur rafraichissement Listbox

Reflexion faite, le calcul des formules et l'affichage du resultat est quasi instantané dans la feuille. la latence ce fait uniquement lors de l'affichage (ou de la mise à jour) du USF avec la listbox ...
Bon ca doit pas faire avancé le Schmilblick mais bon
 

eriiic

XLDnaute Barbatruc
Re : Lenteur sur rafraichissement Listbox

Bonjour,

J'ai l'impression que ta formule en fonction personnalisée donnerait :
Code:
Function codeLettre(poids As Double) As String
    Dim c As Range
    codeLettre = ""
    With Range("zone")
        Set c = .Find(poids)
        If Not c Is Nothing Then
            codeLettre = c.Offset(0, -1).Value
        End If
    End With
End Function
si ce n'est que tu as un problème de type de donnée, tes valeurs en limitations!B5:B19 ne sont pas numériques.
En attendant de régler ce problème (un collage spécial 'addition' 0 dans la feuille PDC rajoute des erreurs), pour tester la fonction personnalisée remplace les valeurs par leur saisie directe dans 'limitations'.

eric
 
Dernière édition:

Guigui

XLDnaute Occasionnel
Re : Lenteur sur rafraichissement Listbox

Re bonsoir !

Toutes mes excuses ! je n'ai pas vu du tout la dernière réponse !!

Du coup, Eriiiic, je dois la mettre ou cette fonction ??

Autres infos,

J'ai (en fouillant sur le forum) trouvé un alternative à l'evenemet "click"
il s'agit de "MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)"

du coup le contenu de mon evenement "click" je l'ai supprimer et deplacer dans le nouvel évenement :

Private Sub LCF_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Select Case Button
Case 1: 'MsgBox "clic gauche"
If ActiveCell.Borders(xlEdgeBottom).LineStyle = xlContinuous Then
ActiveCell.Offset(1, 0) = LCF.List(LCF.ListIndex, 0)
ActiveCell.Offset(2, 0) = LCF.List(LCF.ListIndex, 2)
ActiveCell.Offset(4, 0) = LCF.List(LCF.ListIndex, 1)
End If

If ActiveCell.Borders(xlEdgeTop).LineStyle = xlContinuous Then
ActiveCell.Offset(-5, 0) = LCF.List(LCF.ListIndex, 0)
ActiveCell.Offset(-4, 0) = LCF.List(LCF.ListIndex, 2)
ActiveCell.Offset(-2, 0) = LCF.List(LCF.ListIndex, 1)
End If
'POSITION = ActiveCell.Offset(0, -1)
Unload Me

End Select
End Sub

et là ! aucun problème de lenteur ! (??), pourtant la formule matricielles est toujours d'actualité ... !

le contenu de mon evenement "click" étais identique.
A noter .. si je rajoute dans le "click" un "Unload me" j'ai un bug.
stop sur : ActiveCell.Offset(2, 0) = LCF.List(LCF.ListIndex, 2)
Pourquoi à la demande de fermeture, le code est relu ??
(pas de bug avec un unload Me dans l'evenement mouseUp)

Avez vous une explication du pourquoi du comment ?
Du coup l'even. MouseUp me convient mais .. je trouve pas normal de devoir l'utiliser au lieu de l'even. "CLick"
 

eriiic

XLDnaute Barbatruc
Re : Lenteur sur rafraichissement Listbox

Bonjour,

La fonction personnalisée est à mettre dans un module et est appelée dans la feuille 'ORDO - POSITIONS' en remplacement de ta formule.

Dans la feuille 'LIMITATIONS' j'ai remplacé les poids par leur valeur numérique car il y avait plein de valeur avec un mauvais format (texte)

eric
 

Pièces jointes

  • Voici.zip
    40 KB · Affichages: 32
  • Voici.zip
    40 KB · Affichages: 30
  • Voici.zip
    40 KB · Affichages: 29

eriiic

XLDnaute Barbatruc
Re : Lenteur sur rafraichissement Listbox

Re,

Non, et toi as-tu essayé en remplaçant par la fonction ?

Je suis comme les autres, avec tes explications incomplètes, un fichier incomplet et des explications plus qu'approximatives sur le fonctionnement de ton classeur on ne peut pas tester grand chose.

Quand je clic un item lequel et où ?
Sur une autre feuille laquelle ?
Sur une autre feuille encore...
mon listbox lequel ?
unload me suivit de TOTO.show pas de userform TOTO dans le projet,
clic droit sur une lettre ... ah ouais ?

Et pour être franc quand je vois des CommandBars.add ou .delete je préfère arreter tout test, pas envie de passer 1/4h à remettre en état mon excel.

Je me suis juste attaché à remplacer les formules matricielles au cas ou...

eric
 

Discussions similaires

Réponses
16
Affichages
519
Réponses
18
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…