réactivation du calcul automatique

almas

XLDnaute Occasionnel
Bonjour le forum

je cherche une explication a un petit probleme

j 'ai découvert et utilisé il y a pas longtemps les commandes pour déactiver les calcul dans les macros pour accélérer l' exécution du code.

Application.Calculation = xlManual
Application.Calculation = xlAutomatic

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

Calculation = xlManual
Calculation = xlAutomatic

Le problème viens que les calcul auto ne se réactivent pas a la fin ????

Je suis obligé d'aller à chaque fois dans les options pour le faire manuellement.
quelqu' un aurai une explication plizz?

merci
 

camarchepas

XLDnaute Barbatruc
Re : réactivation du calcul automatique

Bonjour ,

Question bête , es tu sur que le code que tu as écris est bien exécuté .

A vérifier en pas à pas , peut être un test avec un exit sub qui ne permet pas à ton code de s'éxécuter

Mon écriture serait pour la remise en automatique du calcul

Application.Calculation = xlAutomatic
 

almas

XLDnaute Occasionnel
Re : réactivation du calcul automatique

alors j 'ai avancer dans ma recherche du problème

La commande automatic est bien avant les ensub camarchepas

mais je me suis aperçu qu' une simple activation de cellule qui contient un formule quelconque deactivais le calcul auto pour le mettre en "sur ordre" dans chaque feuil qui contien une macro avec les commandes :Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

même sans exécuter la macro ca déactive????
 

almas

XLDnaute Occasionnel
Re : réactivation du calcul automatique

j 'ai essayer également d 'enregistrer sous un autre nom ou supprimer les fichiers .Xlb mais rien n' y fait

c 'est un bug?

edit: en supprimant les ligne de code dans la macro d ' une feuil ça marche...dans cette feuil

comment il peut aller voir la macro alors qu 'elle n 'est même pas été lancé ???
 
Dernière édition:

almas

XLDnaute Occasionnel
Re : réactivation du calcul automatique

rebonjour

encore moi....j 'ai fait plein de recherche depuis hier et ce problème existe depuis 2007 au moins....et j 'ai pas trouvé de solution.
j 'ai fait un bricolage avec un bouton et ça marche et évite d 'aller dans option réactiver a chaque fois.
maintenant je comprend pas pourquoi ca ce fait pas automatiquement a la fin de mon 1er code???
je met le code de la page en entier des fois que quelqu' un est une autre idée....

Public flag As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
Application.Calculation = xlManual
If Target.Address <> "$E$3" Then Exit Sub
Application.EnableEvents = False
tx = [E3]
lig = 8
[A8:M400].ClearContents
'Stop
Set plage = Sheets("base de donnée").Range("T2:T150")
For Each cel In plage
flag = 0
k = cel.Value
If k = "" Then Application.EnableEvents = True: Exit Sub
'Stop
For Each sh In ActiveWorkbook.Sheets
If sh.Name = k Then a = sh.Name: flag = 1: Exit For
Next sh
If flag = 0 Then MsgBox ("La feuille " & k & " n'existe pas, Faire les modif nécessaires"): Application.EnableEvents = True: Exit Sub

With Sheets(k).[N106:N226]
Set a = .Find(tx, LookIn:=xlValues)
If Not a Is Nothing Then
firstAddress = a.Address
Do
Cells(lig, 1) = Sheets(k).Cells(a.Row, 13)
Cells(lig, 2) = Sheets(k).Cells(a.Row, 15)
Cells(lig, 3) = Sheets(k).Cells(a.Row, 1)
Cells(lig, 4) = Sheets(k).Cells(a.Row, 2)
Cells(lig, 5) = Sheets(k).Cells(a.Row, 3)
Cells(lig, 6) = Sheets(k).Cells(a.Row, 4)
Cells(lig, 7) = Sheets(k).Cells(a.Row, 5)
Cells(lig, 8) = Sheets(k).Cells(a.Row, 6)
Cells(lig, 9) = Sheets(k).Cells(a.Row, 7)
Cells(lig, 10) = Sheets(k).Cells(a.Row, 12)
Cells(lig, 11) = Sheets(k).Cells(a.Row, 9)
Cells(lig, 12) = Sheets(k).Cells(a.Row, 11)
Cells(lig, 13) = Sheets(k).Cells(a.Row, 8)
lig = lig + 1
Set a = .FindNext(a)
Loop While Not a Is Nothing And a.Address <> firstAddress
End If
End With
'End If
Next ' limite au dela de laquelle le calcul ce remet bien mais trop tôt ( ralentisement)
Application.EnableEvents = True
Application.Calculation = xlAutomatic ' met en place le calcul automatique Marche pas
End Sub


Private Sub CommandButton1_Click()
Application.Calculation = xlAutomatic ' met en place le calcul automatiqueMarche
Calculate
End Sub
 

camarchepas

XLDnaute Barbatruc
Re : réactivation du calcul automatique

bonjour,

alors un indice avec ces 2 lignes de ton code

Application.EnableEvents = True
Application.Calculation = xlAutomatic ' met en place le calcul automatique Marche pas


ne pas oublier que Private Sub Worksheet_Change(ByVal Target As Range)

est un événementiel éxécuté à chaque fois qu'un changement à lieu dans la feuille concernée,

comme tu réactives les évenements puis que tu relances le calcul auto , donc cette macro est à nouveau appelée. et repasse ton calcul en manuel .


il faudrait inverser les 2 lignes , avec peut être une tempo d'éxécution des calculs.
en ajoutant une variable et une boucle , voici l'exemple , tempo à régler en fonction de la durée des calculs

Code:
Dim FinTempo As Long

Application.Calculation = xlAutomatic
FinTempo = Timer + 5 'en secondes
Do
DoEvents
Loop Until Timer > FinTempo

Application.EnableEvents = True
 

almas

XLDnaute Occasionnel
Re : réactivation du calcul automatique

merci camarche pas de chercher la solution(j 'avais envisagé aussi le faite qu' il relisais la commande "manual" ou qu' il ne lisais pas la commande "auto", mais sans savoir pourquoi...:p)


je suis pas sur d 'avoir compris ton explication

tu voudrai que je mettre une boucle avec une tempo supérieur a la durée de l exécution de la macro avant la ligne
Application.EnableEvents = True

si c'est bien ça j 'ai fait mais c 'est toujours pareil (Passage en "sur ordre")

Public flag As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
Application.Calculation = xlManual
If Target.Address <> "$E$3" Then Exit Sub
Application.EnableEvents = False
tx = [E3]
lig = 8
[A8:M400].ClearContents
'Stop
Set plage = Sheets("base de donnée").Range("T2:T150")
For Each cel In plage
flag = 0
k = cel.Value
If k = "" Then Application.EnableEvents = True: Exit Sub
'Stop
For Each sh In ActiveWorkbook.Sheets
If sh.Name = k Then a = sh.Name: flag = 1: Exit For
Next sh
If flag = 0 Then MsgBox ("La feuille " & k & " n'existe pas, Faire les modif nécessaires"): Application.EnableEvents = True: Exit Sub

With Sheets(k).[N106:N226]
Set a = .Find(tx, LookIn:=xlValues)
If Not a Is Nothing Then
firstAddress = a.Address
Do
Cells(lig, 1) = Sheets(k).Cells(a.Row, 13)
Cells(lig, 2) = Sheets(k).Cells(a.Row, 15)
Cells(lig, 3) = Sheets(k).Cells(a.Row, 1)
Cells(lig, 4) = Sheets(k).Cells(a.Row, 2)
Cells(lig, 5) = Sheets(k).Cells(a.Row, 3)
Cells(lig, 6) = Sheets(k).Cells(a.Row, 4)
Cells(lig, 7) = Sheets(k).Cells(a.Row, 5)
Cells(lig, 8) = Sheets(k).Cells(a.Row, 6)
Cells(lig, 9) = Sheets(k).Cells(a.Row, 7)
Cells(lig, 10) = Sheets(k).Cells(a.Row, 12)
Cells(lig, 11) = Sheets(k).Cells(a.Row, 9)
Cells(lig, 12) = Sheets(k).Cells(a.Row, 11)
Cells(lig, 13) = Sheets(k).Cells(a.Row, 8)
lig = lig + 1
Set a = .FindNext(a)
Loop While Not a Is Nothing And a.Address <> firstAddress
End If
End With
'End If
Next ' limite au dela de laquelle le calcul ce remet bien mais trop tôt ( ralentisement)
Dim FinTempo As Long
Application.Calculation = xlAutomatic
FinTempo = Timer + 10 'en secondes
Do
DoEvents
Loop Until Timer > FinTempo

Application.EnableEvents = True
End Sub
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : réactivation du calcul automatique

Bonjour à tous.


Sauf votre respect, c'est un peu le foutoir cette procédure : pas de déclaration et de typage des variables, un nombre invraisemblable de points de sortie, pas d'indentation... La lecture est difficile.

À tout hasard et sans garantie, essayez :​
VB:
Public flag As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$E$3" Then Exit Sub
Application.EnableEvents = False
Application.Calculation = xlManual
tx = [E3]
lig = 8
[A8:M400].ClearContents
'Stop
Set plage = Sheets("base de donnée").Range("T2:T150")
For Each cel In plage
flag = 0
k = cel.Value
If k = "" Then GoTo S
'Stop
For Each sh In ActiveWorkbook.Sheets
If sh.Name = k Then a = sh.Name: flag = 1: Exit For
Next sh
If flag = 0 Then MsgBox ("La feuille " & k & " n'existe pas, Faire les modif nécessaires"): GoTo S

With Sheets(k).[N106:N226]
Set a = .Find(tx, LookIn:=xlValues)
If Not a Is Nothing Then
firstAddress = a.Address
Do
Cells(lig, 1) = Sheets(k).Cells(a.Row, 13)
Cells(lig, 2) = Sheets(k).Cells(a.Row, 15)
Cells(lig, 3) = Sheets(k).Cells(a.Row, 1)
Cells(lig, 4) = Sheets(k).Cells(a.Row, 2)
Cells(lig, 5) = Sheets(k).Cells(a.Row, 3)
Cells(lig, 6) = Sheets(k).Cells(a.Row, 4)
Cells(lig, 7) = Sheets(k).Cells(a.Row, 5)
Cells(lig, 8) = Sheets(k).Cells(a.Row, 6)
Cells(lig, 9) = Sheets(k).Cells(a.Row, 7)
Cells(lig, 10) = Sheets(k).Cells(a.Row, 12)
Cells(lig, 11) = Sheets(k).Cells(a.Row, 9)
Cells(lig, 12) = Sheets(k).Cells(a.Row, 11)
Cells(lig, 13) = Sheets(k).Cells(a.Row, 8)
lig = lig + 1
Set a = .FindNext(a)
Loop While Not a Is Nothing And a.Address <> firstAddress
End If
End With
'End If
Next ' limite au dela de laquelle le calcul ce remet bien mais trop tôt ( ralentisement)
S:
Application.Calculation = xlAutomatic ' met en place le calcul automatique Marche pas
Application.EnableEvents = True
End Sub


Bonne journée.


ℝOGER2327
#7554


Mercredi 11 Absolu 142 (Sainte Purée, sportswoman - fête Suprême Quarte)
2ème Sanculottide An CCXXII, 5,6095h - fête du Génie
2014-W38-4T13:27:46Z
 

almas

XLDnaute Occasionnel
Re : réactivation du calcul automatique

oui j 'ai 4 feuil qui comporte ces commandes mais le probleme réside par feuil...les feuil ou j 'ai des codes sans ces commande tous va bien.
j 'ai une idée tordu pour contourner le probleme: peut ton faire enchainé plusieurs macro sur un clic bouton?

ex: au clic macro qui déactive le calcule puis enchainement macro normal puis macro pour réactiver le code

edit : j 'avais oublier de poster et donc pas vu le message de roger ....je vais tester

EDIT2: Respect Monsieur Roger ça marche parfaitement
je vais maintenant m 'atteler a décrypter les modifications que tu a apporté pour les transposer sur mes 3 autres codes qui utilise la désactivation des calcul

j 'apprend le code via les fiches que je trouve sur internet ce qui me permet de comprendre de mieux en mieux ce que vous me proposez

un grand merci a Roger et Camarchepas

PS: comment tu met les couleurs dans ton code?(c'est manuel?) car c 'est bien plus claire a suivre
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : réactivation du calcul automatique

Re :


(...)
je vais maintenant m 'atteler a décrypter les modifications que tu a apporté pour les transposer sur mes 3 autres codes qui utilise la désactivation des calcul
(...)
Rien de sorcier : j'ai placé une étiquette S: en fin de procédure, juste avant​
Code:
Application.Calculation = xlAutomatic
Application.EnableEvents = True
et j'ai remplacé les Exit Sub par GoTo S, si bien que le mode de calcul automatique est réactivé avant de sortir de la procédure.​


(...)
PS: comment tu met les couleurs dans ton code?(c'est manuel?) car c 'est bien plus claire a suivre
J'encadre le code par les balises "[CODE=VB.]" et "[/CODE]".​


Bonne continuation.


ℝOGER2327
#7555


Mercredi 11 Absolu 142 (Sainte Purée, sportswoman - fête Suprême Quarte)
2ème Sanculottide An CCXXII, 6,0318h - fête du Génie
2014-W38-4T14:28:35Z
 

Statistiques des forums

Discussions
312 035
Messages
2 084 810
Membres
102 676
dernier inscrit
LN6