VBA - Prb Filtre TCD entre 2 dates par TextBox
Bonjour à tous,
Voilà, j’essaie de mettre en place un rapport d'activité avec des indicateurs (=graphiques) et je bloque sur une partie de mon code :cry:
Je voudrais effectuer un filtrage d'un TCD (Tableau Croisé Dynamique) d'une période par date rentré au préalable dans des [Textbox] se trouvant dans un [Userform].
Tout d'abord, je sais que les dates rentrés dans les [Textbox] sont interpétré par VBA en anglais et le filtrage de date d'un TCD en VBA est assez compliqué, donc pour faciliter tout ça, j'ai effectuer les copies des valeurs inscrites dans les [Textbox] sur une feuille ou je traduis celle-ci en français et je les met aux formats "standard" ainsi que la colonne du tableau concerné et un "refresh" du graphique :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ' extract date TextBox and convert in french and standard
Range("K1").Select
Range("K1").Value = CDteF
Range("L1").Select
ActiveCell.FormulaR1C1 = "=DATE(YEAR(RC[-1]),DAY(RC[-1]),MONTH(RC[-1]))"
Selection.NumberFormat = "General"
Range("K2").Select
Range("K2").Value = CDteT
Range("L2").Select
ActiveCell.FormulaR1C1 = "=DATE(YEAR(RC[-1]),DAY(RC[-1]),MONTH(RC[-1]))"
Selection.NumberFormat = "General"
Range("M1").Select
ActiveCell.FormulaR1C1 = _"=IF(RC[-1]="""","""",INT(MOD(INT((RC[-1]-2)/7)+0.6,52+5/28))+1)"
' convert date Activity in standard
Sheets("Activity").Select
Columns("C:C").Select
Selection.NumberFormat = "General"
ActiveSheet.PivotTables("Table Activity").PivotCache.Refresh |
C'est maintenant que tout se complique:oops:. Lorsque je demande à effectuer ce filtrage, une erreur s'affiche :?:
Citation:
Erreur d'exécution '1004' : Impossible de définir la propriété Visible de la classe PivotItem
Mon code est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| Private Sub Extract_B_D_Click()
'Statements
'-------------------------------------------------------------------------------------------------
Dim graph As Object 'selection old graphic
Dim NDteF 'selection date From
Dim NDteT 'selection date To
Dim FdteF As Object 'filter date
Dim FWeek As Object 'filter week
Dim CDteF 'convert date From
Dim CDteT 'convert date To
'Boots
'-------------------------------------------------------------------------------------------------
CDteF = From_T_D.Value 'TextBox1
CDteT = To_T_D.Value 'TextBox2
NDteF = Sheets("Indicator").Range("L1").Value
NDteT = Sheets("Indicator").Range("L2").Value
' extract date TextBox and convert in french and standard
Range("K1").Select
Range("K1").Value = CDteF
Range("L1").Select
ActiveCell.FormulaR1C1 = "=DATE(YEAR(RC[-1]),DAY(RC[-1]),MONTH(RC[-1]))"
Selection.NumberFormat = "General"
Range("K2").Select
Range("K2").Value = CDteT
Range("L2").Select
ActiveCell.FormulaR1C1 = "=DATE(YEAR(RC[-1]),DAY(RC[-1]),MONTH(RC[-1]))"
Selection.NumberFormat = "General"
Range("M1").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""","""",INT(MOD(INT((RC[-1]-2)/7)+0.6,52+5/28))+1)"
' convert date Activity in standard
Sheets("Activity").Select
Columns("C:C").Select
Selection.NumberFormat = "General"
ActiveSheet.PivotTables("Table Activity").PivotCache.Refresh
'Activity
'-------------------------------------------------------------------------------------------------
' initialization Table Activity
Sheets("Activity").Select
Application.ScreenUpdating = False
With ActiveSheet.PivotTables("Table Activity").PivotFields("Dte")
On Error Resume Next
For Each FdteF In .PivotItems
FdteF.Visible = True
Next
' filter Date
For Each FdteF In .PivotItems
On Error Resume Next
If FdteF.Name > NDteF Then FdteF.Visible = False
If FdteF.Name < NDteT Then FdteF.Visible = False
Next
End With
Application.ScreenUpdating = True
ActiveSheet.PivotTables("Table Activity").PivotCache.Refresh |
Et cela reste incompréhensible car j'utilise la même structure de code pour un filtrage par N° de semaine et cela fonctionne sans erreur :calim2: :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| Private Sub Extract_B_W_Click()
Dim NWeek 'selection week
Dim FWeek As Object 'filter week
NWeek = Week_T_W.Value
'Activity
'-------------------------------------------------------------------------------------------------
' initialization Table Activity
Sheets("Activity").Select
Application.ScreenUpdating = False
With ActiveSheet.PivotTables("Table Activity").PivotFields("Date Week")
For Each FWeek In .PivotItems
FWeek.Visible = True
Next
' filter Week Number
On Error Resume Next
For Each FWeek In .PivotItems
If FWeek.Name <> NWeek Then FWeek.Visible = False
Next
End With
Application.ScreenUpdating = True
ActiveSheet.PivotTables("Table Activity").PivotCache.Refresh |
Help me please !!!!!!!!!!!!!!!!!!!:cry:Je sèche !
Pour que vous comprenez mieux je vous joins mon fichier Pour afficher cette fameuse erreur, il suffit d'aller à la feuille INDICATOR et d'appuyer sur le bouton [EXTRACT], puis quand l'USERFORM apparaît, cliquez sur le bouton [From Date To Date].:ccool:
PS : Si quelqu'un à une meilleur idée pour la conversion des dates français-anglais-français-format standard, je suis preneur !!! :zoubi: