VBA Optimisation formules qui prend du tps
Résolu/Fermé
Jon
-
29 juil. 2009 à 16:12
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 29 juil. 2009 à 19:18
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 29 juil. 2009 à 19:18
A voir également:
- VBA Optimisation formules qui prend du tps
- Optimisation pc - Guide
- Formules excel de base - Guide
- Formules - Télécharger - Études & Formations
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Optimisation windows 10 - Guide
5 réponses
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 214
29 juil. 2009 à 17:25
29 juil. 2009 à 17:25
Bonjour,
As-tu pensé à désactiver le rafraichissement écran et le calcul automatique ?
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
remettre à True et xlCalculationAutomatic à la fin.
Et tant qu'à faire une macro les formules sont-elles nécessaires ?
Autant coller juste le résultat, surtout qu'apparemment tout est recalculé à l'activation de la feuille.
eric
As-tu pensé à désactiver le rafraichissement écran et le calcul automatique ?
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
remettre à True et xlCalculationAutomatic à la fin.
Et tant qu'à faire une macro les formules sont-elles nécessaires ?
Autant coller juste le résultat, surtout qu'apparemment tout est recalculé à l'activation de la feuille.
eric
SilverM-A
Messages postés
82
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
10 avril 2011
76
29 juil. 2009 à 16:52
29 juil. 2009 à 16:52
Es-tu obligé de faire tout le traitement dans un seul et même for ??
Ce ne sont pas les formules qui prennent beaucoup de temps, ce sont les nombreuses validations, ainsi que la boucle de 65 000 tours :O
P.S.: Tu aurai probablement plus de chance dans le forum programmation ;)
Ce ne sont pas les formules qui prennent beaucoup de temps, ce sont les nombreuses validations, ainsi que la boucle de 65 000 tours :O
P.S.: Tu aurai probablement plus de chance dans le forum programmation ;)
Merci pour ta réponse :)
J'ai donc posté dans le forum programmation où on m'a aussi fait les gros yeux pour les 65000 lignes, mais ce n'est pas vraiment celà qui prend du temps.
En revanche, je suis interessé par ce que tu dis concernant la séparation en plusieurs boucles for. En quoi celà rendrait la macro plus rapide?
Merci encore!
J'ai donc posté dans le forum programmation où on m'a aussi fait les gros yeux pour les 65000 lignes, mais ce n'est pas vraiment celà qui prend du temps.
En revanche, je suis interessé par ce que tu dis concernant la séparation en plusieurs boucles for. En quoi celà rendrait la macro plus rapide?
Merci encore!
Bonjour eric, et merci!
Je vais tout de suite essayer de désactiver tout ça.
Sinon je ne pense pas avoir bien compris ce que tu entends par "juste coller le résultat", mais en effet tout est recalculé (tout le temps, en temps réèl).
Est-il possible de faire un autofill dans la macro, cela ferait-il gagner du temps?
Je vais tout de suite essayer de désactiver tout ça.
Sinon je ne pense pas avoir bien compris ce que tu entends par "juste coller le résultat", mais en effet tout est recalculé (tout le temps, en temps réèl).
Est-il possible de faire un autofill dans la macro, cela ferait-il gagner du temps?
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 214
29 juil. 2009 à 19:18
29 juil. 2009 à 19:18
je ne pense pas avoir bien compris ce que tu entends par "juste coller le résultat"
Il s'agit de calculer le résultat dans la macro et de mettre ce résultat dans la cellule au lieu de la formule qui est recalculée régulièrement.
Mais bon, il faut bien gérer les mises à jour et l'ordre de calcul des résultats. Si le temps te parait correct maintenant laisse comme ça.
Est-il possible de faire un autofill dans la macro, cela ferait-il gagner du temps?
Oui, mais sûrement minime car ce qui te prenait du temps c'était l'évaluation des formules à chaque collé. Maintenant elles ne sont évaluées qu"une fois lorsque tu réactives le calcul automatique.
N'oublie pas de mettre en résolu stp
eric
Il s'agit de calculer le résultat dans la macro et de mettre ce résultat dans la cellule au lieu de la formule qui est recalculée régulièrement.
Mais bon, il faut bien gérer les mises à jour et l'ordre de calcul des résultats. Si le temps te parait correct maintenant laisse comme ça.
Est-il possible de faire un autofill dans la macro, cela ferait-il gagner du temps?
Oui, mais sûrement minime car ce qui te prenait du temps c'était l'évaluation des formules à chaque collé. Maintenant elles ne sont évaluées qu"une fois lorsque tu réactives le calcul automatique.
N'oublie pas de mettre en résolu stp
eric
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
SilverM-A
Messages postés
82
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
10 avril 2011
76
29 juil. 2009 à 17:56
29 juil. 2009 à 17:56
Si je comprend bien, si la première colonne n'est pas vide, tu fais le traitement sur les 28 colonnes ?
Ce que t'a conseillé ériiic peut aider. Le conseil qui t'a été donné dans ton post du forum programmation semble bien aussi, car 65 000, si tu en possède moins, c'est déjà du temps de gagné.
Selon ce que je vois, il n'y a pas vraiment de moyen d'optimiser les opérations sur chaque colonne autre que d'utilisé des fonctions. Exemple tu pourrais utiliser une fonction pour ta colonne 2-3-4 et même 5, passer en paramètre les membres de ton opération qui diffèrent d'une fois à l'autre. Tu pourra aussi faire de même pour les colonnes 6 à 23.
ex:
Ensuite reste à savoir, est-ce que tu possède toujours 28 colonnes ? Sinon, il suffit de réduire le nombre d'opération au nombre de colonne que tu possède dans la ligne.
Je ne suis pas très évolué en VBA, mais je crois que tu devrais t'en sortir ! :P
Ce que t'a conseillé ériiic peut aider. Le conseil qui t'a été donné dans ton post du forum programmation semble bien aussi, car 65 000, si tu en possède moins, c'est déjà du temps de gagné.
Selon ce que je vois, il n'y a pas vraiment de moyen d'optimiser les opérations sur chaque colonne autre que d'utilisé des fonctions. Exemple tu pourrais utiliser une fonction pour ta colonne 2-3-4 et même 5, passer en paramètre les membres de ton opération qui diffèrent d'une fois à l'autre. Tu pourra aussi faire de même pour les colonnes 6 à 23.
ex:
function NOMFONCTION (param1){ NOMFONCTION = IF(ISERROR(VALUE(RTD(""MdgServer"","""",""AUTO"",RC5,param1))),"" "",(VALUE(RTD(""MdgServer"","""",""AUTO"",RC5,param1)))) }
Ensuite reste à savoir, est-ce que tu possède toujours 28 colonnes ? Sinon, il suffit de réduire le nombre d'opération au nombre de colonne que tu possède dans la ligne.
Je ne suis pas très évolué en VBA, mais je crois que tu devrais t'en sortir ! :P
29 juil. 2009 à 18:19
Ca change tout!
Et tu as même réussi à régler un de mes autres problèmes indirectement !
merci beaucoup!