Macro actualisation auto TCD [Résolu] - Forum Excel

A voir également:Macro actualisation auto tcdMacro actualiser tcd ✓ - Forum - VB / VBA Excel actualisation automatique tcd - Forum - Excel Actualisation de TCD après une effacement de données ✓ - Forum - Excel Actualiser un TCD protégé ✓ - Forum - Excel MACRO EXCEL - création TCD ✓ - Forum - Excel

Bonjour,
J’ai réalisé avec EXCEL un petit applicatif budgétaire composé de plusieurs feuilles, une qui sert d’écran menu composé de 6 boutons (choix), chacun donnant accès à une feuille spécifique.
Parmi celles-ci, une est dédiée à différents TCD de synthèse.
A l’usage, la lecture de cette feuille de synthèse ne s’avère pas pratique et la nécessité de devoir actualiser manuellement les données pose quelques problèmes aux utilisateurs.
J’ai donc développé, sur cette même feuille, un tableau de bord alimenté à partir des données des TCD.
Cela fonctionne parfaitement, il ne me reste qu’à intégrer une actualisation automatique dès lors que l’utilisateur accède ladite feuille.
J’ai effectué des recherches et trouvé une méthodologie que je n’arrive pas à intégrer à ma macro !!!
Pourriez-vous m’aider… je vous en remercie par avance.
Voici ma macro :
Sub Accès_Tableau_Analyse_Dynamique()
'
' Accès_Tableau_Analyse_Dynamique Macro

Sheets("Analyse_Dynamique").Visible = True
Sheets("Analyse_Dynamique").Activate
ActiveSheet.Unprotect "toto"
Cells.Select
Range("A5").Select
End Sub

Forum

A voir également:Macro actualisation auto tcdMacro actualiser tcd ✓ - Forum - VB / VBA Excel actualisation automatique tcd - Forum - Excel Actualisation de TCD après une effacement de données ✓ - Forum - Excel Actualiser un TCD protégé ✓ - Forum - Excel MACRO EXCEL - création TCD ✓ - Forum - Excel

Web: www.shapebootstrap.net

2 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

Un TCD ne se met pas à jour tout seul. Il faut donc l'ajouter à ton code, quelque chose comme ça :

With Sheets("Analyse_Dynamique")
.Visible = True
.Activate
.PivotTables("Nom du TCD").PivotCache.Refresh
End With


Si la feuille est protégée, il faut effectivement la déprotéger puis la reprotéger.
Si la feuille contient plusieurs TCD, il faut faire une boucle.

[email protected]


Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour à tous,

Pour rafraichir tous les TCD d'un coup à l'activation de ta feuille, mettre dans le module de la feuille de synthèse :

Private Sub Worksheet_Activate()
ThisWorkbook.RefreshAll
End Sub

eric

Reply
réponses:
  • auteur

  • auteur

    Bonjour,
    Merci [email protected], Eric pour votre attention.
    J'essai en vain de mettre en œuvre vos recommandations mais je n'y arrive pas...
    Il faut dire que je suis très novice en matière de macro et je ne maîtrise pas du tout cette option qui semble cependant présenter de nombreux avantages.
    J'ai réussi à réaliser mon petit appli en cherchant sur le Net et sur CCM en particulier où l'on trouve de nombreuses aux questions posées.
    Mais là, j'avoue ne pas comprendre.
    Voici mon dernier essai (planté également) :
    End Sub Accès_Tableau_Analyse_Dynamique()
    '
    'Accès Analyse_Dynamique_MAJ
    '
    Private Sub Worksheet_Activate()
    ThisWorkbook.RefreshAll
    Sheets("Analyse_Dynamique").Visible = True
    Sheets("Analyse_Dynamique").Activate
    ActiveSheet.Unprotect "toto"
    Cells.Select
    Range("I20").Select
    End Sub

  • auteur

    Bonjour,

    difficile de te répondre sans le fichier ni la ligne en erreur et son message.
    2-3 petites modifs :

    'Accès Analyse_Dynamique_MAJ ' Private Sub Worksheet_Activate()     ThisWorkbook.RefreshAll     Sheets("Analyse_Dynamique").Visible = True     Sheets("Analyse_Dynamique").Select     ActiveSheet.Unprotect "toto"     Range("I20").Select End Sub

    Merci d'utiliser la balise code (icone <>) pour la lisibilité.

    Mais c'était sensé être mis dans le module de ta feuille de synthèse. Pourquoi tu en actives une autre ?
    Si ta feuille de synthèse est 'Analyse_Dynamique' pourquoi la cacher ? Si c'est le cas il faudra prévoir un autre type d'activation. Par définition tu ne peux pas activer une feuille cachée.
    eric

    PS : Après avoir relu, il faudrait mettre ce code (5 lignes) sur ton bouton.

  • auteur

    Bonjour Eric,
    J'ai bien transposé vos instructions mais j'ai le message :
    Impossible d'exécuter la macro 'TEST_MACRO.xlsm!Accès_Tableau_Analyse_Dynamique' Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées.
    Vérification faite, toutes les autres macros fonctionnent et ma macro est bien dans ce classeur.
    J'ai tenté d'enregistrer une macro pas à pas mais là aussi problème, car arrivé sur ma feuille Analyse_Dynamique, je ne peux me positionner sur les cellules et effectuer l'actualisation manuellement.
    Merci encore de votre attention.
    Cordialement
    Jean

  • auteur

    Je viens de tenter une ultime modif car j'ai constaté que sur toutes mes autres macros (qui fonctionnent) il n'y avait pas dans le nom de la macro le préfix 'TEST_MACRO.xlsm!.
    Cette fois, plus de message mais cela ne fonctionne toujours pas, il ne se passe rien du tout lorsque je clique sur le bouton d'accès bien que la macro soit bien affectée !
    Désolé de vous importuner autant.
    Cordialement
    Jean

  • auteur

    Bonjour,

    je ne peux savoir qu'en voyant le fichier, comme déjà dit.
    Le déposer anonymisé sur cjoint.com et coller ici le lien fourni.
    eric

  • auteur

    Bonsoir Eric,
    OK je prépare un fichier test et vous l'adresse comme indiqué dès que possible.
    Merci par avance.
    Cordialement.
    Jean

  • auteur

    Bonjour Eric,
    Voici comme convenu le fichier de test que j’ai créé.
    Comme je vous l’ai indiqué, je souhaite que lorsque l’on clique sur le Bouton « Tableau_Analyse_Dynamique » de l’écran Menu, on accède à la feuille « Analyse_Dynamique », on actualise automatiquement les tableaux croisés et l’on positionne le curseur sur la cellule I20 du tableau de bord afin que l’utilisateur puisse sélectionner le mois, les autres cellules étant protégées.
    J’ai à nouveau essayé avant de vous faire suivre le fichier mais rien n’y fait, je n’y arrive pas. Je pense pourtant ne pas être loin du but…
    Il me reste encore du chemin à faire car en constituant le fichier test, je m’aperçois qu’alimenter les champs du tableau de bord à l’aide de RECHERCHEV n’est pas satisfaisant et présente des inconvénients.
    Je reste bien entendu à votre entière disposition si nécessaire.
    Encore merci de votre attention.
    Cordialement
    Jean

    https://www.cjoint.com/c/ICwszXeFarL

  • auteur

    Bonjour,

    Tu aurais pu fournir le mot de passe.

    Dans ThisWorkbook Workbook_Open() à l'ouverture du classeur :
    1) je masque toutes feuilles sauf Menu.
    Masquage xlSheetVeryHidden car là il suffisait de faire un clic-droit sur un onglet pour avoir Afficher.. et accéder à tous les onglets.
    2) je les protège avec UserInterfaceOnly:=True
    Seul l'utilisateur est bloqué, les macros peuvent travailler sans déprotéger les feuilles.
    Tu peux donc supprimer tous les autres .Unprotect et .Protec devenus inutiles.

    Dans ThisWorkbook Workbook_SheetActivate (à l'activation d'une feuille) :
    je masque les onglets autres que l'actif et Menu.
    Comme ça ils se masquent même si tu cliques sur l'onglet menu.
    Tu peux supprimer les Sheets("xxx").Visible = False (c'est =xlSheetHidden ou =xlSheetVeryHidden qu'il faut mettre d'ailleurs) devenus inutiles

    Sub Accès_Analyse_Dynamique() :
    je rafraîchi les TCD et j'active la feuille

    Pas besoin d'un module par macro. Rassemble-les toutes dans unique module. C'est pénible de devoir chercher dans l'un ou l'autre. Ca ne te facilite pas le travail...

    Il reste un message d'alerte à l'ouverture mais je n'arrive pas à l'enlever. Je ne l'ai pas sur le RefreshAll
    Tu dois avoir une version excel récente car je ne vois aucun TCD, et je ne vois pas ce que je pourrais faire de plus..
    Ca m'est déjà arrivé, sur 2010 on ne voit pas certains éléments nouveaux de 2016 ou 365.
    https://www.cjoint.com/c/ICwwNmf4vL6
    eric

  • auteur

    Bonjour Eric,
    Un grand merci pour ton implication et désolé pour le Mot de Pass, à voiloir chercher le détail, on oublie l'essentiel !
    Je vais prendre quelques jours pour analyser et comprendre dans le détail l'impact des corrections.
    Il faut dire que j'arrive à 70 balais et j'ai découvert excel il y a 3à 4 ans. Je dois reconnaitre que je trouve cet outil génial et révèle chaque jour sa puissance notamment grâce à la communauté CCM.
    Quant à la version EXCEL, j'ai 2013 !
    Encore merci et peut-être à bientôt sur la toile CCM.
    Amicalement
    Jean

  • auteur

    Re-Bonjour,
    Désolé, qq tests plus tard, constat :
    J'essaie de créer une opération… message 1004 sur module 5 ligne 27 et impossible de créer l'enregistrement.
    Sur l'écran Tableau de Bord, la feuille n'est pas protégée et l'utilisateur peut saisir n'emporte où dans le tableau de synthèse.
    J'ai essayé de protéger… rien n'y fait.
    Pour le mot de pass : Toto mais je pense que tu avais trouvé.
    Jean

  • auteur

    Bonjour,

    La question initiale était la mise à jour des TCD. Est-ce résolu ?

    message 1004 sur module 5 ligne 27
    Sheets("CreOp").Select : il faudrait peut être rendre visible ta feuille pour l'activer.
    De plus cette partie est particulièrement mal programmée.
    Il faut éliminer tous les .Select inutiles qui ralentissent considérablement le code. il ne faut garder que ceux obligatoires, c'est à dire lorsque vba ne te laisse plus le choix.
    Par exemple au lieu de tes 24 lignes pour 2 valeurs tu mets :

        With Sheets("Base")         lig = .Cells(Rows.Count, "A").End(xlUp).Row + 1 ' 1ère ligne vide pour nouvelle opération         .Cells(lig, "A").Value = CDate(Sheets("CreOp").[E7].Value)    'inscription date         .Cells(lig, "F").Value = Sheets("CreOp").[E9].Value    'inscription opé         ' etc     End With

    nul besoin d'activer ou sélectionner quoique ce soit.
    Attention au point devant
     .Cells(lig, "A")
    , il est important.
    Il signifie que tu t'adresses à la feuille désignée dans le With qui précède :
     With Sheets("Base")

    Corrige tout ton code dans ce sens, tu y verras beaucoup plus clair en plus.

    Sur l'écran Tableau de Bord, la feuille n'est pas protégée et l'utilisateur peut saisir n'emporte où dans le tableau de synthèse.
    J'ignore ce qu'est l'écran Tableau de Bord.
    Je suppose que tu as dû laisser un .Unprotect inutile ou trop de cellules déverrouillées.

    Si ton pb est résolu merci de passer le topic en résolu (roue dentée à coté de ton titre en haut).
    Si tu as d'autres soucis il faudra démarrer une nouvelle question.
    eric

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed