Bug sur Tableau croisy dynamique - VB/VBA/VBS - Programmation
Marsh Posté le 15-06-2009 à 14:33:31
Si je comprends bien ton code, tu as un tableau dynamique avec en ligne des "entreprises", en colonne des "années", et tu veux sélectionner la valeur pour 1 entreprise et 1 année bien précises...
Dans ce cas le mieux est de ne pas utiliser de tableau croisé dynamique.
Deux moyens de s'en sortir: une requête spécifique avec paramètre (du style SELECT sum(champ) FROM table WHERE ([Entreprise]=nom de l'entreprise) and ([Année]=année)...
Ou bien utiliser directement une fonction de la série DSUM ou DLOOKUP...
Ce sera beaucoup plus simple (et plus rapide en plus)
Marsh Posté le 05-06-2009 à 12:13:10
Bonjour,
J'ai un gros soucis sur le TCD.
Je veux afficher juste une entreprise sur une colonne, et juste une année sur une autre. Ensuite, je veux récupérer ces informations.
Malheureusement, un bug s'ensuit :"impossible de définir l'objet visible de la classe pivotitem"
Voici mon code :
_______________________________________________________________________________________________
Dim monPivIt As Object, ST, année
Application.ScreenUpdating = False
If UserForm6.ComboBox1.Value = "" Or UserForm6.ComboBox2.Value = "" Then
MsgBox "Veuillez remplir toutes les listes déroulantes !", vbExclamation
Else
ST = UserForm6.ComboBox1.Value
année = UserForm6.ComboBox2.Value
Feuil2.Range("D4" ).Value = UserForm6.ComboBox1.Value
Feuil2.Range("D9" ).Value = UserForm6.ComboBox2.Value
Feuil3.Select
'_______________________________________________________________________________
'_______________________________________________________________________________
'on ne prend que le ST qui nous intéresse
With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("entreprise" _
)
On Error Resume Next
For Each monPivIt In .PivotItems
monPivIt.Visible = True
Next
On Error Resume Next
For Each monPivIt In .PivotItems
If monPivIt.Name <> ST Then monPivIt.Visible = False
Next
End With
'_________________________________________________________________________________
'on ne prend que l' année qui nous intéresse
With ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
"année PC" )
On Error Resume Next
.PivotItems("2008" ).Visible = True
.PivotItems("2007" ).Visible = True
.PivotItems("2009" ).Visible = True
On Error Resume Next
For Each monPivIt In .PivotItems
If monPivIt.Name <> année Then monPivIt.Visible = False
Next
End With
'_________________________________________________________________________________
'_______________________________________________________________________________
'On range dans l'ordre décroissant !
ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Lot" ). _
AutoSort xlDescending, "Somme de traité"
'_________________________________________________________________________________
Unload UserForm6
Feuil2.Select
End If
---------------------------------
je vous remercie de m'aider