[VBA EXCEL] Mon bouton prend tout la process ! [VBA EXCEL]

Résolu
jppougaud59 Messages postés 5 Date d'inscription samedi 3 décembre 2011 Statut Membre Dernière intervention 18 février 2012 - 17 févr. 2012 à 21:18
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 21 févr. 2012 à 00:01
Bonjour à toutes et à tous,

un bouton appel une sub qui traite énormément d'informations sur le disque et effectue beaucoup de traitement....

ma question est : Pourquoi mon application.statusbar="mon texte avec les variables concernées"

ne s'affiche pas et que mon bouton reste enfoncé jusqu'a la fin du traitement...

on dirai que dès qu'on clique dessus, le bouton prend toute la mémoire ou le proce...

du coup, il ne ce relache pas et mes informations (comme çà met énormément de temps à traiter, je veux informer l'utilisateur de la progression...) ne s'affichent plus...

C'est comme si le programme était trop balaise (alors que pas du tout) et qu'il bouffait tout le HANDLE !!!!


Helpppp please !

17 réponses

cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
18 févr. 2012 à 00:02
Bonjour ucfoutu,

Je ne suis pas d'accord du tout avec tes exemples de code. Il faut qu'il fasse ceci :


Si on pousse l'optimisation, on arrive à cela


Je suis étonné que tu n'y ais pas pensé, toi qui donne si souvent des conseils forts judicieux.

> jppougaud59
Si tu as un grand nombre de ligne à traiter,
as tu mis ScreenUpdating à False en début de procédure et à True avant de quitter cette même procédure ?

Cheyenne
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 févr. 2012 à 21:50
Bonjour,
C'est quoi, "bouffer le handle" ?
C'est nouveau, çà !

Bref ! cela sent à plein nez à la fois une boucle sans fin, d'une part, et l'absence d'un doevents pour rafraichir, d'autre part (les deux).

Mais en lisant (j'ai des lunettes très spéciales) le magnifique bout de code que tu nous as présenté ici, je dirais que tout se passe entre la ligne x et la ligne y de ton code.
Corrige-les !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
jppougaud59 Messages postés 5 Date d'inscription samedi 3 décembre 2011 Statut Membre Dernière intervention 18 février 2012
17 févr. 2012 à 22:30
lol, c'est un peu compliquer d'expliquer plus que çà le code... c'est pour mon boulot...

pour faire court...

une liste de +3000 nombre composé de 3 chiffres soit en tout 9, attachés...

exemple : 111222333

de part le dernier tièrs nous obtenons un nombre altérnatif essentiel

exemple : 000,050,100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950

se qui donne : 111222333 ---> 111222300 (je pense que vous pigez le truc)

si cela était : 111222385 ---> 111222350

et ainsi de suite...

sauf que,

je veux que si plusieurs lignes, par exemple + de 8 nombres soit comme çà :

111222101
111222212
111222323
111222434
111222545
111222656
111222767
111222878

j'abrège le tout en : 111222000

jusque là tout va bien !

le problème est que je veux faire un : application.statusbar="les informations à indiquer à

l'utilisateur par rapport à la boucle" (qui à une fin je vous l'assure !!! lol...)

malheureusement, il ne s'affichent qu'au début.

après, la boucle continue mais plus lentement et plus rien ne s'affiche....


donc, j'ai vraiment l'impression que la procédure (sub) bouffe toute la mémoire de mon PC !!!


quelqu'un à déjà vécu çà???

en précisant que c'est en VBA sous EXCEL 2003.

Merci.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 févr. 2012 à 22:38
Bonjour,

Comme le disais Ucfoutu, utilises DoEvents pour libérer la gestion des évènements.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 févr. 2012 à 22:40
C'est bien ce que je pensais :
une erreur et une maladresse entre la ligne x et la ligne y du code que tu as écrit.
C'est une plaisanterie ?
Si cette partie de ton code est si secrète, pas grave ===>> voilà sa correction (code ci-dessous) : ===>>
 



à mettre en la ligne de ton code disant :
 


et celle disant
 


Bonne chance.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
jppougaud59 Messages postés 5 Date d'inscription samedi 3 décembre 2011 Statut Membre Dernière intervention 18 février 2012
17 févr. 2012 à 22:44
bon bahh... je comprend en fait,

le niveau est un peu... trop chaud c'est çà?

dès qu'il n'y a que des chiffres c'est dur...

Et bien........... Je veux vous rie à tous que...

Ouais c'est dur !


j'attends d'autres réponses quand même, il y a du monde ici, et les plaisanterie, çà m'intéresse
pas trop, c'est pour mon taff et c'est important pour moi...

donc, j'attendrais et lirai au fur et a mesure...

Je vous dis merci mais j'ai pas eut de réponse.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
18 févr. 2012 à 00:14
Bonjour,

Et, je le répète, comme le conseillais Ucfoutu dans son premier message, as-tu utiliser DoEvents pour permettre le rafraichissement de l'affichage des fenêtre ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 févr. 2012 à 08:23
Bonjour, NHenry,
Il n'y a pas que les DoEvents, à mon avis.
Regarde ce qu'il a écrit ici :
après, la boucle continue mais plus lentement et plus rien ne s'affiche....


donc, j'ai vraiment l'impression que la procédure (sub) bouffe toute la mémoire de mon PC !!!

Ce qui donne à penser qu'il y a autre chose encore, d'où la nécessité de voir son code.
Et il s'obstine à ne pas le montrer
Cette discussion risque donc de ne jamais se terminer

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 févr. 2012 à 11:21
Allez, va,
on va se débarrasser de ce sujet en dépit de la très mauvaise volonté du demandeur, qui devrait s'interroger sur qui, ici, est un plaisantin :
Je lui recommande de faire ce petit test tout bête :
Private Sub Command1_Click()
  Dim i As Long
  For i = 1 To 100000
    StatusBar1.SimpleText = i
    DoEvents
    StatusBar1.Refresh
  Next
End Sub

Sans commentaires.

Ca, toutefois, c'est pour le seul affichage.
Reste l'autre point : son "bouffage de mémoire" et son "ralentissement" (si ses facultés d'appréciation sont bonnes et que sa mémoire est réellement "bouffée") ===>>
Rien à conseiller sans voir le code, à commencer par les opérations faites, tant sur ses chaines de caractères, que, éventuellement, lors de l'affichage.
On ne sait même pas, en plus, si cette statusbar est créée en mode création ou dynamiquement (et si dynamiquement, comment).
Voilà !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 févr. 2012 à 11:31
Je ne lui ai pas précisé (tant je veux penser qu'il n'est pas, lui, un "plaisantin" et se penche avec sérieux sur les contrôles qu'il utilise ) que la propriété style d'un tel statusbar doit être sbrSimple. (c'est tellement évident !)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
jppougaud59 Messages postés 5 Date d'inscription samedi 3 décembre 2011 Statut Membre Dernière intervention 18 février 2012
18 févr. 2012 à 18:34
MErci a tous pour vos conseils, je vais utiliser et vous dire quoi. Si je ne montre pas mon code c'est que je respecte la confidentialité de la boite dans laquelle je bosse. PArdon si mes explications vous ont sembler pas très compréhensibles. En tout cas je ne suis pas un "plaisantin".

Bonne soirée.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 févr. 2012 à 18:50
la confidentialité de la boite dans laquelle je bosse

Je ne veux pas faire de polémique, jppougaud59, mais :
- le bout de code qu'il t'était demandé de montrer ne concernait que cette boucle
- si tu pensais que son contenu était confidentiel ===>> raté ===>> ton tout premier message dévoile déjà presque tout !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 févr. 2012 à 08:36
Bon.
Nous sommes dimanche
malheureusement, il ne s'affichent qu'au début.

après, la boucle continue mais plus lentement et plus rien ne s'affiche....


Je t'ai déjà répondu en ce qui concerne l'affichage à proprement parler (et je pense que mon petit test t'a fait comprendre cet aspect et qu'il es maintenant réglé)
Reste le point le plus important : la lenteur accrue au fur et à mesure de l'avancement.
C'est cet aspect, qui nécessite de connaître de code utilisé dans la boucle. Or c'est ce code que tu veux à tout prix garder secret ! Il nous faut quoi faire, alors ? ==>>
- deviner chaque opération de ta boucle ?
- Faire des quantités d'hypothèses et répondre à chacune des hypothèses ?
Ce' n'est pas raisonnable !
cependant, comme je te l'ai dir dans mon message juste au dessus :
si tu pensais que son contenu était confidentiel ===>> raté === >> ton tout premier message dévoile déjà presque tout !

les indications données par ton premier message (groupes de 3 tiers, manipulations d'un tiers, notamment) me donnent à penser à deux causes possibles (et les plus vraisemblables) dans ce genre de mécanisme de chiffrement :
cause 1 : maladresse dans la recherche des correspondances de groupes (j'espère que tu n'as pas utilisé deux arrays ou, pire, une chaîne de caractères avec ou sans séparateur)

cause 2 : la concaténation, tant dans un "sens" que dans le "sens inverse" d'une chaîne avec les caractères à lui ajouter en sa fin, et ainsi de suite, tout au long de la boucle de traitement. Et ralentissement encore plus grand, au fur et à mesure de l'avancement, si la chaîne qui s'agrandit ainsi s'affiche dans une textbox.

Voilà voilà..

J'ai donc ici parlé de l'hypothèse la plus vraisemblable. Je ne vais tout de même pas, au prétexte de la "confidentialité" que tu veux "préserver", traiter toutes les autres causes de ralentissement possibles dans un traitement (ton code) dont tu refuses de nous parler avec précision.
Bon dimanche.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 févr. 2012 à 10:40
Et pour illustrer ce que je veux dire, en parlant des concaténations maladroites, je t'ai vite fait bien fait "fabricotté" ce petit exemple plus que "parlant" :
Sur ta feuille de calcul :
- un bouton de commande CommandButton1
- une textbox Textbox1 avec sa propriété multiline à True

code :
Private Sub CommandButton1_Click()
  Dim i As Long, deb As Single
  TextBox1.Activate
  TextBox1.Text = vbNullString  'on part à vide
  DoEvents
  MsgBox "on va lancer pour écrire 1000 concatenations maladroites"
  deb = Timer
  
  For i = 1 To 1000
    TextBox1.Text = TextBox1.Text & Format$(i, "00000000") & vbCrLf
  Next
  MsgBox Timer - deb & " secondes pour 1000 articles"
  
  TextBox1.Text = vbNullString  'on part à vide
  DoEvents
  MsgBox "on va lancer pour écrire 10000 concatenations maladroites - sois très patient"
  deb = Timer
  
  For i = 1 To 10000
    TextBox1.Text = TextBox1.Text & Format$(i, "00000000") & vbCrLf
  Next
  MsgBox Timer - deb & " secondes pour 10000 articles (bien plus que 10 fois plus que pour 1000 articles, hein)"
End Sub

J'ai ici fait exprès de choisir la méthode la plus lente. C'est toutefois celle que je vois le plus souvent, dans les bouts de code qui nous sont montrés par les demandeurs.
Les mêmes lenteurs, bien évidemment, pour toute concaténation ainsi faite (textbox ou non). La textbox ne fait que les amplifier encore plus.

Voilà voilà ...
Tu commences peut-être à comprendre pourquoi analyser ton code nous permettrait de te conseiller. Sans le voir ===>> impossible !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 févr. 2012 à 10:55
Ah oui. J'ai oublié de te dire :
En agissant adroitement, on sait par contre faire ces 10000 concaténation en environ [u]1 dixième de seconde (comparées à 2 minutes et des poussières)
/u
Alors ? Tu le montres, ce code===>> et je peux t'aider.
Tu ne le montres pas ===>> tu te débrouilles seul.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
20 févr. 2012 à 23:35
bonjour
si sa bouffe la mémoire...pouquoi garder en mémoire?
(dans la phase calcul)
@+JP
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 févr. 2012 à 00:01
Bonjour, mjpmjp,

Cà ("bouffer la mémoire"), ce n'est que ce qu'il pense et fait partie d'un flot === >>>

....
prend tout la process ! [VBA EXCEL]
.....
le bouton prend toute la mémoire ou le proce...
....

C'est comme si le programme était trop balaise (alors que pas du tout) et qu'il bouffait tout le HANDLE !!!!
.....

qui en dit très long sur sa vision des choses.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous