Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Code VBA pour TCD

  • Initiateur de la discussion Crasam
  • Date de début
C

Crasam

Guest
Bonjour à tout le forum

J'ai trouvé sur le net une manière de créer un TCD à partir de données sur plage que je définis ainsi (pour deux colones)
=Feuil1!$A$1ECALER(Feuil1!$B$1;0;0;NBVAL(Feuil1!$B:$B))

Je crée mon TCD en faisant référence à ma sélection. Je donne un nom à mon TCD et je mets dans le module de la page, le code ci-dessous,i pour avoir une mise a jour du TCD si de nouvelles données sont rentrées.
Ca ne marche pas.


Private Sub
Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
ActiveSheet.PivotTables("monTCD").RefreshTable
End Sub

Ce code est-il correct. Mes 2 premières lignes sont en rouge.

Merci d'avance de votre aide et bonne soirée à tous
JM
 
M

myDearFriend

Guest
Bonsoir JM,

Pour le TCD je ne sais pas, mais pour les erreurs de syntaxe :

Les 2 premières lignes n'en font qu'une en réallité :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

d'autre part, après :
If Target.Column = 2 Then
ActiveSheet.PivotTables("monTCD").RefreshTable

on devrait trouver un :
End If

Ta procédure devrait donc ressembler à ça :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
ActiveSheet.PivotTables("monTCD").RefreshTable
End If
End Sub



Cordialement,
Didier_mDF
 
C

Crasam

Guest
Re le Forum
Bonsoir Didier

Effectivemetn, mme si je suis débutant, j'aurais dû voir ces erreurs de base dans l'écriture du code.
Tu as raison, c'est bienc omme çà. Et en plus cela marche, mon TCD se met à jour au fur et à mesure que j'alimente ma plage de données.

Merci encore pour cette aide.
JM
 
C

Crasam

Guest
Bonsoir tout le monde

Voilà cette procédure fonctionne bien.
En fait ma feuille de calcul initiale contient 9 colonnes. Pour établir mon TCD n°1, j'utilise les 6 premières colonnes.
Donc dans le code évoqué ci dessus (voir posts ci dessus) j'écris:

If Target.Column = 6 Then

Et cela marche à merveille. Il me suffit une fois ma feuille de calcul modifiée, de revenir sur le TCD, de valider, et tout marche au poil.

Mon problème, avec la même feuille de calcul (toujours 9 colonnes), je réalise un deuxième TCD en utilisant 5 colonnes de la feuilles initiale, mais 5 colonnes non collées.
je mets donc dans mon code: If Target.Column=5 Then.......
et la ça marche plus. Il faut que je modifie 2 fois ma feulle de calcul, pour que mon TCD prenne en compte ma première modif.

Y a t il qq chose à rajouter dans ce code, ou mettre une autre valeur du nbre de colonnes dans l'xpression... J'ai fait pas mal d'essais , mais ça merdouille.
(Ne l'oublions pas, mon 1er TCD lui fonctionne à merveille.
En souhaitant m'être bien exprimé.
Merci de vos conseils ou remarques
JM
 
C

Crasam

Guest
Bonsoir à tous

Me suis je mal exprimé, ai-je été incorrect pour ne recevoir aucune réponse.
Je vous fais un clein d'oeil, mais quelque part un peu déçu...
Jm
 
M

myDearFriend

Guest
Bonsoir Crasam

Désolé Crasam, pour ma part je te l'ai dit dans ma précédente réponse, les TCD c'est vraiment pas mon truc…
Encore un peu de patience et je suis sûr que quelqu'un aura peut-être une solution à ton problème.

Cordialement.
 
M

myDearFriend

Guest
re- Crasam,

En abordant ton pb uniquement du point de vu VBA (les TCD, dur-dur pour moi LOL !). Il m'est venu la réflexion suivante :

En écrivant :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column=5 Then
...

Tu provoques le "RefreshTable" uniquement si la modification a lieu dans la Colonne n° 5 de ta feuille.
Mais comme tu précises également : "je réalise un deuxième TCD en utilisant 5 colonnes de la feuilles initiale, mais 5 colonnes non collées", je finis par me demander si la colonne n° 5 fait effectivement partie de tes "5 colonnes non collées".
Si ce n'est pas le cas, alors ton problème vient certainement de là.

Si par exemple on considère les colonnes 2,4,6,8 et 10, ton code pourrait ressembler à ça :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Column
Case 2, 4, 6, 8, 10
ActiveSheet.PivotTables("monTCD").RefreshTable
End Select
End Sub


J'espère que cela pourra t'aider (dans l'attente qu'une bonne âme "TCDiste" passe par là !)

Cordialement,
Didier_mDF
 
C

Celeda

Guest
Bonjour,

j'y connais rien du tout en vba pour TCD (je suis désolée) et je ne pourrais d'être aucune aide, et je n'assimile pas non plus le

"5 colonnes non collées"

aussi il me vient vite fait deux choses en tête :

peux-tu mettre un fichier de moins de 50 ko zippé pour visualiser mieux,

pourquoi rester sur le TCD en vba et ne pas essayer de faire tout en vba en passant par des tableaux carrément, car j'ai déjà vu quelques spécialistes du vba, écrire des procédures qui creent des tableaux identiques (ave les inconvénients en moins des TCD) ?

Celeda

ps : Mydearfriend : je suis tombée depuis longtemps en amour avec les TCD parce c'était pas difficile à les réaliser pour moi et il ne faut pas croire que c'est difficile, c'est un peu c.............au début de comprendre le mécanisme mais si tu les manipules dans tous les sens tu finis par y arriver,
par contre, en voyant faire Zon, sur un post, en reproduisant un "TCD" - tableau, je me suis apercue que si j'avais maitrisé un peu plus vba, j'aurais remplacé le TCD classique par des lignes de codes car ces tableaux en vba sont fantastiques, ce sont de vrais tcd, ont la couleur du tcd.
 
C

Crasam

Guest
Bonsoir tout le monde


Merci pour vos réponses, j'apprécie.
Je rentre du boulot, et je vais tester les propostions. Je vous tiendrais au courant du résulstat.
Merci encore de votre aide

JM
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…