Bug sur Tableau croisy dynamique

Bug sur Tableau croisy dynamique - VB/VBA/VBS - Programmation

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

Reply

Marsh Posté le 05-06-2009 à 12:13:10   

Reply

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)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed