MAJ Tab. Crois. Dyn sur feuille non existante

shoof

XLDnaute Nouveau
Bonjour,

Je souhaite mettre à jour automatiquement un TCD lorsque l'utilisateur clique sur la feuille qui le contient.
En effet, il a saisi des données dans une feuille qui contient la base de données, et je voudrais que quand il clique sur l'onglet de la feuille du TCD, ce TCD soit mis à jour sans qu'il ait à faire quelque manip que ce soit.

Jusque là, j'ai compris qu'on pouvait le faire de la manière suivante:
macro sur l'objet feuille_du_TCD (et non dans un module)
Private Sub Worksheet_Activate()
ActiveSheet.PivotTables("nom_du_TCD").PivotSelect "", xlDataAndLabel
ActiveSheet.PivotTables("nom_du_TCD").RefreshTable
End Sub

No problem... sauf que au départ, l'utilisateur reçoit un fichier qui ne contient pas cette feuille! Il lance une grosse macro qui va notamment importer les données et générer la fameuse feuille contenant le TCD.
Je ne peux donc pas écrire de code dans une feuille qui n'existe pas encore...

Auriez-vous une idée?

Shoof
 

pierrejean

XLDnaute Barbatruc
Re : MAJ Tab. Crois. Dyn sur feuille non existante

bonjour shoof

et bienvenue sur XLD

Ne serait-il pas possible ,au lieu de generer la feuille ,de l'avoir préparée avec la macro en question ?
Auquel cas c'est sur la 'grosse macro' qu'il faut intervenir
 

shoof

XLDnaute Nouveau
Re : MAJ Tab. Crois. Dyn sur feuille non existante

J'y ai pensé, mais... étant un autodidacte débutant (comme beaucoup surement!) je ne maitrise pas grand chose, donc il me semble qu'avec mon niveau de programmation VBA, on ne peut pas de manière simple "prégénérer" le TCD car la BD est importée (fichier csv choisi par l'utilisateur quand il lance la grosse macro). Donc, à l'origine cette BD n'existe pas, et je ne vois pas trop comment je pourrais redéfinir la plage de données.
Mais c'est une piste. Merci

Autre idée:
L'utilisateur lance la grosse macro.
Une fois que la BD sera importé et le TCD sera généré, et que donc toutes les feuilles existeront, ne serait-il pas possible d'écrire à la fin de la grosse macro une instruction disant d'aller écrire le code de MAJ (sus-cité dans 1er post) dans le code de la feuille (qui existerait du coup). Bref, dire à la macro d'aller écrire une macro...!
 

shoof

XLDnaute Nouveau
Re : MAJ Tab. Crois. Dyn sur feuille non existante

Oups, problème...
sur tes conseils, je crée d'entrée la feuille qui accueille la macro de MAJ, mais ça plante car dans ce code, je lui dis de mettre à jour un TCD qui n'existe pas encore...
Il doit bien y avoir moyen de jouer avec un onerror machin truc afin qu'il continue la macro principale, non?

Donc si tu (ou d'autres) veux m'aider, voici 1 fichier zippé téléchargeable sur
Free - Envoyez vos documents
il contient:
- le csv à importer
- l'appli "Prestacool" sans la macro de maj (ça va donc jusqu'au bout)
- l'appli "Prestacool" avec la tentative de macro de maj du TCD (ça plante)

Il suffit de lancer l'appli, de cliquer sur le doigt, et de choisir le csv. Au final, ça demande où enregistrer le nouveau fichier (xls).
Le xlt "sans la macro..." c'est pour voir le résultat:
on a un TCD "Restasphère" sur la feuille "Restasphère".
l'utilisateur saisit dans la feuille BdD des valeurs quelconques dans les 3 champs "avancement", "Qté loc réalisé" et "commandé".
Le but est que le TCD Restasphère soit mis à jour automatiquement quand l'utilisateur va le consulter.

Le code de génération du TCD Restasphère est en ligne 1126 du module 1, mais à priori on s'en fiche.

En tout les cas, merci de ton aide, je suis impressionné par la réactivité de ce forum!
 

chris

XLDnaute Barbatruc
Re : MAJ Tab. Crois. Dyn sur feuille non existante

Bonjour à tous
Grosse bise à PierreJean et à Dany

Et pourquoi pas tout simplement dans le module Workbook
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    For i = 1 To ActiveSheet.PivotTables.Count
        ActiveSheet.PivotTables(i).RefreshTable
    Next i
End Sub

Avec des contrôles éventuels pour limiter la portée
 

pierrejean

XLDnaute Barbatruc
Re : MAJ Tab. Crois. Dyn sur feuille non existante

Re

Bises Chris

Avec le on error on aurait:

Code:
On Error resume next
    ActiveSheet.PivotTables("Restasphère").PivotSelect "", xlDataAndLabel
    ActiveSheet.PivotTables("Restasphère").RefreshTable
On error goto 0

pas testé bien sur , puisque pas de csv .......

et bien entendu la solution de Chris qui est certainement la meilleure
 

shoof

XLDnaute Nouveau
Re : MAJ Tab. Crois. Dyn sur feuille non existante

Je sens qu'on ne doit pas être très loin de la solution!
Malheureusement, vos codes ne fonctionnent pas...
Tant pis, je creuse encore un peu avec vos idées, et si je ne trouve pas, je finirai par
Sheets("Restasphère").Select
Range("C1").Select
ActiveCell.FormulaR1C1 = "faites un clic droit sur le tableau, puis "actualiser""
:cool:
Merci encore de m'avoir consacré du temps.

Au fait Pierrejean, le csv est bien dans le zip uploadé.
 

chris

XLDnaute Barbatruc
Re : MAJ Tab. Crois. Dyn sur feuille non existante

Bonjour

Le code que j'ai donné met à jour tout TCD trouvé sur toute feuille dès qu'on active la feuille.

Je ne vois donc pas pourquoi cela ne marche pas : l'as-tu placé au bon endroit, donc dans le module du Workbook ?
 

shoof

XLDnaute Nouveau
Re : MAJ Tab. Crois. Dyn sur feuille non existante

Effectivement ton code est visiblement bon (je débute) et il n'y a pas de raison que ça ne fonctionne pas...
Je l'ai pourtant bien où tu l'as dit. Je vais tester encore et te tiendrai au courant.
A la limite mon message plus haut contient les fichiers si tu veux tester.
 

chris

XLDnaute Barbatruc
Re : MAJ Tab. Crois. Dyn sur feuille non existante

Bonjour

Chez moi ton tableau ne marche pas car tes nombres sont importés avec des points et ne sont pas reconnus comme nombres.
Si je remplace les points par des virgules, l'actualisation se fait.

Attention certaines parties du code ne marche pas avec la version 2002 car les libellés automatiques des TCD varient d'une version à l'autre.
 

shoof

XLDnaute Nouveau
Re : MAJ Tab. Crois. Dyn sur feuille non existante

J'ai fouillé un peu... sans succès! mais mon chef s'est engagé à me payer une formation VBA :) je trouverai la solution. Pour l'heure, j'ai fait sans.
En tout cas merci Pierrejean et Chris de m'avoir consacré du temps. Je sais maintenant où trouver de l'aide.
++
Pascal
 

Discussions similaires

Statistiques des forums

Discussions
312 299
Messages
2 086 991
Membres
103 420
dernier inscrit
eric.wallet46