Problème avec une macro pour un TCD

Fermé
Lucie17_0626 Messages postés 61 Date d'inscription lundi 21 janvier 2019 Statut Membre Dernière intervention 3 juillet 2020 - 15 févr. 2019 à 19:44
Lucie17_0626 Messages postés 61 Date d'inscription lundi 21 janvier 2019 Statut Membre Dernière intervention 3 juillet 2020 - 16 févr. 2019 à 00:38
Bonjour,

J'ai récupéré et modifié une macro pour créer et modifier un tableau croisé dynamique mais la macro n'apparaît pas dans mon choix de macro je ne peux pas là lancer du tout peut-être que le problème viens de mon code je ne sais pas. J'ai bien activer les macros de mon fichier.

Je vous met mon code en espérant que quelqu'un puisse m'aider merci d'avance

Option Explicit

Sub CreerTCD(ByVal sRngAddress As String, ByVal sRngStart As String, Optional ByVal tcdNom As String = "Tableau croisé dynamique 1")
' Créer un tcd dans une feuille existante à partir d'une plage de cellules

Dim tcd As PivotTable, tcdCache As PivotCache

' Plage de la source de données
Debug.Print "source de donnéees:", sRngAddress

' Cellule où insérer le tcd
Debug.Print "cellule de départ:", sRngStart

' Créer le cache du tcd
Set tcdCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=sRngAddress)

' Créer le tcd à partir du cache
Set tcd = tcdCache.CreatePivotTable( _
TableDestination:=sRngStart, _
TableName:=tcdNom)

' Ordonne le tcd en format tabulaire
tcd.RowAxisLayout xlTabularRow

End Sub

Sub AjouterChampTCD(ByVal sChamp As String, ByVal sZoneTcd As String, Optional ByVal pos As Variant = 1, Optional ByVal sNombreFormat As String = vbNullString, Optional ByVal tcdNom As String = vbNullString)
' Ajoute un champ au tcd dans la zone spécifiée: filtre, ligne, colonne ou valeur

Dim tcd As PivotTable, sTxtChamp As String

On Error GoTo Erreur

If tcdNom <> vbNullString Then
Set tcd = ActiveSheet.PivotTables(tcdNom)
Debug.Print "nom du tcd entré : " & tcdNom
Else
Set tcd = ActiveSheet.PivotTables(1)
Debug.Print "nom du tcd 1 de la feuille : " & tcd.Name
End If

Debug.Print "champ à ajouter :", sChamp
If tcd.PivotFields(sChamp).Orientation = xlHidden Then

Select Case sZoneTcd

' Ajoute un champ en Filtre, Ligne, Colonne

Case "Filtre"
tcd.PivotFields(sChamp).Orientation = xlPageField

Case "Colonne"
tcd.PivotFields(sChamp).Orientation = xlColumnField

Case "Ligne"
tcd.PivotFields(sChamp).Orientation = xlRowField

' Ajoute un champ en Valeur

Case "Somme"
sTxtChamp = "Somme de " & sChamp
tcd.AddDataField tcd.PivotFields(sChamp), sTxtChamp, xlSum

Case "Nombre"
sTxtChamp = "Nombre de " & sChamp
tcd.AddDataField tcd.PivotFields(sChamp), sTxtChamp, xlCount

Case "Moyenne"
sTxtChamp = "Moyenne de " & sChamp
tcd.AddDataField tcd.PivotFields(sChamp), sTxtChamp, xlAverage

Case "Max"
sTxtChamp = "Max de " & sChamp
tcd.AddDataField tcd.PivotFields(sChamp), sTxtChamp, xlMax

Case "Min"
sTxtChamp = "Min de " & sChamp
tcd.AddDataField tcd.PivotFields(sChamp), sTxtChamp, xlMin

Case "Produit"
sTxtChamp = "Produit de " & sChamp
tcd.AddDataField tcd.PivotFields(sChamp), sTxtChamp, xlProduct

Case Else
' par défaut

End Select

' Position dans la liste
'tcd.PivotFields(sChamp).Position = pos

' Format du champ de pivot
'If sNombreFormat <> vbNullString Then tcd.PivotFields(sChamp).NumberFormat = sNombreFormat

End If

Exit Sub
Erreur:
MsgBox "Le champ ne peut être ajouté.", vbExclamation, "Ajout du champ annulé"

End Sub

Sub SupprimerChampTCD(ByVal sChamp As String, Optional ByVal tcdNom As String = vbNullString)
' Supprime un champ du tcd

Dim tcd As PivotTable

If tcdNom <> vbNullString Then
Set tcd = ActiveSheet.PivotTables(tcdNom)
Else
Set tcd = ActiveSheet.PivotTables(1)
End If

