Tableaux croisés / MAJ VBA longue ou incomplète

Résolu/Fermé
Mashensky - 5 nov. 2015 à 11:05
Mashensky Messages postés 2 Date d'inscription jeudi 5 novembre 2015 Statut Membre Dernière intervention 6 novembre 2015 - 6 nov. 2015 à 11:12
Bonjour,

J'ai écrit une macro relativement simple pour mettre à jour en un clic-bouton les TCD de mon document, et les calculs qui en découlent.

J'ai 16 petits TCD (10 lignes, 13 colonnes chacun), qui vont 2 par 2, et dont je fais découler, pour chaque paire, un petit tableau de 10 lignes et 13 colonnes qui compare le résultat du TCD 1 à celui du TCD 2.

Les TCD sont tous basés sur la même database, donc je n'ai besoin, dans la macro, que d'en mettre à jour un, et tous les autres sont automatiquement mis à jour en même temps.

Sur chaque paire, le premier n'a aucun filtre, le second en a un en "filtre de rapport".

Quand je fais tourner la macro, elle prend énormément de temps.
Du coup, en cherchant un peu sur le net, j'ai trouvé que si je mettais en tête de macro "Application.Calculation = xlCalculationManual" puis en fin de macro, "Application.Calculation = xlCalculationAutomatic", ma macro tournait en quelques secondes au lieu de 10 minutes (sic !)

MAIS... quand je désactive ainsi le calcul automatique, alors mes TCD se mettent à jour bizarrement, et pour chacun d'entre eux (avec ou sans filtre de rapport préalable), il n'y a plus que 4 lignes et 2 colonnes. Pourtant, quand je vérifie la base de donnée des TCD, elle est correcte (MAJ auto dans la macro pour ne pas louper une nouvelle ligne de la database), et si je fais une actualisation manuelle du TCD, tous les TCD reviennent au format "normal" avec les 10 lignes x 13 colonnes dont j'ai besoin.

En tête de macro, j'ai déjà mis :
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
(tout repassé en "true" en fin de macro), mais il semble vraiment que ça soit le calcul automatique qui plombe l'exécution de la macro.

Alors si l'un d'entre vous a une solution (et/ou une explication) à mon problème, je suis preneuse !! Merci d'avance pour votre aide précieuse.

A voir également:

1 réponse

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
5 nov. 2015 à 19:43
Bonjour,

A tester dans l'ordre, mais sans garantie. Bizarre qu'il mette 10' à recalculer ça...

Essaie déjà en enlevant le Application.ScreenUpdating = False. Tu le remettras en tout dernier pour tester avec quand tu auras résolu tes pb. Mais vu le peu de cellules concernées je ne penses pas que tu gagnes beaucoup à l'utiliser.

Avant de remettre le calcul automatique essaie de rafraichir tous tes TCD avec :
ThisWorkbook.RefreshAll

Si ça ne suffit pas enlève et rafraichit-les un par un dans l'ordre logique (si TCD2 a besoin du TCD1, faire d'abord TCD1) :
Sheets("Feuil1").PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
'etc


Si tu as des formules et si tu comptes remettre Application.ScreenUpdating = False :
normalement excel s'y retrouve très bien, mais si toujours pb tu peux calculer tes feuilles individuellement mais dans l'ordre logique :
Si Feuil3 a besoin des résultats de Feuil1 calcule celle-ci en premier.
Sheets("Feuil1").calculate
Sheets("Feuil3").calculate
'etc

Et si tu as plusieurs plages dépendantes sur une même feuille tu peux rentrer dans le détail en cas de besoin en précisant la plage :
Sheets("Feuil1").[A:C].calculate ' des colonnes entières
Sheets("Feuil1").[F1:K10].calculate ' une plage

Un fichier nous permettrait de tester...
eric
1
Mashensky Messages postés 2 Date d'inscription jeudi 5 novembre 2015 Statut Membre Dernière intervention 6 novembre 2015
Modifié par Mashensky le 6/11/2015 à 11:12
Nickel ! J'ai compris ce qui ne fonctionnait pas : il me manquait un calcul intermédiaire. C'est pour ça que mes TCD ne se mettaient pas bien à jour. J'ai rajouté un "Sheets("Feuil1").calculate" puis un 2e à la fin et ça marche super maintenant !

Merci pour cette réponse complète :-D
0
Mashensky Messages postés 2 Date d'inscription jeudi 5 novembre 2015 Statut Membre Dernière intervention 6 novembre 2015
6 nov. 2015 à 11:12
Bon, en revanche, comme j'ai créé le topic sans avoir de compte et que je j'ai créé ledit compte a posteriori, je ne sais pas comment mettre que le sujet est "résolu"... :-(
0