Macros dans excel 2011 très lente

  • Créateur du sujet Créateur du sujet omni
  • Date de début Date de début

omni

Membre expert
Club iGen
17 Mars 2007
1 241
44
Bonjour,

J'utilise excel 2011. Je me suis fait réaliser une macro mais celle-ci est très lente à se réaliser et n'arrive pas au bout pour cause de mémoire insuffisante.
Ppe : Un fichier que j'ai extrait de ma compta (=gros 15 colonnes, 1487 lignes) de ce fichier je veux extraire plusieurs fois des enregistrements correspondant à un compte différent.

La macro sur un PC avec Excel 2007 (?) en tout cas windows XP pro et office pas 2010. Donc sur un PC la macro se réalise à vitesse grand V (à peine le temps de dire ouf, quand sur mon MBP de 2008 2,2Gz 4 Go de Ram et DD de 320 à 7200, elle met quelques minutes pour finir par me dire au bout de quelques extractions réalisées "mémoire insuffisante".

Donc je ne comprends pas…

J'ai donc essayé via virtual Box sur un excel "PC" = ça marche très vite mais plante aussi pour mémoire insuffisante au bout d'un moment (ce que je peux comprendre)

Merci de vos lumières.
 
La macro sur un PC avec Excel 2007 (?) en tout cas windows XP pro et office pas 2010. Donc sur un PC la macro se réalise à vitesse grand V (à peine le temps de dire ouf, quand sur mon MBP de 2008 2,2Gz 4 Go de Ram et DD de 320 à 7200, elle met quelques minutes pour finir par me dire au bout de quelques extractions réalisées "mémoire insuffisante".
Que les macros soient plus rapide dans les versions Windows n'est pas nouveau. Dans le temps, ils ont même rajouté des boucles inutiles dans la version Mac pour "avantager" la version Windows mais ça fait longtemps que ce n'est plus nécessaire, la version Mac étant maintenant une déclinaison de celle pour Windows (et plus l'inverse). Même dans Virtual PC sur Mac PPC, ça tournait plus vite que la version Mac.

C'est tout de même un peu moins vrai avec la version 2011, même si elle a encore quelques bugs et faiblesses. Et le message de "mémoire insuffisante" ne doit pas être pris au pied de la lettre. C'est une indication du symptôme, mais ça ne dit pas grand chose sur la cause, laquelle est plus probablement quelque part dans la macro. La preuve :
J'ai donc essayé via virtual Box sur un excel "PC" = ça marche très vite mais plante aussi pour mémoire insuffisante au bout d'un moment (ce que je peux comprendre)
Non, il n'y a pas de raison, ça devrait marcher aussi bien que sur un "vrai" PC équivalent à très peu de chose près. C'est plus probablement dans la macro qu'il faut chercher la solution. Mais c'est évidemment impossible d'en dire plus uniquement sur des généralités, il faut regarder dans le code. Mettre des points d'arrêt, voir sur quoi ça bloque, etc.
 
Merci pour cette réponse. Mais comme je n'y connais rien en macro j'insiste quand même pour préciser que celle-ci fonctionne admirablement bien sur un PC…et très vite.
mais effectivement peut-être que le "langage" n'est pas rigoureusement le même d'un univers à l'autre ?
Qui plus est si je ne demande qu'une seule extraction (ou 2) elle se réalise très lentement mais arrive à terme; Donc la macro semble fonctionner.
 
C'est curieux, ton histoire, ça me rappelle un problème que j'avais eu naguère avec une macro écrite pour un de mes clients : sur Mac (OS 9 et Excel 98 à l'époque) ou sur PC sous Windows 2000 avec Excel 97, elle fonctionnait impec, mais sous Windows 95 et 98, avec le même Excel 97, elle plantait aléatoirement (c'est à dire qu'elle ne plantait pas sur une ligne ou séquence précise du programme, mais pouvait planter sur n'importe quelle instruction à n'importe quel endroit de celui ci).

Après investigation, j'en étais arrivé à la conclusion qu'il s'agissait d'un effet de bord provoqué par la combinaison d'un bug d'Excel avec un un bug dans la gestion de la mémoire virtuelle de Windows 9x. Vu que virtual box n'est pas un émulateur windows, mais plutôt une sorte de "substitut" (il fait tourner des applications Windows sans Windows, contrairement à ce que fait un émulateur), on peut imaginer que tu es confronté à une situation similaire (peut être même le même bug du côté Excel, si ça se trouve, car vu les deux heures de conversation stérile passées avec le SAV de Microsoft à l'époque, il y est peut-être toujours présent).

Pour la lenteur, par contre, si Ms a supprimé une partie des boucles de ralentissement de la version Mac dans le tableur lui même (mais il en reste, rassure toi), côté VBA, elles y sont toujours toutes !

Quand je pense que sur un Quadra 700 (68040 à 25 Mhz) sous Mac OS 7.1, une "beta" d'Excel 5 que j'ai eu entre les mains tournait plus vite que son homologue d'Excel 95 sur un Pentium 166 sous Windows 95 (le must de l'époque en matière de PC), et que la version finale du même Excel 5 Mac était plus lente sur un PPC 603e à 100 Mhz qu'Excel 5 PC* sur un 386 SX 16 sous Windows 3.1 :rolleyes:

(*) Pour mémoire, sur PC, il y avait deux Excel Windows à l'époque, le "5" pour Windows 3.1.x, et le 95, le même mais en version "32 bits" pour Windows 95
 
Pour avoir pu tester le classeur, chez moi (avec Excel 2004, certes, mon disque dur principal étant en train de rendre ce qui lui tient lieu d'âme) il fonctionne. Mais c'est une macro enregistrée et peu optimisée. Rien qu'en vidant la mémoire et en réduisant l'affichage, on peut déjà l'accélérer d'un facteur de 10 et il est fort possible que ça ne plante plus du tout...
 
Je reviens là dessus (je n'étais pas encore bien réveillé, probablement) :

Vu que virtual box n'est pas un émulateur windows, mais plutôt une sorte de "substitut" (il fait tourner des applications Windows sans Windows, contrairement à ce que fait un émulateur),.../...
Je pense que tu confonds avec CrossOver ou autre dérivé de Wine, avec lesquels effectivement on n'a pas de "vrai" Windows mais une émulation.

VirtualBox est un virtualiseur de plateforme PC, moins complet, fini et fonctionnel que Parallels Desktop ou VMWare Fusion, mais gratuit. Et il faut bien installer Windows dans la machine virtuelle, comme avec les autres. Les limitations sont donc bien moindres que ce qu'on rencontre avec les émulateurs Windows (mais il peut y avoir un effet lié à la version de Windows concernée, Omni n'ayant pas précisé de laquelle il s'agit).
 
cette fonction aide pas mal dans la vitesse d'execution des macros sous windows
Bloc de code:
Application.ScreenUpdating = False
Oui. Mais dans les macros pour Mac, c'est pas qu'elle aide, c'est plutôt qu'elle est quasiment indispensable (sauf à aimer attendre devant un écran agité par des soubresauts sans cohérence apparente) ! :D

Entre ça et la suppression des innombrables "Select" inutiles qui signent les macros enregistrées, on accélère considérablement les choses sans même regarder la structure du code.
 
Merci à vous tous.
effectivement Virtual = windows = XP pro.
Par contre cher ALIBORON j'ai testé ce que tu m'a renvoyé et je te fais un mail…
 
Bonjour,
J'ai le même genre de constat qu'omni même si elle va jusqu'au bout.
Ma macro n'est pas issue d'un enregistrement mais bien écrite à la main et optimisée avec le temps. Elle va lire et mettre en mémoire en une ou deux secondes l'ensemble des données nécessaires.
Elle fait quelques millions d'opérations au sein de boucles.
Elle me ressort quasi instantanément le résultat en fin de macro.
La macro marche sur PC comme sur Mac, mais il y a une grande différence de performance qui me déroute quelque peu.

Sur PC (Intel Core 2 Duo E7300 @ 2,66GHz avec 1,91 Go RAM), elle me sort le résultat en 29 secondes.
Sur iMac (2.8 GHz Intel Core i7 avec 8Go de RAM), le résultat sort en 81 secondes !

J'ai bien mis en début de macro les :
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

J'ai noté que le processeur n'était utilisé qu'à un très faible niveau lorsque je fais tourner la macro sur Mac. Je m'explique :
D'un côté il indique qu'Excel utilise 100% du processeur (sur la ligne correspondant à Excel dans la liste sur le moniteur d'activité), d'un autre côté, dans le même moniteur d'activité, l'utilisation du processeur indique 13% utilisateur, <1% système, 74% inactif.
Ce que j'ai un peu du mal à comprendre.

Merci d'avance pour toute aide/explication que vous pourriez me fournir.

Cordialement,
 
29 secondes sur PC et 81 secondes sur Mac, ça me parait tout à fait cohérent, depuis la version finale d'Excel 5, Microsoft a saboté la version Mac d'Excel, et même si à chaque nouvelle mouture depuis la 2004, ils suppriment une partie des handicaps restant, ils sont encore très loin d'avoir tout enlevé.

Voici les résultats sur un Mac Mini C2D 2 Ghz et un MBP C2D 2,2 Ghz de ma macro de test, tu peux voir que les résultats sont cohérents avec ce que tu constates chez toi.

conjtch.jpg

(VB4 = Virtual Box 4, et PD6 = Parallel Desktop 6)

Sur le C2D, par exemple, Excel 2007 est presque trois fois plus rapide qu'Excel 2011 (81/100 de seconde contre 2"36/100), tout comme chez toi !

Cela dit, c'est vrai qu'il y a eu des progrès, parce que sur mon PM G4 bi pro à 1,42 Ghz, l'écart entre Excel 2000 sous Windows 2000 sous VirtualPC 7 (donc, là, de l'émulation et pas de la virtualisation) et Excel 2004 sous Leopard était le même, alors que VPC7 émulait un PC autrement moins rapide que le Mac (à peu près un PII à 350 ou 400 Mhz d'après les bench tests). Des macros qui s'exécutaient en quelques secondes sur PC chez mes clients arrivaient à mettre jusqu'à 5/6 mn sur mon G4 pour arriver au bout (sur les mêmes données)
 
Dernière édition:
Merci Pascal 77 pour cette réponse,
Si c'est cohérent, c'est bien dommage. Je n'ai pas trop le temps d'apprendre un autre langage et doit pour un bien augmenter d'un ordre de grandeur ou deux le nombre de calculs et fiabiliser le résultat pour la semaine prochaine!
Bien dommage !

Encore merci.
 
Alors, essaie la solution Excel PC sous Cross Over, ça évite d'avoir à installer Windows, et avec Excel 2007, ça a l'air de fonctionner pas mal.
 
...bonjour tout le monde.

Je rebondis (un peu tard, mais bon...) sur le sujet: en fait, chez moi, ça me fait le même coup (mémoire insuffisante) lorsque j'essaie de supprimer une ou des lignes/colonnes.

Je précise: lignes ou colonnes ENTIERES (donc, je mets la ligne/col en surbrillance, clic droit, supprimer - ou menu, supprimer des lignes). A part ça, je peux faire un peu ce que je veux, ouvrir des docs Excel, en créer de nouveaux, etc, etc.
Et c'est même pas particulièrement lent (mais ça tient peut-être à mon matos).
iMac 27' de 2009, Core i7 3,2G, 8Go de Ram... (non, je ne m'en sers pas que pour excel... XD ).

Bref, j'ai un peu de mal à comprendre le "mémoire insuffisante".

Tout le reste tourne sans pb, et le bestiau ronronne comme un chat.

D'avance, merci à ceux qui seront à même de m'apporter leurs lumières!
 
Je rebondis (un peu tard, mais bon...) sur le sujet: en fait, chez moi, ça me fait le même coup (mémoire insuffisante) lorsque j'essaie de supprimer une ou des lignes/colonnes.
Le même coup, vraiment ? Apparemment il n'est pas question de macro dans ton cas (ou alors je n'ai pas tout compris).

Ce que tu ne dis pas, mais qui serait bien utile : le problème survient-il uniquement avec un classeur en particulier ou bien avec n'importe quel classeur, y compris un classeur vide ?

Dans le premier cas (le plus probable) on peut penser à une corruption du classeur, qu'il conviendra alors de refaire (en évitant le copier/coller, car on transporte alors bien plus que ce qui est visible). Passer par un enregistrement via un autre outil (LibreOffice, Numbers...) est souvent une bonne méthode.

Si c'est avec n'importe quel classeur, alors c'est plus probablement du côté des préférences qu'il faudra orienter les recherches.

Au passage, n'hésite pas à préciser la version d'Excel concernée (niveau de mise à jour compris), à décrire ce que tu observes dans une session avec un nouveau compte utilisateur Mac OS X (créé pour l'occasion ou le compte "Invité", par ex.), les autres particularités qui te viendraient à l'esprit...