Calcul automatique

spin

XLDnaute Nouveau
Comment bloquer le calcul automatique d'une feuille lors d'un déroulement de procédure VBA (pour empêcher une fonction perso de s'exécuter) ? Le calcul serait forcé à la fin de la procédure.

Mon pb est le suivant (un peu compliqué à expliquer ... désolé):
Une fonction perso est utilisée dans pas mal de cellules d'une feuille de calculs (feuille 1). Dans une autre feuille de calcul (feuille 2) se trouvent certains argument de cette fonction perso. Lorsque je change ces arguments dans la feuille 2, une procédure est lancée automatiquement via Worksheet_Change(ByVal Target As Range). Mais le résultat de cette procédure n'est pas correcte car son bon déroulement est perturbé par la fonction de la feuille 1.
Pour resoudre ce problème, il faudrait donc qu'au lancement de la procédure, la fonction soit bloquée. Je ne veux pas utiliser la propriété
Application.Calculation = xlCalculateManual car le risque est grand de voir l'application se fermer sur cet état, ce qui serait un autre pb plus grave à gerer...

Merci d'avance
Spin
 

Pierrot93

XLDnaute Barbatruc
Re : Calcul automatique

Bonsoir Spin, Yojema

tu peux utiliser le code ci dessous :

Code:
Sub TEST()
Dim x As Integer

x = Application.Calculation
Application.Calculation = xlCalculationManual
'ton code
Application.Calculation = x
End Sub

Bonne soirée
@+
 

spin

XLDnaute Nouveau
Re : Calcul automatique

Désolé yojema, je ne peux pas joindre le fichier, même une partie du fichier : beaucoup trop gros. Si je veux envoyer juste un bout, trop de boulot pour l'adapter. Mais je copie tout de même ci dessous les codes correcpondants.

Pierrot93, ça ne marche pas mieux. J'avais déjà essayé cette solution.
En fait, je pense que la fonction est lancée en même temps que la procédure. Et excel se comporte comme si la fonction devenait prioritaire devant la procédure qui n'est plus prise en compte.
Pour reprendre ton code, si je supprime la fonction, le mode de calcul passe en manuel sans pb. Si je laisse la fonction, le mode de calcul n'est pas changé


Codes

Procédure:
Public Sub Worksheet_Change(ByVal Target As Range)
' Macro de nettoyage des infos tribs lors d'un changement de type SLTE
' Laurence BISSON-BUET - Août 06
' Modifiée par Antoine OLIVIERO - Sept 06

On Error GoTo Out
If ProcIndice = 1 Then GoTo Out

If (Not Intersect(Target, Range("D:D")) Is Nothing) And Target.Row > 12 And InStr(1, ActiveCell.Value, "SLTE", 1) <> 0 Then
IndiceProtSheet = 1
If ActiveSheet.ProtectContents = True Then IndiceProtSheet = 0
ActiveSheet.Unprotect
ActiveCell.Offset(0, 1).Select
ActiveCell.ClearContents
If IndiceProtSheet = 0 Then ActiveSheet.Protect
End If

Out:

End Sub




fonction:

Function NbSpare(FITS, DaysRepair, ConfidenceLevel)

Const TempsFIT = 10 ^ 9
Dim lambdat As Variant
Dim n As Integer
Dim X As Integer

lambdat = (24 * FITS * DaysRepair) / TempsFIT

If FITS = 0 Then
NbSpare = 0

Else
If lambdat < 0.001 Then
NbSpare = 1
Else
n = 0
Do While Excel.WorksheetFunction.Poisson(n, lambdat, True) < ConfidenceLevel
n = n + 1
Loop
'
If n = 0 Then
NbSpare = 1
Else
NbSpare = n
End If
End If
End If

Out:

End Function
 

Pierrot93

XLDnaute Barbatruc
Re : Calcul automatique

Bonjour Spin, Yojema

je sais pas quoi te dire, et sans fichier pour exécution pas à pas, dur dur. Peut être une piste, en arretant les proc évènementielles

Code:
Public Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'TON CODE
Application.EnableEvents = True

mais sans aucune garantie.

bon courage et bonne journée
@+
 

h_des_steppes

XLDnaute Nouveau
Re : Calcul automatique

Bonjour,

J'ai exactement le meme probleme que Spin.

Mais la fonction worksheet_calculate ne m'aide pas beaucoup car elle ne dit pas quelle cellule ont été modifiée. Et je ne veux pas refaire le calcul sur l'ensemble de la feuille.

Des idées ?

Je veux bien vous envoyer mon fichier, mais comment ?

Merci pour votre aide
 

Pierrot93

XLDnaute Barbatruc
Re : Calcul automatique

Bonjour H des steppes

comprends pas trop ton problème, tu dis que c'est le même que spin, hors celui ci avait été résolu...

Si c'est pour calculer une cellule ou une plage de cellule essaye avec le code ci dessous :

Code:
Worksheets("Feuil1").Range("A1").Calculate

Sinon mets peut être ton fichier en pièce jointe, avec le code utilisé.

Bonne journée
@+
 

h_des_steppes

XLDnaute Nouveau
Re : Calcul automatique

Apres plusieurs recherche, je tombe sur un truc bizzare. Voila le code.

Alors si on selectionne le contenu de la cellule avec la validation, ca ne marche pas. si on tape le meme contenu, ca marche....

Une idée ?
 

Pièces jointes

  • Classeur1.xls
    29 KB · Affichages: 138
  • Classeur1.xls
    29 KB · Affichages: 146
  • Classeur1.xls
    29 KB · Affichages: 150

Discussions similaires

Réponses
15
Affichages
852
Compte Supprimé 979
C
Réponses
18
Affichages
863

Statistiques des forums

Discussions
312 500
Messages
2 089 010
Membres
104 004
dernier inscrit
mista