tableau croisé dyn. geler la structure?

gfmout

XLDnaute Junior
Bonsoir le forum

Comment faire pour qu'un tableau croisé dynamique ne puisse pas être modifié par un utilisateur tout en lui laissant la possibilité de l'utiliser dans son format définit?

L'otpion protection de la feuille est trop limitative et ne permet plus d'utiliser le tableau.

Merci d'avance

Gilles
 

Dan

XLDnaute Barbatruc
Bonsoir,

Quand tu dis :
L'option protection de la feuille est trop limitative et ne permet plus d'utiliser le tableau.

Que veux-tu dire ? Que veux tu utiliser dans le tableau.
Une possibilité est de désactiver le clique droite dans le TCD qui permet de faire en sorte que l'assistant ne soit plus utilisé pour la mise à jour ou la modification.

;)
 

gfmout

XLDnaute Junior
Bonjour Dan et merci de t'intéresser à mon cas

Si on utilise l'option protection de feuille et qu'on enlève la possibilité à l'utilisateur de travailler avec le TCD, alors tout est bloqué.
C'est à dire que l'utilisateur ne peut pas sélectionner un champ pour cocher ou décocher une case.

Dans mon cas, je voudrais qu'un utilisateur puisse utiliser le TCD mais sans avoir la possibilité de bouger les champs mis en place par l'administrateur.(c'est ce que j'appelle changer la structure) Tu comprends?
J'ai essayé de bloquer l'option 'drag cell' pour le fichier mais ça ne joue pas sur le TCD où l'on peut toujours drager un champs et donc le supprimer par inadvertance.
J'espère que tu m'as compris.

Dis moi tes pensées sur le sujet et si tu vois un solution

Merci d'avance

Gilles
 

Dan

XLDnaute Barbatruc
Re,

Oui j'ai bien compris ta demande et c'est d'ailleurs possible mais par macro uniquement.

On pourrait par exemple agir à l'ouverture du classeur. Cela suppose que les macros sont activées (via menu / outils / macros / sécurité).

Il te faudra toutefois trouver un truc pour que l'administrateur puisse avoir accès au TCD en cas de besoin. Comme tu vois il faut bien préparer cela.

Donne moi déjà les infos suivantes :

- Le TCD est-il sur une feuille seule ?
- Le nom du TCD. Tu peux le voir par clique droite dans le TCD, puis 'options'. Vois en haut à gauche
- Le nom de ta feuille.
- comment vois tu l'accès au TCD par l'administrateur

;)
 

gfmout

XLDnaute Junior
Bonjour Dan

et merci pour te pencher sur mon cas :)

pour répondre à tes questions:

- oui le TCD est sur une feuille seule
- Le TCD s'appelle PivotTable2
- La feuille s'appelle Stock_Total
- pour l'acces par l'administrateur: si on met une macro évenementielle sur la feuille en question, j'ai pas de problème à ce que l'administrateur (c moi!!) ait à désactiver la macro (par alt F11) avant de faire une modif 'de structure' sur la feuille. Il ne devrait pas y avoir de modif à faire à priori sur le TCD.

J'attends avec impatience ta solution :) :)

Gilles
 

Dan

XLDnaute Barbatruc
Bonjour,

En fonction de tes précisions place cette macro en VBA dans la feuille STOCK_TOTAL

Code:
Private Sub Worksheet_Activate()
'Macro pour [B]Lien supprimé[/B] 
-tableau-croise-dyn-geler-la-structure.htm
Dim PFD As PivotField
Dim TCD as PivotFields
Set TCD = ThisWorkbook.Sheets('Stock_Total').PivotTables('PivotTable2').PivotFields
For Each PFD In TCD
With PFD
.DragToData = False
.DragToHide = False
.DragToPage = False
.DragToRow = False
.DragToColumn = False
End With
Next PFD
End Sub

Veille à ce que les noms Stock_Total & Pivotable2 soit bien écrit comme le nom de ta feuille ou du TCD.

Cette macro s'activera sur la sélection de l'onglet Stock_total.

On pourrait aussi faire en sorte de mettre une macro qui réactive les champs lorsque tu quittes la feuille en question.

Si pb n'hésite pas

;)

PS : enlève le 'nbsp; p' dans la macro et qui est placé par le site ici...embetant cela.

Message édité par: Dan, à: 05/04/2006 13:24
 

gfmout

XLDnaute Junior
salut Dan,

C'est nickel.... ça marche super surtout quand on a lu ton Post Scriptum!!! :)

Mille mercis :) :) :)

Si je peux abuser de ta science, j'ai un autre p'tit problème que je ne comprends pas.
J'ai développé un fichier avec macros sur un portable qui marche sur l'ordi d'origine. En voulant mettre le fichier sur un autre ordinateur , j'ai des macros qui bloquent et qui à priori ont un rapport avec le temps.

par exemple la ligne de code suivante se bloque sur le mot Now

Temps = Now + TimeValue('00:00:02')

Une autre macro ne marche pas avec le code suivant:

strdate = Format(Date, 'dd-mm-yy-') & Format(Time, 'h-mm-ss')

Là c'est le mot Date qui bloque.

Sur ces 2 erreurs, j'obtiens le message suivant:
can't find project or library

D'où ça peut venir?

Les 2 ordinateurs ont la même version anglaise de excel XP.
Sur le portable il y a windows XP anglais
Sur l'autre ordi, c'est windows XP français
ça viendrait de là?

Si ce genre d'erreur te dit quelque chose??

Merci d'avance

gilles
 

Dan

XLDnaute Barbatruc
Bonsoir,

1. OK pour le TCD.
2. Les instructions Temps et strdate. Je suppose que tu as déclaré ta variable convenablement.

Sinon le message le fait penser à un manque d'option dans VBA.

Vérifie en VBA
- menu / outils / références
- Les options cochées --> microsoft object library office et excel

Si pb n'hésite pas

;)

Message édité par: Dan, à: 05/04/2006 21:31
 

gfmout

XLDnaute Junior
Salut Dan,

Il devait y avoir effectivement un pb avec les library!
les caches étaient bien cochées mais ça ne marchait pas.
j'ai réinstallé office xp en version complète et ça marche!!

Merci pour le coups de main en tout cas et j'espère à bientôt

Gilles
 

zenix75006

XLDnaute Nouveau
Re : tableau croisé dyn. geler la structure?

Merci pour ce code.

Ceci étant, je l'ai utilisé et un message d'erreur m'est renvoyé :
Erreur d'Execution '1004' :
Erreur définie par l'application ou par l'objet.

au niveau de la ligne
Code:
.DragToData = False

Auriez-vous une idée de la marche à suivre pour résoudre le problème?

Merci pour votre aide !

Nicolas
 

zenix75006

XLDnaute Nouveau
Re : tableau croisé dyn. geler la structure?

Désolé du dérangement :)

J'ai trouvé une solution au problème. Je ne comprends pas trop les tenants et les aboutissants de la solution (ce qui me dérange un peu) mais ça fonctionne : j'ai rajouté un on error resume next dans la boucle.

Code:
Sub ProtectionTCD()

Dim PFD As PivotField
Dim TCD As PivotFields
Set TCD = ThisWorkbook.Sheets("Synthèse Provisions").PivotTables("Tableau croisé dynamique2").PivotFields

For Each PFD In TCD

On Error Resume Next

With PFD
.DragToData = False
.DragToHide = False
.DragToPage = False
.DragToRow = False
.DragToColumn = False
End With
Next PFD


End Sub

Je suis tout de même curieux. si quelqu'un comprend .... ça serait sympa de m'en faire partager
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal