EXCEL 2003 : trop de CommandButtons ?

cs_Apolinaire Messages postés 44 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 25 avril 2019 - 18 déc. 2009 à 14:35
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 19 déc. 2009 à 11:12
Bonjour,
J'ai réalisé un classeur EXCEL 2003 avec beaucoup de CommandButtons. C'est à dire 14 sur la première feuille puis environ 10 sur chacune des 4 autres feuilles.
Tout fonctionne comme je veux mais il semble que depuis que j'ai atteint une "certaine quantité" de CommandButtons dans le classeur, il se produit des problèmes au niveau de l'affichage graphique. Parfois, certains boutons, après avoir été cliqués, restent graphiquement comme enfoncés. Le phénomène n'est pas systématique, peu quelquefois s'annuler de lui-même ou au contraire persister tant que je n'ai pas fermé le classeur pour le réouvrir.
J'ai constaté le problème sur 3 PC différents (2 de bureau et 1 portable).
Je n'ai rien trouvé sur le forum sur ce sujet. Certains ont-ils déjà rencontré ce problème et y-a-t-il une solution (autre que supprimer des CommandButtons bien sûr !) ?
Merci de vos réponses.
Apolinaire

14 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 déc. 2009 à 14:55
Bonjour,
ve ne sont pas ces 54 boutons (surtout ainsi répartis) qui sont en eux-même la cause de ce que tu constates.
Le problème est vraisemblablement plutôt dans le code qu'ils exécutent au click et la manière dont est géné ce code. (et là... tu es jusqu'à présent seul à connaître ces précisions !)


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 déc. 2009 à 15:52
Salut
Tout dépend de ce que tu fais dans le code de ces boutons.
Pense à ajouter des DoEvents par ci par là (surtout dans les longues boucles) pour laisser le temps au système d'effectuer ses rafraichissements (graphiques et périfériques)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Apolinaire Messages postés 44 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 25 avril 2019
18 déc. 2009 à 16:07
Merci pour l'astuce Jack. C'est vrai que le travail demandé, sans être astronomique fait souvent appel à plusieurs boucles qui prennent "un certain temps". Je vais essayer le DoEvents et je reviendrai dire si ça arrange mes soucis.
Apolinaire
0
cs_Apolinaire Messages postés 44 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 25 avril 2019
18 déc. 2009 à 17:01
Il semble que le problème soit résolu.
En fait, j'ai essayé les DoEvents sans succès. Mais ça m'avait mis la puce à l'oreille cette histoire d'events.
Il se trouve que toutes mes feuilles à boutons de commandes (qui sont directement sur la feuille, pas dans un UserForm) ont un événement "On_Activate" afin justement de remettre en place les fameux boutons qui ont changé de place suite à des créations ou suppressions de lignes ou de colonnes effectuées par mon code.
J'ai mis en début de routine On_Activate de chaque feuille la commande Application.EnableEvents False et en fin de routine Application.EnableEvents True.
Et ça marche ! Je pense qu'il devait y avoir des moments où ça se mordait la queue, le On_Activate appelant des routines qui activait les feuilles ! Ucfoutu avait donc aussi bien senti d'où venait le problème.
Merci à vous deux de m'avoir mis sur la piste.
Apolinaire
0

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

Posez votre question
cs_Apolinaire Messages postés 44 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 25 avril 2019
18 déc. 2009 à 22:50
Bonsoir,
C'est moi de nouveau. Mauvaise nouvelle, en fait ça ne marche pas, le phénomène s'est reproduit... D'abord sur le PC où j'étais cet après-midi, peu de temps après vous avoir écrit que ça marchait, et ce soir chez moi donc sur un autre PC. On pourrait penser effectivement que ça vient du code mais ce qui est perturbant c'est le côté aléatoire du problème.
Pour moi, un code ça marche ou ça marche pas ; c'est binaire. Et là, avec les mêmes actions (ce dernier point est quand même important), un coup ça marche un coup ça marche pas...
Comme mon classeur est super blindé : classeur, feuilles et code protégés par mots de passe et macros invisibles avec le "Optional Factice As String", j'ai tout déprotégé pour voir. Mais non. Toujours pareil. Voilà ce que ça donne.

