au secours

au secours - VB/VBA/VBS - Programmation

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).  
 

Reply

Marsh Posté le 23-05-2006 à 09:52:01   

Reply

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.

Reply

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


Message édité par kiki29 le 23-05-2006 à 10:49:39
Reply

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?

Reply

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 :)

Reply

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


Message édité par kiki29 le 23-05-2006 à 11:21:30
Reply

Marsh Posté le 23-05-2006 à 11:27:40    

merci beaucoup j'essaye ça tout de suite

Reply

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

Reply

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.

Reply

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

Reply

Marsh Posté le 23-05-2006 à 12:02:29   

Reply

Marsh Posté le 23-05-2006 à 12:06:02    

Range(“$A$1:$B$8”).Calculate ?

Reply

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)

Reply

Marsh Posté le 23-05-2006 à 12:10:09    

ok j'essaye merci encore

Reply

Marsh Posté le 23-05-2006 à 12:11:18    

Tu fais un bouton "CommandButton1", puis dans ton code :

Code :
  1. Option Explicit
  2. Private Sub CommandButton1_Click()
  3.     Cells(4, 1).Value2 = "=sum(R1C1:R3C1)"
  4.     Cells(4, 1).Value = Cells(4, 1).Value2
  5. End Sub

Reply

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.


Message édité par Arjuna le 23-05-2006 à 12:12:29
Reply

Marsh Posté le 23-05-2006 à 12:13:25    

Explorateur d'objets Range.Calculate

Reply

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.

Reply

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é.


Message édité par Arjuna le 23-05-2006 à 12:19:04
Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed