[VBA] Recalcul des dépendants ne fonctionne plus...
6 réponses
HD
Bonjour,
J'ai un classeur assez lourd sur lequel j'ai fini par désactiver le
calcul automatique. J'ai néanmoins un calcul des cellules dépendantes
aux cellules modifiées qui était jusque là utilisé et fonctionnait très
bien... sauf que depuis la macro ne recalcul plus les dépendants et je
suis obligé de forcer le calcul en faisant F9.
Voici le code utilisé pour forcer le calcul des dépendants:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
On Error Resume Next
If Target.Dependents.HasFormula Then Target.Dependents.Calculate
End Sub
Sur mes feuilles en question, la propriété EnableCalculation des
feuilles est bien à True. Il semblerait que cela soit général à tout le
classeur.
Dans un classeur Excel, Fichier / Options / formules / Section "Mode de calcul" / est-ce que le bouton radio "Automatique" est sélectionné?
MichD
Si tu veux passer en mode de calcul manuel SEULEMENT lorsque l'onglet de la feuille "Feuil1" est la feuille SINON Excel soit en mode de calcul automatique,
copie ceci dans le Thisworkbook de ton classeur :
Dans la procédure, adapte le nom de l'onglet de la feuille "Feuil1" pour le nom de l'onglet de feuille que tu désires! '------------------------------------------ Private Sub Workbook_SheetActivate(ByVal Sh As Object) For Each Sh In ThisWorkbook If UCase(Sh.Name) = UCase("Feuil1") Then Application.Calculation = xlCalculationManual Else Application.Calculation = xlCalculationAutomatic End If Next End Sub '------------------------------------------
Si tu veux passer en mode de calcul manuel SEULEMENT lorsque l'onglet de la
feuille "Feuil1" est la feuille SINON Excel soit en mode de calcul
automatique,
copie ceci dans le Thisworkbook de ton classeur :
Dans la procédure, adapte le nom de l'onglet de la feuille "Feuil1" pour le
nom de l'onglet de feuille que tu désires!
'------------------------------------------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
For Each Sh In ThisWorkbook
If UCase(Sh.Name) = UCase("Feuil1") Then
Application.Calculation = xlCalculationManual
Else
Application.Calculation = xlCalculationAutomatic
End If
Next
End Sub
'------------------------------------------
Si tu veux passer en mode de calcul manuel SEULEMENT lorsque l'onglet de la feuille "Feuil1" est la feuille SINON Excel soit en mode de calcul automatique,
copie ceci dans le Thisworkbook de ton classeur :
Dans la procédure, adapte le nom de l'onglet de la feuille "Feuil1" pour le nom de l'onglet de feuille que tu désires! '------------------------------------------ Private Sub Workbook_SheetActivate(ByVal Sh As Object) For Each Sh In ThisWorkbook If UCase(Sh.Name) = UCase("Feuil1") Then Application.Calculation = xlCalculationManual Else Application.Calculation = xlCalculationAutomatic End If Next End Sub '------------------------------------------
HD
Dans un classeur Excel, Fichier / Options / formules / Section "Mode de calcul" / est-ce que le bouton radio "Automatique" est sélectionné?
Surtout pas... puisque je ne veux pas être en calcul automatique. Ce classeur est lourd et long à calculer (dans les 30 secondes). Le calcul n'est donc pas automatique mais passé en "manuel". Par contre, pour ne pas trop pénaliser les utilisateurs j'avais mis en événement de modification d'une feuille du classeur (Workbook_SheetChange) le calcul des dépendants de la cellule modifiée... sauf que mystérieusement, depuis quelques jours, le calcul des dépendants ne fonctionne plus... je suis contraint de calculer le classeur ou la feuille complète...
Mon souci porte sur le calcul des dépendants.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) On Error Resume Next If Target.Dependents.HasFormula Then Target.Dependents.Calculate End Sub
ne fonctionne plus...
@+ HD
Dans un classeur Excel,
Fichier / Options / formules / Section "Mode de calcul" / est-ce que
le bouton radio "Automatique" est sélectionné?
Surtout pas... puisque je ne veux pas être en calcul automatique. Ce
classeur est lourd et long à calculer (dans les 30 secondes). Le calcul
n'est donc pas automatique mais passé en "manuel". Par contre, pour ne
pas trop pénaliser les utilisateurs j'avais mis en événement de
modification d'une feuille du classeur (Workbook_SheetChange) le calcul
des dépendants de la cellule modifiée... sauf que mystérieusement,
depuis quelques jours, le calcul des dépendants ne fonctionne plus... je
suis contraint de calculer le classeur ou la feuille complète...
Mon souci porte sur le calcul des dépendants.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
On Error Resume Next
If Target.Dependents.HasFormula Then Target.Dependents.Calculate
End Sub
Dans un classeur Excel, Fichier / Options / formules / Section "Mode de calcul" / est-ce que le bouton radio "Automatique" est sélectionné?
Surtout pas... puisque je ne veux pas être en calcul automatique. Ce classeur est lourd et long à calculer (dans les 30 secondes). Le calcul n'est donc pas automatique mais passé en "manuel". Par contre, pour ne pas trop pénaliser les utilisateurs j'avais mis en événement de modification d'une feuille du classeur (Workbook_SheetChange) le calcul des dépendants de la cellule modifiée... sauf que mystérieusement, depuis quelques jours, le calcul des dépendants ne fonctionne plus... je suis contraint de calculer le classeur ou la feuille complète...
Mon souci porte sur le calcul des dépendants.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) On Error Resume Next If Target.Dependents.HasFormula Then Target.Dependents.Calculate End Sub
ne fonctionne plus...
@+ HD
MichD
Probablement, les macros événementielles ont été désactivées.
Exécute cette macro une fois :
'--------------------------- Sub test() Application.EnableEvents = True End Sub '---------------------------
Probablement, les macros événementielles ont été désactivées.
Exécute cette macro une fois :
'---------------------------
Sub test()
Application.EnableEvents = True
End Sub
'---------------------------
Probablement, les macros événementielles ont été désactivées.
Exécute cette macro une fois :
'--------------------------- Sub test() Application.EnableEvents = True End Sub '---------------------------
HD
Bonjour MichD,
Je crois que je viens de trouver l'explication... auparavant... j'utilisais surtout ce fichier pour moi... les feuilles n'étaient donc pas protégées et le calcul des dépendants sur le classeur en calcul manuel fonctionnait. Depuis que je travaille avec d'autres personnes sur ce fichier et que je l'ai donc protégés le calcul des dépendants ne fonctionne plus. Je m'en suis rendu compte en testant sur une toute nouvelle feuille crée que je n'avais pas encore eu le temps de protéger. Par contre, cela me pose problème. Je voudrais que le calcul des dépendants puisse fonctionner même sur les feuilles protégées. J'ai testé en protégeant une feuille avec les options de protéction à autoriser sur toutes les options mais le calcul des dépendants ne fonctionne pas.
Y'a-t-il donc moyen de calculer les dépendants sur une feuille protégée ? J'ai bien pensé via le VBA à déprotéger la feuille, calculer les dépendants puis reprotéger la feuillle... mais avec les lenteurs de protection/déprotection d'Excel 2013 j'ai peur que cela soit lourd...
@+ HD
Bonjour MichD,
Je crois que je viens de trouver l'explication... auparavant...
j'utilisais surtout ce fichier pour moi... les feuilles n'étaient donc
pas protégées et le calcul des dépendants sur le classeur en calcul
manuel fonctionnait. Depuis que je travaille avec d'autres personnes sur
ce fichier et que je l'ai donc protégés le calcul des dépendants ne
fonctionne plus. Je m'en suis rendu compte en testant sur une toute
nouvelle feuille crée que je n'avais pas encore eu le temps de protéger.
Par contre, cela me pose problème. Je voudrais que le calcul des
dépendants puisse fonctionner même sur les feuilles protégées. J'ai
testé en protégeant une feuille avec les options de protéction à
autoriser sur toutes les options mais le calcul des dépendants ne
fonctionne pas.
Y'a-t-il donc moyen de calculer les dépendants sur une feuille protégée
?
J'ai bien pensé via le VBA à déprotéger la feuille, calculer les
dépendants puis reprotéger la feuillle... mais avec les lenteurs de
protection/déprotection d'Excel 2013 j'ai peur que cela soit lourd...
Je crois que je viens de trouver l'explication... auparavant... j'utilisais surtout ce fichier pour moi... les feuilles n'étaient donc pas protégées et le calcul des dépendants sur le classeur en calcul manuel fonctionnait. Depuis que je travaille avec d'autres personnes sur ce fichier et que je l'ai donc protégés le calcul des dépendants ne fonctionne plus. Je m'en suis rendu compte en testant sur une toute nouvelle feuille crée que je n'avais pas encore eu le temps de protéger. Par contre, cela me pose problème. Je voudrais que le calcul des dépendants puisse fonctionner même sur les feuilles protégées. J'ai testé en protégeant une feuille avec les options de protéction à autoriser sur toutes les options mais le calcul des dépendants ne fonctionne pas.
Y'a-t-il donc moyen de calculer les dépendants sur une feuille protégée ? J'ai bien pensé via le VBA à déprotéger la feuille, calculer les dépendants puis reprotéger la feuillle... mais avec les lenteurs de protection/déprotection d'Excel 2013 j'ai peur que cela soit lourd...
@+ HD
HD
Bon, à priori, cela devrait tourner... voici le code adapté:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) On Error Resume Next Dim BProt As Boolean If Target.Dependents.HasFormula Then BProt = IsProtect(ActiveSheet) If BProt = True Then Deprot Target.Dependents.Calculate If BProt = True Then Prot End If End Sub
j'ai bien sûr une fonction IsProtect pour tester la protection de la feuille et les fonctions Prot et Deprot pour protéger ou déprotéger la feuille.
Après teste, cela semble transparent pour l'utilisateur.
@+ HD
Bon, à priori, cela devrait tourner... voici le code adapté:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
On Error Resume Next
Dim BProt As Boolean
If Target.Dependents.HasFormula Then
BProt = IsProtect(ActiveSheet)
If BProt = True Then Deprot
Target.Dependents.Calculate
If BProt = True Then Prot
End If
End Sub
j'ai bien sûr une fonction IsProtect pour tester la protection de la
feuille et les fonctions Prot et Deprot pour protéger ou déprotéger la
feuille.
Après teste, cela semble transparent pour l'utilisateur.
Bon, à priori, cela devrait tourner... voici le code adapté:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) On Error Resume Next Dim BProt As Boolean If Target.Dependents.HasFormula Then BProt = IsProtect(ActiveSheet) If BProt = True Then Deprot Target.Dependents.Calculate If BProt = True Then Prot End If End Sub
j'ai bien sûr une fonction IsProtect pour tester la protection de la feuille et les fonctions Prot et Deprot pour protéger ou déprotéger la feuille.
Après teste, cela semble transparent pour l'utilisateur.