au secours - VB/VBA/VBS - Programmation
Marsh Posté le 23-05-2006 à 10:24:48
siouplait!!!
je m'en sors pas j'ai une 50aine de cas à faire tourner et ça me prend à chaque fois 4min à cause des macro qui tournent pour rien.
Marsh Posté le 23-05-2006 à 10:38:42
Au clic sur ton bouton
Application.Calculation = xlAutomatic
dans une procedure Auto_Open
Application.Calculation = xlManual
comme cela elle rebasculera en manuel à l'ouverture de ton classeur
ou alors un 2eme bouton
Application.Calculation = xlManual
Marsh Posté le 23-05-2006 à 10:59:50
merci
est-ce que tu peux me donner la syntaxe pour que application.calculation ne s'applique qu'à une plage (que j'ai nommé "maplage" )
PS: 29=finistère?
Marsh Posté le 23-05-2006 à 11:04:44
ça marche comment auto_open?
je suis désolée , je suis pas très douée mais ça fait pas longtemps que je me suis mise à la prog alors au début c'est pas évident
Marsh Posté le 23-05-2006 à 11:16:52
dans un Module tu place une procédure Auto_Open
sub Auto_Open()
Application.Calculation = xlManual
end sub
Sachant qu'Excel recherche de lui même à l'ouverture d'un classeur des macros portant ce nom, cela te permet d'exécuter tout ce qui s'y trouve avant de te donner la main
Par exemple tu peux sélectionner ta feuille de démarrage, repositionner
en haut à gauche dans cette feuille la cellule active, remettre en place les boutons etc....
Voir code dans http://forum.hardware.fr/hardwaref [...] 0232-1.htm
un oubli à tester Range($a$3:$Z$9).Calculate
Marsh Posté le 23-05-2006 à 11:36:03
ça marche mais comment je fais pour que application.calculation.xlmanual ne s'applique qu'à une plage? ex (A1:B8)
J'ai essayé ça mais ça marche pas toute ma feuille est bloquée quand j'ouvre le classeur:
Private Sub Auto_open()
Range("A1:B8" ).Select
Application.Calculation = xlManual
End Sub
Marsh Posté le 23-05-2006 à 11:46:30
http://forum.hardware.fr/hardwaref [...] m#t1372959
Ca marche que sous Excel 2003, il faut apparement adapter pour les autres versions.
Par contre, en remplaçant le "SelectionChange" par "Change", tu peux détecter quand la feuille de calcul est modifiée.
Donc tu peux relancer un Calculate() sur toutes les cellules calculées qui sont en dehors de la zone à ne pas calculer automatiquement.
Marsh Posté le 23-05-2006 à 12:02:29
euh j'ai regardé mais je comprends pas trop enfait moi ce que je voudrais c'est que Application.Calculation = xlManual ne s'applique qu'à range("A1:B8" ) alors que avec:
Private Sub Auto_open()
Application.Calculation = xlManual
End Sub
Je bloque toute ma feuille en calcul manuel
Marsh Posté le 23-05-2006 à 12:06:49
Tu ne peux pas faire appliquer Application.Calculation qu'à une cellule.
Et les objets Range et Cell n'ont pas cette option.
Donc à partir de là, il faut l'émuler.
C'est ce que je te propose de faire en mettant xlManual à toute ton application, et OnChange de tes sheets, lancer le Calculate() de toutes les cellules qui sont en dehors de ton range, pour simuler le "xlAutomatic" sur les autres cellules.
Autre solution : tu vires la formule sur ces cellules.
Tu fais un bouton "Calculer".
Il lance une macro qui met la formule dans ces cellules.
Puis force la valeur avec la valeur courante
(Cell.Value = Cell.Value2)
Marsh Posté le 23-05-2006 à 12:11:18
Tu fais un bouton "CommandButton1", puis dans ton code :
Code :
|
Marsh Posté le 23-05-2006 à 12:11:39
Je viens de tester, ça marche : j'ai bien le résultat de ma formule dans la cellule A4, mais si je change une des valeurs ensuite, ça ne met pas à jour la valeur tant que je ne clique pas sur le bouton.
Marsh Posté le 23-05-2006 à 12:14:09
euh justement pour lancer le calculate() de toutes les cellules en dehors de mon range je fais comment ? il existe une fonction qui me donnerai le complémentaire de "A1:B8"
Parce que justement il faut surtout pas qu'à un changement dans ma feuille les calcul dans mon range maudit ("A1:B8" )soit lancés sinon c'est parti pour 4 min.
Marsh Posté le 23-05-2006 à 12:16:32
Utilise plutôt ma seconde méthode : plus simple, plus efficace, et surtout, code qui n'empêchera pas les autres sheets de travailler normalement.
En plus le code est simplissime : t'as juste à modifier la formule avec celle qui est actuellement dans ta sheet (n'oublie pas de changer les références de type "A1" en "R1C1" par contre, c'est plus facile à bidouiller depuis la macro pour les évolutions futures).
Ensuite, dans ta sheet, tu vires les formules des-dites cellules qui mettent du temps à calculer, et c'est terminé.
Marsh Posté le 23-05-2006 à 12:46:52
c'est pas vraiment faisable parce que ma plage contient 600 lignes et les formules qui y sont attachées sont des fonctions (que j'ai passé 3 plombes à faire) qui font intervenir des données extérieures à la plage donc ce serait beaucoup trop lourd merci quand même.
Mais j'en revient pas que ce ne soit pas possible de bloquer une plage de cellules en calcul manual tout en laissant le reste de la feuille en calcul automatique...
Si par contre quelqu'un connaissait une façon d'obtenir le complémentaire d'une plage de cellules j'arriverai peut être à bidouiller quelque chose merci.
Marsh Posté le 23-05-2006 à 09:52:01
Bonjour,
Je souhaite bloquer les calculs sur une plage de cellule et laisser le reste de ma feuille en calcul automatique (il y a des macros sur cette plage qui mettent beaucoup de temps à tourner et qui sont indépendantes du reste de la feuille mais pour l'instant dès que je fais une opération sur le reste de la feuille toutes les macros de la plage en question sont relancées) Existe-t-il une fonction (ou une astuce) qui permette de faire ça (je voudrais par exemple créer un bouton qui débloque la plage quand j'en ai besoin)?
Merci d'avance parce que là je galère un peu et il ne me reste plus beaucoup de temps (la fin de mon stage arrive).