Simplification code VBA, sélection date et actualisation tableau croisé
Bonjour à tous,
Je souhaiterai avoir votre aide pour simplifier au mieux un code répétitif et qui sera très long. Je suppose que c'est possible.
Ayant des connaissances limitées j'ai simplement fait mon code en copiant plusieurs fois les parties pour chaque mois.
Le but du code est qu'il actualise les données de tableaux croisés dynamiques en fonction du contenu d'une cellule (cellule qui est sous forme de liste avec tous les mois). Par ailleurs, lorsque je sélectionne "août", excel utilise comme valeur "01/08/1900", je pense que c'est normal mais est-ce que c'est possible d'utiliser le terme "août" ?
Aussi j'utilise un bouton pour actualiser. Je ne sais pas s'il y a moyen d'associer ce code directement à la liste ?
Aussi si c'est possible que s'il n'existe pas de données pour le mois de décembre par exemple, ca affiche un message d'erreur ? ou pour tout autre mois..
Voici le code (pour 3 mois / 12) :
Sub Changement_de_mois()
If Range("C3").Value = "01/07/1900" Then
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Mois"). _
CurrentPage = "7"
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Mois"). _
CurrentPage = "7"
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois"). _
CurrentPage = "7"
Else
End If
If Range("C3").Value = "01/08/1900" Then
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Mois"). _
CurrentPage = "8"
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Mois"). _
CurrentPage = "8"
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois"). _
CurrentPage = "8"
Else
End If
If Range("C3").Value = "01/09/1900" Then
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Mois"). _
CurrentPage = "9"
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Mois"). _
CurrentPage = "9"
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois"). _
CurrentPage = "9"
Else
End If
End Sub
Merci par avance pour tout aide !
Cdlt,
Bonjour, si votre valeur en C3 est reconnue comme une date ; alors
il suffit d'utiliser "Month" pour récupérer votre numéro de mois dans votre variable :
Sub Changement_de_mois()
Dim monmois as long
monmois=Month(Range("C3"))
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Mois"). _
CurrentPage = monmois
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Mois"). _
CurrentPage = monmois
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois"). _
ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois"). _
CurrentPage = monmois
End sub
C'est effectivement plus simple comme ça !
Merci de votre réponse !