Debug.Print "champ à supprimer :", sChamp
If tcd.PivotFields(sChamp).Orientation <> xlHidden Then
tcd.PivotFields(sChamp).Orientation = xlHidden
End If

End Sub

Sub ActualiserTCD(Optional ByVal tcdNom As String = vbNullString)
' Actualise un tcd

Dim tcd As PivotTable

If tcdNom <> vbNullString Then
Set tcd = ActiveSheet.PivotTables(tcdNom)
Else
Set tcd = ActiveSheet.PivotTables(1)
End If

' Actualise un seul tcd
tcd.PivotCache.Refresh

' Actualise tous les tcd
'ActiveWorkbook.RefreshAll

End Sub

Sub SupprimerUnTCD(Optional ByVal tcdNom As String = vbNullString)

On Error GoTo Erreur

If tcdNom <> vbNullString Then
ActiveSheet.PivotTables(tcdNom).TableRange2.Clear
Else
ActiveSheet.PivotTables(1).TableRange2.Clear
End If

Exit Sub

Erreur:
MsgBox "Le tableau croisé dynamique ''" & tcdNom & "'' n'a pas été trouvé.", vbExclamation, "Suppression annulée"

End Sub

Sub ChangerSourceTCD(ByVal sRngAddress As String, Optional ByVal tcdNom As String = vbNullString)
' Change la source de données d'un tcd à partir d'une plage de cellules

Dim tcd As PivotTable, SrcData As String

On Error GoTo Erreur

If tcdNom <> vbNullString Then
Set tcd = ActiveSheet.PivotTables(tcdNom)
Else
Set tcd = ActiveSheet.PivotTables(1)
End If

' Détermine la nouvelle source de données du tcd
SrcData = Application.Evaluate(sRngAddress).Address(ReferenceStyle:=xlR1C1, External:=True)
Debug.Print "nouvelle source:", sRngAddress

' Change la source de données
tcd.ChangePivotCache ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=SrcData)

Exit Sub
Erreur:
MsgBox "Impossible de changer la source du TCD.", vbExclamation

End Sub

A voir également:

2 réponses

Yoyo01000 Messages postés 1639 Date d'inscription samedi 2 février 2019 Statut Membre Dernière intervention 7 mars 2022 166
15 févr. 2019 à 19:53
Bonsoir, ta macro est sans doute enregistrée ailleurs ! Tu l'as modifiée dans ton ancien classeur ?
1
Lucie17_0626 Messages postés 61 Date d'inscription lundi 21 janvier 2019 Statut Membre Dernière intervention 3 juillet 2020 3
15 févr. 2019 à 20:04
Elle est effectivement dans un a autre fichier mais dans celui que j'ai recréée j'ai modifier quelque information. Tu penses qu'en changeant le nom des macros ça pourrait s'arranger ?
0
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 7 243
15 févr. 2019 à 21:28
Bonjour,

pourquoi tu le crées à chaque fois par macro ?
En général on le crée une fois, et on se contente de copier-coller les nouvelles données et de le rafraîchir.
En définissant éventuellement la nouvelle source si on n'a pas pu mettre les données en Tableau structuré.
eric

1
Lucie17_0626 Messages postés 61 Date d'inscription lundi 21 janvier 2019 Statut Membre Dernière intervention 3 juillet 2020 3
15 févr. 2019 à 21:53
Je crée un TCD par mois avec les informations qui change mais la structure ne change pas la macro n'a pas de soucis de se côté là mais il me semble qu'elle est lié a un autre fichier et je voudrais qu'elle soit indépendante. J'ai tester la macro et un autre fichier s'ouvre automatiquement. Je ne sais pas trop comment j'ai fait pour les liés. Je suis débutante en macro.
0
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 7 243
15 févr. 2019 à 23:15
Colle tes données dans une feuille, sélectionne-les, 'Insertion / Tableau' et fais ton TCD.
Ensuite tu n'as plus qu'à coller tes nouvelles données à la suite ou à la place des anciennes (par macro si tu préfères) et rafraichir le TCD
eric
0
Lucie17_0626 Messages postés 61 Date d'inscription lundi 21 janvier 2019 Statut Membre Dernière intervention 3 juillet 2020 3
16 févr. 2019 à 00:38
C'est ce que j'ai fait plusieurs fois même mais lorsque je lance la macro pour justement créer automatiquement le TCD elle reste lié au fichier initiale.
Je me suis dis que peut-être dans le code j'avais mis une ligne qui lié les deux fichiers mais je n'ai rien vu.

Mais merci beaucoup pour ton aide.
0