Calc - Empêcher l'affichage d'un résultat intermédiaire

Pour informer l’utilisateur, mon tableur affiche des messages sur l’état de certains calculs clés.

Dans certains cas il affiche (très) brièvement un message pour immédiatement le replacer par un autre. Le premier message correspond (je crois!) à un résultat intermédiaire suite à un premier calcul, qui est ensuite rapidement recalculé afin de donner le résultat du calcul final pour lequel un autre message est affiché. Ce double affichage, même si le premier n’est que très bref, est dérangeant voir déconcertant pour l’utilisateur.

Est-il possible de signifier à Calc de n’afficher que le message associé au résultat du calcul final ?

Bonjour @JaMo

Si tu n’es pas sûr toi-même de ce que sont ces messages, ni comment ils sont générés, comment pourrions-nous en avoir la moindre idée sans disposer dudit classeur ?

Pour joindre un document, il faut éditer sa question (la première en haut de cette page) en cliquant ce mot. On se retrouve dans l’éditeur (la fenêtre où on tape le texte) qui dispose d’une barre d’outils. Cliquer sur l’outil concerné pour pouvoir aller rechercher le document enregistré sur le pc comme dans la copie d’écran ci-dessous.

description de l'image

Attention à ne pas joindre de document comprenant des données personnelles ou confidentielles

Cordialement

Merci de votre attention.

Ce classeur utilise plus de 20 000 formules et plus de 1000 macros. Il ne serait pas réaliste de le joindre à cette question.

Je vais reformuler ma question …

Je soupçonne fortement que les quelques cellules qui me causent ce problème, qui contiennent toutes des formules comprenant de multiples opérandes (tel que constantes, références de cellules, fonctions, macros, etc.) prennent plusieurs valeurs intermédiaires durant un cycle de calcul (suite au clic d’un bouton) avant de prendre leur valeur finale à la fin du cycle. C’est ce qui pourrait expliquer la succession rapide de mes messages associés à chacune de ces cellules.

Donc, à ce point-ci ma question est simplement : au lieu d’afficher un de mes messages à chaque valeur intermédiaire d’une de ces cellules, est-il possible de signifier à Calc d’en n’afficher qu’un seul lorsque cette cellule aura pris sa valeur finale ?

(J’ai vérifié dans les OPTIONS de LibreOffice et de Calc et je n’ai rien trouvé)

@JaMo Si les messages sont générés par macro ce ne peut être qu’à ce niveau qu’il faut intervenir (et donc modifier les macros en conséquence). Aucune option “générale” ne peut gérer cela…

[Ajout 07-06-21 16:55]

Si le calcul est lancé par une macro cette dernière peut figer l’affichage écran en début de traitement et le rétablir à la fin.

sub PysLock
dim oFeuille as object
dim i as integer

thiscomponent.LockControllers()
thiscomponent.addActionLock()

oFeuille = thiscomponent.sheets.getByIndex(0)

rem boucle pour simuler le traitement

for i = 0 to 5000
	oFeuille.getCellByPosition(0, i).value = i + 1	
next i 

thiscomponent.removeActionLock()
thiscomponent.unLockControllers()

end sub

Cordialement

Je génère les messages en question directement dans les cellules du tableur où ils sont affichés; aucune macro n’est utilisée pour la génération proprement dite de ces messages.

Si les opérandes d’une formule située dans une cellule incluent des références de cellules qui sont situées AVANT ou APRÈS cette cellule dans l’ordre normal de calcul de Calc (de gauche à droite et de haut en bas… je crois), est-ce que ça peut avoir un effet sur les valeurs intermédiaires que prendrait cette cellule? C-à-d, est-ce qu’en déplaçant cette cellule pour qu’elle soit calculée après que tous ses opérandes l’aient été, changerait quelque chose au niveau des valeurs intermédiaires ou est-ce ça reviendrait au même.

Qu’une macro puisse figer l’affichage écran en début de traitement et le rétablir à la fin est bon à connaître. Sauf que les cellules qui génèrent les messages en question n’utilisent pas de macro directement.

Ce sont certaines cellules référées dans les formules de celles qui génèrent les messages qui utilisent des macros. Ces macros ne contrôlent pas la production des messages, mais produisent des données qui sont utilisées, entre autres, par les cellules qui génèrent les messages pour analyser et décider quels messages afficher. J’ai constaté que certaines macros sont parfois appelées (call) plus d’une fois dans un cycle de calcul, suite au clic d’un bouton, ce qui pourrait être une des causes (légitimes?) des valeurs intermédiaires…

Il ne semble pas possible de signifier à Calc d’afficher un message seulement lorsqu’une cellule a pris sa valeur finale et non pas à chacune de ses valeurs intermédiaires. J’ai donc décidé de contourner le problème en appliquant le palliatif suivant. Cette solution peut paraître excessive, mais l’ordi nécessite environ 0,5 sec à 1 sec de traitement pour compléter le grand nombre de formules et de macros à exécuter à chaque cycle de calcul pour ce classeur. Ainsi, un (occasionnellement deux!) court message intermédiaire a le temps d’être vu et lu avant que le message final s’affiche et demeure visible jusqu’au clic du prochain bouton. Parfois ces deux ou trois messages successifs sont contradictoires, ce qui peut évidemment être déroutant pour l’utilisateur.

J’ai défini deux compteurs dans les cellules de la feuille : le compteur DÉBUT DE CYCLE DE CALCUL et le compteur FIN DE CYCLE DE CALCUL. Chacun de ces compteurs est réglé à 0 au début, lorsque le classeur est ouvert.

Pour chacune des cellules concernées par ce problème d’affichage de valeurs intermédiaires j’ai identifié la macro qui est exécutée lorsque son bouton est cliqué, donc au début de son cycle de calcul. J’ai également déterminé la macro qui est exécutée à la fin (ou aussi proche que possible de la fin) de son cycle de calcul. J’ai également vérifié pour chacune de ces cellules que ses deux macros de début et fin de cycle sont toujours exécutées une fois et seulement une fois chacune par cycle de calcul.

Lorsqu’un de ces boutons est cliqué, la macro exécutée ajoute 1 au compteur DÉBUT qui prend du coup une valeur supérieure à celle du compteur FIN. Lorsque le cycle de calcul arrive à la fin, l’autre macro ajoute 1 au compteur FIN qui devient maintenant égal au compteur DÉBUT.

Les formules des cellules qui génèrent ces messages vérifient la valeur de chacun des compteurs et n’affichent les messages que lorsque les deux compteurs sont de même valeur.

Le banc d’essai montre que maintenant les messages associés aux valeurs intermédiaires sont systématiquement bloqués et seulement ceux associés aux valeurs finales sont affichés, le cas échéant.