Macro filtre TCD
Bonjour
J'ai une feuille de données que j'exploite avec un TCD pour plus de clarté.
J'ai besoin de copier la feuille du TCD dans une nouvelle feuille, ce pour chaque choix de la liste déroulante du filtre du TCD.
La macro que j'ai faite interroge la liste par les noms inscrit dans la liste du filtre.
Mais toute modification de la liste m'obligera à compléter la macro.
Existe t'il un moyen d'interroger toute la liste d'un coup sans limite du nombre de choix, et sans utiliser les noms inscrit dans cette liste?
Sub test_exploit()
'
' Test_exploit
'
'
'selectionne_le_tableau_croisé
Sheets("tableau croisé").Select
'actualise_le_TCD
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
'Selectionne_un_nom_dans_le_filtre_TCD
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Circulation sur site"
'Copie_la_feuille
Cells.Copy
'crée_une_nouvelle_feuille
Sheets.Add After:=ActiveSheet
'colle_dans_la_nouvelle_feuille
ActiveSheet.Paste
'nomme_la_feuille_selon_la_cellule_B1
ActiveSheet.Name = Range("B1").Value
'et_ca_recommence_pour_tous_les_choix_du_filtre_
Sheets("tableau croisé").Select
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Analyses en laboratoire"
Cells.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = Range("B1").Value
Sheets("tableau croisé").Select
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Prélèvement CET"
Cells.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = Range("B1").Value
Sheets("tableau croisé").Select
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Prélèvements fontaines"
Cells.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = Range("B1").Value
Sheets("tableau croisé").Select
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Pollution des eaux"
Cells.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = Range("B1").Value
Sheets("tableau croisé").Select
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Prélèvements ZI"
Cells.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = Range("B1").Value
Sheets("tableau croisé").Select
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Prélèvements STEP"
Cells.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = Range("B1").Value
Sheets("tableau croisé").Select
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Traitement des blattes"
Cells.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = Range("B1").Value
Sheets("tableau croisé").Select
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Prélèvements eaux douces"
Cells.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = Range("B1").Value
Sheets("tableau croisé").Select
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Dératisation"
Cells.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = Range("B1").Value
Sheets("tableau croisé").Select
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Déplacement routier"
Cells.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = Range("B1").Value
Sheets("tableau croisé").Select
ActiveSheet.PivotTables("Tableau croisé").PivotCache.Refresh
ActiveSheet.PivotTables("Tableau croisé").PivotFields("Tâches").CurrentPage = _
"Tâches administratives"
Cells.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
ActiveSheet.Name = Range("B1").Value
End SubJe vous remercie par avance.
PS: m'initiant seul depuis 48h aux macros,vous n'êtes pas à l'abri de question complémentaires bêtes de ma part sur vos explications.
Bonjour,
Merci de joindre un fichier pour une réponse adaptée.
Cdlt.
Voici le fichier
La macro en question est test exploit
Re,
Une proposition à étudier.
Ci-dessous la procédure principale.
Cdlt.
Option Explicit
Option Private Module
Public Sub CreateWorksheets()
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim strPF As String, strPI As String
On Error GoTo err_Handler
Application.ScreenUpdating = False
Application.DisplayAlerts = False
strPF = "Tâches"
Set ws = ActiveWorkbook.Worksheets("tableau croisé")
Set pt = ws.PivotTables(1)
Set pf = pt.PivotFields(strPF)
For Each pi In pf.PivotItems
strPI = Left("e_" & pi.Name, 31)
On Error Resume Next
Worksheets(strPI).Delete
On Error GoTo 0
ws.Copy After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = strPI
With .PivotTables(1).PivotFields(strPF)
.PivotItems(pi.Name).Visible = True
.CurrentPage = pi.Name
End With
End With
Next pi
ws.Activate
exit_Handler:
Application.DisplayAlerts = True
Exit Sub
err_Handler:
MsgBox "Erreur : " & Err.Number & vbCrLf & Err.Description
Resume exit_Handler
End SubMerci Jean Eric
Ça marche impeccablement, même si j'y comprends rien.
Aurais tu un livre à me conseiller pour qu'un novice apprenne les rudiments de vba?
Les tutoriels internet me sont un peu rébarbatifs et peu compréhensibles. (pour le grand novice que je suis)
Bonjour,
Ce site te propose des cours Excel et des cours VBA.
Prends le temps de les consulter.
Cordialement.
Bonjour,
Je reviens sur cette macro, elle fonctionne parfaitement, j'ai testé en ajoutant une nouvelle tâche dans la feuille DU.
La macro me génère une nouvelle feuille.
Par contre quand je retire cette tâche, et que j'actualise tout le classeur, elle devrait disparaître.
Malheureusement une feuille se génère encore avec les informations du TCD filtre:analyses en laboratoire.
Et j'ai une seconde question concernant un terme de la macro: à quoi renvoie le 31?
Est ce le nombre de caractère autorisé pour la chaîne?
For Each pi In pf.PivotItems
strPI = Left("e_" & pi.Name, 31)
On Error Resume Next
Worksheets(strPI).DeleteBonjour,
Modifie la procédure comme ci-dessous (partie surlignée).
Cdlt.
Option Explicit
Option Private Module
Public Sub CreateWorksheets()
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim strPF As String, strPI As String
On Error GoTo err_Handler
Application.ScreenUpdating = False
Application.DisplayAlerts = False
strPF = "Tâches"
Set ws = ActiveWorkbook.Worksheets("tableau croisé")
Set pt = ws.PivotTables(1)
Set pf = pt.PivotFields(strPF)
With pt.PivotCache
.MissingItemsLimit = xlMissingItemsNone
.Refresh
End With
For Each pi In pf.PivotItems
strPI = Left("e_" & pi.Name, 31)
On Error Resume Next
Worksheets(strPI).Delete
On Error GoTo 0
ws.Copy After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = strPI
With .PivotTables(1).PivotFields(strPF)
.PivotItems(pi.Name).Visible = True
.CurrentPage = pi.Name
End With
End With
Next pi
ws.Activate
exit_Handler:
Application.DisplayAlerts = True
Exit Sub
err_Handler:
MsgBox "Erreur : " & Err.Number & vbCrLf & Err.Description
Resume exit_Handler
End SubBonjour Jean Eric.
Un grand merci à toi.