IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E]Automatisation de l'actualisation de tableaux croisés dynamiques


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut [VBA-E]Automatisation de l'actualisation de tableaux croisés dynamiques
    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.

    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
    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.

    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

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Travaille avec des WorkSheets et pas des Sheets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub MiseAJour()
        'Boucle sur toutes les feuilles du fichier
        Dim wk as Worksheet, pt as pivottable
        For each wk in ThisWorkbook.Worksheets
                ' Actualisation des tableaux dynamiques contenus dans la feuille
                For each pt in wk.pivottables
                    pt.RefreshTable
                Next pt
        Next wk
        MsgBox "Actualisation de tous les tableaux dynamiques effectuée"
    End Sub

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Merci ça marche bien !

    Par contre une autre petite question... Comment fait-on pour pouvoir l'utiliser de plusieurs fichiers ?

    J'ai mis ça dans le module de macro de Perso.xls pour pouvoir l'utiliser de partout mais du coup, le This.Workbook ne doit plus faire référence au bon fichier car il ne m'actualise rien... J'ai ajouté un compteur de TCD pour voir + un message quand je passe dans la boucle des TDC et rien.

    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
    Dim wSheet As Worksheet, tcd As PivotTable
        Dim nbPivotTables As Integer
        nbPivotTables = 0
     
        'Boucle sur toutes les feuilles du fichier
        For Each wSheet In ThisWorkbook.Worksheets
                ' Actualisation des tableaux dynamiques contenus dans la feuille
                For Each tcd In wSheet.PivotTables
                    tcd.RefreshTable
                    MsgBox ("Passage dans la boucle de rafraîchissement")
                    nbPivotTables = nbPivotTables + 1
                Next tcd
        Next wSheet
     
        MsgBox "Actualisation des " & nbPivotTables & " tableaux dynamiques effectuée"

  4. #4
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Je pense avoir trouvé en fait en posant ma question... il doit suffire de supprimer le ThisWorkbook, ça a l'air de marcher !!!

    Merci encore dadavyvy !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2002] [VBA] Actualisation de tableaux croisés dynamiques
    Par rodrigue62 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/08/2009, 10h27
  2. [XL-2003] Tableaux Croisés Dynamiques en vba
    Par mercatog dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/07/2009, 15h40
  3. Réponses: 1
    Dernier message: 27/02/2009, 10h57
  4. Actualisation de tableaux croisés dynamiques
    Par anisr dans le forum Général VBA
    Réponses: 1
    Dernier message: 28/12/2006, 17h30
  5. [VBA-E]Tableaux croisés dynamiques
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/06/2006, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo