[Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Une question suite à la lecture de ce superbe fil:
https://www.excel-downloads.com/thr...s-entiers-factorielles-exponentielles.209088/

La dernière PJ de ROGER2327 mets Excel 2003 et (même 2013) en transe.
La macro s’exécute puis soudainement Excel ne réponds plus, et après un certain temps, Excel réagit de nouveau et la macro s'est donc exécutée jusqu'à son terme.

Donc la question est la suivante:
Qui est coupable de cette instabilité?
  • Le code "machine" d'Excel
  • Le code VBA utilisé
  • Windows et sa gestion de la mémoire
  • Un mix de tout cela ?
Et surtout si Excel ne répond pas, que se passe-t-il alors ?
Dans "quoi", le code VBA continue-il à s’exécuter ? En RAM ?

Merci à ceux qui sauront éclairer ma lanterne.
 

MJ13

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

Bonjour Jean-Marie

Merci pour cette question philosophique :).

Encore hier sur mon appli My Mp3 V4, cela me fait souvent le coup, Excel ne répond plus et ensuite tout revient dans l'ordre. Donc cela m'intéresserait de pouvoir contrer ce problème :confused:.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

Bonsoir.
Basic (l'ancêtre) pouvait dans certaines application présenter un comportement analogue. Il avait alors d'ailleurs tendance à se produire plus fréquemment, mais les durées d'immobilisation de l'environnement étaient beaucoup plus courtes. Je pense qu'il ne serait pas déraisonnable d'en soupçonner la même cause (parfaitement connue à l'époque) mais pour les tailles de mémoire disponible actuelles. Il s'agissait de la nécessité de libérer de la place mémoire derrière tout ce qui était utilisé à un moment donné, en le copiant dans des espaces réalloués contigus. Si mon hypoyhèse est exacte, cela aurait tendance à se produire dans des application qui effectuent beaucoup de concaténations dans de grandes chaînes ou de Redim de tableaux.
C'est dans l'espoir vague de limiter l'appel à ce mécanisme inévitable que j'ai parfois tendance, à tort ou à raison, à faire des Redim Preserve par paquets plutôt qu'à chaque passage dans une boucle.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

Bonsoir Dranreb, MJ13, le fil, le forum

Donc c'est incurable, Docteur?

Est-ce à dire que VBA est mal programmé tout comme Windows?

Est-ce à dire que la même macro (mais en langage OO ou LibreOffice) sous un environnement Linux ne produirait pas ce genre d'effet ?
 

Dranreb

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

Je n'ai pas dis que VBA était mal programmé à cet égard. Ce ne serait pas du tout l'objet des critiques que je pourrais avoir à son encontre. Mais lorsque vous demandez une certaine taille de mémoire pour une certaine information, il est bien obligé d'appliquer une politique de choix de son adresse de résidence. Il n'a aucun moyen de prévoir que vous allez ensuite changer d'avis et que ça ne tiendra plus dans l'emplacement choisi sans mordre sur ce qui suit ! Il se débrouille alors très bien pour choisir un autre emplacement je trouve. C'est plutôt une façon inconsidérée de programmer qui peut le pousser à laisser plein d'espaces disséminés devenus non attribués et trop petits pour accueillir un nouveau grand tableau par exemple. Que voudriez vous de plus qu'un dispo prêt à entrer en scène, qui prend le problème en charge en employant les grand moyens, même si alors ça se voit ?
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

Re

Certes j'ai été un peu vite en besogne en accusant vertement VBA et Excel.
(Mais qui aime bien, châtie bien,non ? ;))

Donc je (te-vous?) lis bien c'est la syntaxe du code VBA du classeur cité dans mon premier message qui coince quelque part?
(Pourtant ROGER2327 semble plutôt à l'aise avec VBA, non ?)

Par ailleurs c'est Windows (je suppose Explorer.exe) qui nous dit "Microsot Excel ne réponds pas" ou c'est Excel lui-même?
(La barre de titre est modifiée par qui ?)
279547d1376123797-affichage-de-tres-grands-nombres-entiers-factorielles-exponentielles-ripxl2001.png
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

ROGER2327 semble plutôt à l'aise avec VBA, non ?
Ça c'est clair ! Il aurait tout à fait pu m'arriver aussi d'écrire une programmation un peu spéciale visant une arithmétique de grands nombres sans réaliser qu'en concaténant un octet après l'autre dans de multiples chaînes de chiffres très longues, je mettais le système d'allocation des ressources mémoire face au pire des cas.
Pendant la réorganisation des occupations mémoire, VBA ne fait rien d'autre affin que ça s'exécute le plus vite possible, pas même répondre à des sollicitations de Window, lequel constate qu'il n'obtient pas de réponse.
Heu, le "vous" c'était peut être un vous de pluriel ? Je te tutoie normalement. Ma tendance c'est de nous tutoyer entre Barbatrucs mais de vouvoyer les demandeurs occasionnels.
 

Staple1600

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

RE

Donc au final personne n'est à blâmer alors?
"Y a person qui répond" (non pas au téléfon) et on ne peut que subir la chose ?
Plus de RAM ne changera rien, une autre syntaxe VBA, non plus ?

C'est quand même pas normal, non, que Windows (ou je sais pas qui) se contente simplement de nous dire que telle ou telle application ne réponds pas surtout si l'application n'est pas la cause directe du phénomène (mais la gestion de la mémoire sous Windows si)
 

Dranreb

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

Plus de RAM ne changera rien, une autre syntaxe VBA, non plus ?
La 1ère proposirtion ne ferait que repousser le problème, la seconde peut le résoudre si ! On peut travailler de nos jours avec de très grands tableaux de Byte, à condition de ne pas les redimensionner sans arrêt à la hausse sans quoi il finit par ne plus savoir où les mettre à moins de faire un grand ménage préalable.
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

Re, Bonjour Bernard

J'ai quand même l'impression que personne ne sait comme l'éviter :confused:.

Mais, bon, cela arrive en général quand le processeur est très sollicité et qu'il doit y avoir de nombreux calculs qu'Excel n'arrive pas à contenir.

Sinon, il y a quelques temps, j'avais déjà parlé sur le forum de ce problème sur un fichier pour insérer des images sur une feuille avec 10 000 images par exemple. J'avais à peu près trouvé la parade en enregistrant le fichier toutes les 1000 images incorporées.
 

Dranreb

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

Bonjour.
De toute façon la nécessité de réorganiser en blocs contigus les espaces de mémoire utilisés, de façon à pouvoir en disposer de nouveaux libres plus grands derrière, n'était qu'une hypothèse. Si elle est exacte, ça n'a rien à voir avec le volume des traitements effectués par le processeur. C'est seulement parce qu'il a été trop souvent obligé de libérer des espaces trop petits pour pouvoir accueillir de nouveaux besoins et que ces espaces se retrouvent donc très nombreux et très disséminés au point qu'une immense quantité de mémoire libre se trouve en quelque sorte inutilisable car encombrée de courtes données éparpillées.
Je peux concevoir que cela puisse arriver, aussi, après un traitement de 10000 images. Et dans ce cas c'est bien d'avoir trouvé une parade.
 

Efgé

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

Bonjour à tous :) ,
Comme je viens de faire l'expérience, je la partage :D

J'utilise souvent des classeurs modèles (.xlt) qui s'actualisent à l'ouverture grace à une importation de données qui récupère une requête ACCESS.
Point de macro la dedans.

Au fur et à mesure de l'année les data "grossissent" et aujourd'hui l'importation est assez longue (une à deux secondes) pour avoir le temps de cliquer dans le vide sur la feuille (comme ça, pour voir).
Et bien Le message "Excel ne répond pas" est bien présent.

La programation "maison" ne me semble pas le seul problème de gestion de mémoire dans le couple Win / Excel :D

Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : [Qui de l'oeuf ou de la poule?] où ici qui d'Excel, de VBA, ou de Windows ?

Bonjour.
Là on est seulement dans un cas où Excel est trop occupé à effectuer une opération complexe pour pouvoir répondre aux sollicitations de Windows. Normalement ça ne doit pas empêcher de basculer vers une autre application, par exemple, pendant ce temps. Ça ne me parait pas avoir de rapport avec un problème de saturation disséminée de la mémoire qu'il doit libérer avant de permettre toute autre utilisation de ressources, chez lui comme ailleurs. On a aussi toujours ce message si on intervient pendant une longue exécution VBA, surtout si elle ne comporte aucun DoEvents.
 

Statistiques des forums

Discussions
312 337
Messages
2 087 392
Membres
103 536
dernier inscrit
komivi