Gestion des évènements à l'interieur d'un module

anto91

XLDnaute Nouveau
Bonjour à tous,
Voila à l'interieur d'un module, je génère automatiquement un tableau croisé dynamique avec plusieurs autres traitments, et je souhaiterais depuis ce module écrire des choses dans la fonction pivotTableUpdate (fonction gérant un évenement).
Je sais qu'il faut aller sur la feuille, ensuite "voir code" et séléctionner la fonction. Seulement comme le tableau est généré automatiquement, j'aimerai faire de même pour les évènements.
Y a-t-il possibilité d'écrire dans cette fonction depuis un module?
Merciii pour votre aide
 

Dan

XLDnaute Barbatruc
Re : Gestion des évènements à l'interieur d'un module

Bonjour,

D'abord bienvenue à toi sur ce forum d'échange sur Excel.
Concernant ta demande :
je souhaiterais depuis ce module écrire des choses dans la fonction pivotTableUpdate
Ce que tu veux faire c'est créer une macro qui modifie une autre ? :confused: Peux-tu être plus explicite ou même placer un fichier avec données non confidentielles.

A te lire
 

anto91

XLDnaute Nouveau
Re : Gestion des évènements à l'interieur d'un module

Merci Dan pour ton accueil. Je vais essayer d'être plus explicite.
J'ai un fichier excel avec une seule feuille. J'ai écrit une macro qui me génère automatiquement un tableau croisé dynamique sur une deuxième feuille (avec les données de la première feuille). Avec quelques autres traitements, comme par exemple la mise en place de commentaires sur certaines cellules spécifiques. Or lorsque dans le tableau je fais un choix en sélectionnant / déselectionnant des choses, il ne se met pas à jour (au niveau des commentaires, qui restent sur les anciennes cellules...). Donc j'ai besoin de rajouter du code dans la fonction PivotTableUpdate. Seulement mon soucis, c'est que j'aimerai placer ce code dans cette fonction dès le départ, à la génération du tableau croisé dynamique. Autrement dit, dans le module de ma macro de génération du tableau, j'aimerai y mettre le code à rajouter dans la fonction PivotTableUpdate. Est-ce possible?
Merci
 

Dan

XLDnaute Barbatruc
Re : Gestion des évènements à l'interieur d'un module

Re,

Ok je pense avoir compris ta demande.
Là c'est normal que si le TCD bouge tes commentaires ne bougent pas.
Je présume que ce sont des commentaires tels que ceux que l'on peut mettre via menu/insertion/commentaires et qu'ils sont fonction de certains critères.

Pourquoi ne pas faire une macro séparée pour tes commentaires et tu y fais appel à la génération de ton TCD ou de l'update.
Exemple :
A.Generation TCD
1. Macro commentaire
Sub commentaire
...
End Sub
2. Macro TCD
Sub TCD
ActiveSheet.PivotTableWizard SourceType:=xlDatabase,....
...
Call commentaire -> ici appel de la macro commentaire
....
End sub

B.Update
On fait appel à la macro commentaires dans la feuille du TCD et ce, via une macro comme ci-dessous et qui va agir chaque fois que la feuille TCD changera :
1. Macro commentaire
Sub commentaire
...
End Sub
2. Macro changement TCD
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Call commentaire -> ici appel de la macro commentaire
End Sub

Est-ce ce que cela te conviendrait ?

A te lire
 

anto91

XLDnaute Nouveau
Re : Gestion des évènements à l'interieur d'un module

Dan,

Effectivement tu as raison je pense que c'est la marche à suivre afin de regler mon pb. Seulement j'aimerais mettre l'appel à la fonction commentaire automatiquement dans la fonction worksheet_change(...) sans l'écrire moi-même. C'est-à-dire que dans la macro qui génère le tcd, il y ai également une ligne qui ajoute "Call commentaire" dans la fonction worksheet_change(...).
Est-ce possible?
Merci pour ton aide
 

Dan

XLDnaute Barbatruc
Re : Gestion des évènements à l'interieur d'un module

Re,

C'est-à-dire que dans la macro qui génère le tcd, il y ai également une ligne qui ajoute "Call commentaire" dans la fonction worksheet_change(...)

Là ce que tu veux faire c'est écrire dans une macro pendant le déroulement d'une autre macro ? Il me semble avoir déjà vu cela mais je dois vérifier.

Maintenant si tu n'as que ton TCD sur cette feuille (ce que je te conseille !), pourquoi ne pas mettre cela par défaut dans la macro PRIVATE worksheet_change(...).
Les commentaires sont placés en fonction de quels critères ?

Désolé de ces questions, mais je cherche à comprendre le but de cette façon de faire.

A te lire
 

anto91

XLDnaute Nouveau
Re : Gestion des évènements à l'interieur d'un module

En fait, le point de départ c'est le fichier excel avec une seule feuille contenant des données. Ce fichier est destiné à une tierce personne qui ne connait rien à Vba. Grâce à une macro, cette personne obtient le TCD dans une feuille différente (donc effectivement le tcd sera seul sur une feuille).
Dans tous les cas, une feuille à part sera créée, avec le TCD.
Je suis un peu novice avec les fonctions evenementielles, et pour l'instant, le seul moyen est d'ajouter à la main, après la création de la feuille contenant le tcd, l'appel à la fonction commentaire dans la fonction worksheet_change(...). Seulement il faudrait que cela soit automatiquement inséré, sans passer par une intervention à la main.
Concernant les commentaires, leur ajout dépend des valeurs des cellules du TCD.
Je sais pas si c'est très clair ce que je raconte :) en tout cas thanks for your help.

PS: pour être plus précis, ce n'est pas dans la fonction worksheet_change que j'aimerais y insérer l'appel, mais plutôt dans la fonction PivotTableUpdate(...).
 

Dan

XLDnaute Barbatruc
Re : Gestion des évènements à l'interieur d'un module

Re,

Pas de problèmes tes explications sont complètes.

A ta place je ne pas supprimerais pas la feuille TCD mais effacerais seulement le contenu et je referais le TCD en fonction des nouvelles données. Cela te permettrait de conserver la macro évenementielle et de créer les commentaires en fonction des valeurs dans le TCD.
Il ne s'agit donc pas de faire cela à la main mais bien automatiquement.

Ce qu'il faut connaitre ce sont tes critères et où ils se trouvent dans le TCD.

Comme je te l'ai dit avant essaie de placer un fichier, ce sera plus facile.

A te lire ;)
 

anto91

XLDnaute Nouveau
Re : Gestion des évènements à l'interieur d'un module

Re,

Effectivement je vais essayer de faire cela, c'est-à-dire effacer le contenu et refaire le TCD sur la même feuille. Mais le soucis se pose encore lorsque l'utilisateur supprime lui-même la feuille. Cela m'arrangerais vraiment de pouvoir concrètement insérer du code dans la fonction évenement à partir d'un module. Penses-tu que cela soit possible? Je pense que se soucis à déjà dû être rencontré par quelqu'un.
 

Dan

XLDnaute Barbatruc
Re : Gestion des évènements à l'interieur d'un module

Re,

Là soit tu supprimes la feuille à chaque fois ou tu travailles sur la même.

S'il y a une possibilité de supprimer une feuille par erreur, le mieux est d'installer un controle avant la création du TCD.

Si tu veux créer une nouvelle feuille à chaque fois, il te suffit de la nommer avant de faire le TCD puis tu construis le TCD dans cette nouvelle feuille.

Fais appel à cette macro avant la création de ton TCD. Elle vérifiera que ton fichier ne contient déjà pas une feuille pour le TCD (je l'ai nommée "tcd") et si non, elle en créera une pour l'y mettre.
Code:
Sub Controlsheet()
Dim sh As Worksheet
For Each sh In Worksheets
If sh.Name = "tcd" Then End
Next sh
Sheets.Add.Name = "tcd"
End Sub
Si pb n'hésite pas ;)
 

anto91

XLDnaute Nouveau
Re : Gestion des évènements à l'interieur d'un module

Salut Dan,

En fait je me suis un peu simplifié la vie, en mettant la feuille contenant le tcd en read-only. Du coup, le tcd se refera toujours sur la même feuille, et sans risque que l'utilisateur ne supprime la feuille. Ainsi j'ai pu ajouter mon code sur la fonction worksheet_pivotTableUpdate(...) permettant à chaque fois de mettre à jour les commentaires sur le tcd.
Merci pour ton aide précieuse :)
 

Discussions similaires

Statistiques des forums

Discussions
312 393
Messages
2 087 965
Membres
103 688
dernier inscrit
Amadou