Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Recalcul des dépendants ne fonctionne plus...

6 réponses
Avatar
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.

Je ne comprend pas ce qui bloque.

Merci d'avance pour votre aide

@+
HD

6 réponses

Avatar
MichD
Bonjour,

Dans un classeur Excel,
Fichier / Options / formules / Section "Mode de calcul" / est-ce que le
bouton radio "Automatique" est sélectionné?
Avatar
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
'------------------------------------------
Avatar
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
Avatar
MichD
Probablement, les macros événementielles ont été désactivées.

Exécute cette macro une fois :

'---------------------------
Sub test()
Application.EnableEvents = True
End Sub
'---------------------------
Avatar
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
Avatar
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