Bonjour, utilisant beaucoup de tableaux croisés dynamiques (TCD) je cherche à automatiser leur actualisation afin de n'avoir qu'un seul bouton à cliquer au lieu de tous les actualiser un à un.
Voilà ce que j'ai fait jusqu'à présent, qui me semble marcher pas trop mal hormis deux problèmes que je n'arrive pas à résoudre.
Premier problème : le "if Sheets(x) Is Charts" ne semble pas marcher... je ne passe jamais dans la boucle pourtant j'ai essayé avec un fichier tout bidon composé d'un onglet graphique, un onglet avec un TCD et un onglet avec juste les données. Et si je ne traite pas différemment les graphiques il renvoie une erreur qui m'arrêterait le processus puisque je crée un GestionErreur après.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Sub MiseAJour() 'Boucle sur toutes les feuilles du fichier MsgBox ("Nombre de feuilles : " & Sheets.Count) For x = 1 To Sheets.Count ' Sélection (et activation) de la feuille en cours Sheets(x).Select If Sheets(x) Is Charts Then MsgBox ("C'est un graphique") Else 'Gestion des erreurs On Error GoTo GestionErreur Dim nbPivotTables As Integer nbPivotTables = ActiveSheet.PivotTables.Count ' Actualisation des tableaux dynamiques contenus dans la feuille For y = 1 To nbPivotTables ActiveSheet.PivotTables(y).RefreshTable Next y End If Next x MsgBox ("Actualisation de tous les tableaux dynamiques effectuée") End GestionErreur: MsgBox ("Il n'y a pas de tableau dynamique dans votre onglet") End Sub
Deuxième problème : je ne comprends pas pourquoi certaines fois il me crée une erreur lorsqu'il n'y a pas de TCD dans la page (renvoyant mon message d'erreur) et que d'autres fois il me met juste "MAJ effectuée" comme je lui précise à la fin de ma boucle for. J'ai essayé de voir dans quelles circonstances il me faisait l'un ou l'autre mais je n'arrive pas à déterminer qu'est-ce que je change.
Voila j'espère avoir été clair sur mes problèmes, merci de m'avoir lu
Partager