Les boutons restent parfaitement opérationnels mais ce n'est pas beau...
Si vous avez des idées, merci.
Apolinaire
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 déc. 2009 à 23:23
Tu vas peut-être trop vite en affirmant ce que tu affirmes là (que si ça marche, ça marche toujours).
Ben non ! pas toujours forcément ! les causes peuvent être multiples, les cas particuliers également. Il se peut même que dans quelques cas, une boucle interminable résulte de références circulaires entrant en jeu en raison de ceci ou de cela qui n'avait pas été bien "vu"...
Voilà ...

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
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 déc. 2009 à 23:27
Vérifie également que tu gères bien et sans faille les éventuelles inhibition et réhabilitation de l'affichage (ScreenUpdating). Une sortie prématurée ici ou là alors que la mise à jour de l'affichage est inhibée et .... plus rien ne bouge graphiquement


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
cs_Apolinaire Messages postés 44 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 25 avril 2019
18 déc. 2009 à 23:34
Pour l'image ci-dessus, Excel n'a pas trop de boulot à faire !
Le bouton "Afficher relevé" sur clic : Sheets("Relevé").Select
Le bouton "Afficher relevé à imprimer" sur clic : Sheets("Relevé à imprimer").Select
Complètement équivalent à cliquer sur l'onglet de feuille en bas de page...
Arrivé sur ces feuilles, il y a un bouton "Retour menu" qui a sur clic : Sheets("Menu").Select
Quand je clique sur ce retour au menu, celui-ci s'affiche correctement jusqu'au moment précis où je bouge la souris. A ce moment le bouton qui était correct se met en apparence enfoncée. Impossible de lui redonner ensuite une apparence "normale". Même après avoir rechangé de feuille. Il faut fermer le classeur et revenir.
Je n'y comprends rien...
0
cs_Apolinaire Messages postés 44 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 25 avril 2019
18 déc. 2009 à 23:37
J'utilise effectivement ScreenUpdating et j'avais pensé à ce problème. J'ai fait un test en mettant en commentaire tous mes Application.ScreenUpdating = False mais sans résultat.
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 déc. 2009 à 23:40
Edite ton code et regarde (edition/recherche) s'il contient ou non des
Application.ScreenUpdating = False

Commence par là ...
Si oui :
Regarde s'il contient des
Exit For, des Exit Do, Exit Sub ou Exit Function et regarde si ces exits ne sont pas exécutés alors que tu es encore à Application.ScreenUpdating = False.
Reviens nous en parler demain après cet examen-là...

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
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 déc. 2009 à 23:55
Autre chose (si tu as des boucles) :
Mets avant chaque boucle:
Debug.print "entré dans la boucle ....un nom pour identifier la boucle...
et après chaque boucle
DebugPrint " sorti de la boucle ....un nom pour identifier la boucle...
puis analyse les messages du debug.print, pour voir si une boucle ne coince pas tout

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
cs_Apolinaire Messages postés 44 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 25 avril 2019
19 déc. 2009 à 00:14
Bonjour Ucfoutu, (ben oui, on est demain...)
Tout d'abord merci de te pencher sur mon problème. C'est très sympa et j'apprécie. Mais n'y passe pas ta nuit quand même, on a le temps !
Comme je te l'ai dit sur un post précédent, j'utilise bien ScreenUpdating et la mise en commentaire de toutes ces lignes n'avait rien donné.
J'ai quand même ausculté mes EXIT.
J'ai 97 fois le mot EXIT dans mon code.
Comme chaque Sub ou Function a une gestion d'erreur, elles commencent toutes par "On Error Goto Erreur" et à la fin j'ai une ligne "Erreur:" juste avant laquelle je place Exit Sub ou Exit Function.
J'ai 81 Exit Sub et 2 Exit Function ainsi placés avant une ligne "Erreur:" suivie du traitement d'erreur (toujours un MsgBox d'information sur l'erreur). Il est certain que certains sont lus alors que la Sub a été appelée alors qu'on était en ScreenUpdating = False.
J'ai 7 "Sub text_EXIT(ByVal Cancel...", événement EXIT quand on quitte une Textbox.
Enfin, j'ai 7 "Exit For" qui se trouvent dans des routines qui tournent effectivement quand ScreenUpdating False. Mais quelques lignes plus loin on retrouve bien sûr ScreenUpdating True !
Le total y est : 81 + 2 + 7 + 7 = 97 fois le mot EXIT.

Je ne sais pas si ça te donnera des idées. En attendant je te souhaite bonne nuit.
Apolinaire
0
cs_Apolinaire Messages postés 44 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 25 avril 2019
19 déc. 2009 à 10:07
Bonjour,
Cette fois-ci je crois bien avoir trouvé la solution, sans toutefois comprendre ce qui s'est passé.
Ce classeur, destiné à des enseignants, comportait sur la page incriminée une liste verticale d'élèves utilisant les colonnes de A à E. Les boutons de commandes, directement sur la feuille, sont placés à droite de ces colonnes.
J'ai supprimé tous les élèves inscrits, puis les ai ré-inscrit à l'identique (tout cela en utilisant les routines du programme VBA) et miracle, les boutons conservent maintenant une apparence normale ! Je n'arrive plus à reproduire le problème, même après de nombreux essais.
Qu'y avait-il dans ces cellules pour perturber la visu des boutons ? Je n'en sais rien...
Donc une nouvelle fois on stoppe les recherches à ce sujet, en espérant que je n'y reviendrai plus.
Encore merci de ton aide Ucfoutu.
Apolinaire
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 déc. 2009 à 11:12
Il y avait probablement des formules (arrivées là comment ? par suite d'innattention ? de mauvaise manoeuvre ?) ===>> et probablement ensuite (voir plus haut) un déclenchement en références circulaires.
Heureux pour toi que tout se passe bien maintenant ...


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
Rejoignez-nous