IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tcd - Supprimer les anciennes données.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Assistante de Direction
    Inscrit en
    Avril 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Assistante de Direction

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Par défaut Tcd - Supprimer les anciennes données.
    Bonjour,

    Je cherche à supprimer les anciennes données de plusieurs TCD. J'ai essayé plusieurs méthodes mais rien n'y fait.
    Mais en ayant effacer toutes les données sources, les TCD continuent à utiliser les anciennes données.

    La dernière solution essayée est celle ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub DeleteOldItemsWB()
    'gets rid of unused items in PivotTable
    ' based on MSKB (202232)
    Dim ws As Worksheet
    Dim pt As PivotTable
    Dim pf As PivotField
    Dim pi As PivotItem
    Dim i As Integer
    On Error Resume Next
         For Each ws In ActiveWorkbook.Worksheets
             For Each pt In ws.PivotTables
                 pt.RefreshTable
                     For Each pf In pt.PivotFields
                         For Each pi In pf.PivotItems
                             If pi.RecordCount = 0 And Not pi.IsCalculated Then
                                     pi.Delete
                             End If
                         Next
                     Next
             Next
         Next
    End Sub
    On trouve beaucoup d'information sur le net mais là, je sèche.
    Je suis relativement débutante en vba et j'ai vraiment besoin de l'aide de pro.

    Merci d'avance.

    BcB

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bacarab Voir le message
    Je cherche à supprimer les anciennes données de plusieurs TCD. J'ai essayé plusieurs méthodes mais rien n'y fait.
    Mais en ayant effacer toutes les données sources, les TCD continuent à utiliser les anciennes données.
    Bonjour,

    Cela m'est arrivé également. J'en suis arrivé à supprimer et à reconstruire les TCD sur les fichiers où il y avait de nombreux enregistrements nouveaux à chaque situation pour rester dans des tailles raisonnables.

    Il y a sans doute une réponse plus appropriée que la mienne et quelqu'un vous répondra peut-être.

    Si vos connaissances en VBA vous font défaut, il vous faudra simuler la reconstruction de votre TCD avec l'enregistreur de macro jusqu'à avoir la présentation identique à ce que vous avez aujourd'hui (Nb : on n'y arrive pas du premier coup...). Le travail consistera ensuite à automatiser le code.

    Cordialement.

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    Options du TCD : onglet données, Nombre d'éléments à retenir par champ : sélectionner aucun. Valider puis actualiser : le cube est remis à neuf et les scories ont donc disparu.

    Si on laisse l'option active, le cube sera refait à chaque actualisation donc pas besoin de VBA.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par 78chris
    Merci Chris.

    Cordialement.

  5. #5
    Candidat au Club
    Femme Profil pro
    Assistante de Direction
    Inscrit en
    Avril 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Assistante de Direction

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Par défaut
    Bonjour Merci pour vos deux réponses, mais j'ai déjà essayé tout cela.
    Via options de TCD, data, none (désolée je suis en office US), j'ai essayé à plusieurs reprises et de plusieurs façons mais ça ne fonctionne pas mes anciennes données sont toujours là.
    Je ne peux pas utiliser l'enregistreur de macro car je ne trouve pas la solution "a mano" non plus.

    Pour plus d'information, j'ai créé un fichier dans lequel j'injecte des données. Avec ces données, j'ai plusieurs boutons sur le ruban pour créer de nouvelles feuilles dans le classeur (à discrétion de l'utilisateur en save as, puisque le fichier est protégé en écriture) dont les feuilles avec copie de TCD. Pour créer ce fichier j'ai travaillé avec des données vivantes et ce sont celles que je n'arrive pas à mettre à jour. Mon fichier protégé est pourtant sauvegardé sans aucune donnée. On ouvre et on injecte les nouvelles.
    J'espère être suffisamment explicite.

    Merci de votre aide.

    BcB

  6. #6
    Candidat au Club
    Femme Profil pro
    Assistante de Direction
    Inscrit en
    Avril 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Assistante de Direction

    Informations forums :
    Inscription : Avril 2016
    Messages : 3
    Par défaut
    Erik,

    J'avais pas bien lu ta réponse je pense. Est-ce que tu suggères que dans mon code pour créer la TCD, j'ajoute des lignes pour la supprimer et puis pour la recréer?
    Pour être sure que cette fois-ci j'ai bien compris.
    Merci

    BcB

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bacarab Voir le message
    Est-ce que tu suggères que dans mon code pour créer la TCD, j'ajoute des lignes pour la supprimer et puis pour la recréer?
    Si Chris te donne sa solution, c'est qu'elle a de très grandes chances d'être réalisable.

    En dernière limite, si tu ne te sors pas de ton problème, voici la solution que j'utilise dans cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    Option Explicit
     
    Sub CreationTcd(ByVal FeuilleSourceTcd As Worksheet, ByVal LigneTitreSource As Long, ByVal NomFeuilleTcd As String)
     
    Dim AireTcd As Range
    Dim DerniereLigne As Long
    Dim DerniereColonne As Long
    Dim ShTcd As Worksheet
     
    Dim Pvt As PivotTable
     
        With FeuilleSourceTcd
     
            .Cells.EntireRow.Hidden = False
            .Cells.EntireColumn.Hidden = False
     
             DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row  ' A adapter suivant la colonne de référence du tableau
             DerniereColonne = .Cells(LigneTitreSource, .Columns.Count).End(xlToLeft).Column
             Set AireTcd = .Range(.Cells(LigneTitreSource, 1), .Cells(DerniereLigne, DerniereColonne))
     
        End With
     
        ' Suppression éventuelle feuille Tcd déjà existante
        For Each ShTcd In Sheets
            If ShTcd.Name = NomFeuilleTcd Then
               Application.DisplayAlerts = False
               ShTcd.Delete
               Application.DisplayAlerts = True
               Exit For
             End If
        Next ShTcd
     
         ' Création de l'onglet supportant le TCD
         Set ShTcd = Worksheets.Add(after:=Sheets(Sheets.Count))
         With ShTcd
            .Name = NomFeuilleTcd
         End With
     
         ' Création du Tcd
         ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=AireTcd, Version:=xlPivotTableVersion12). _
            CreatePivotTable TableDestination:="'" & NomFeuilleTcd & "'!R3C1", TableName:="TCD1", DefaultVersion:=xlPivotTableVersion12
     
         Set Pvt = ShTcd.PivotTables("TCD1")
     
         With Pvt
     
                With .PivotFields("Sexe")
                    .Orientation = xlColumnField
                    .Position = 1
                End With
                With .PivotFields("Date")
                    .Orientation = xlRowField
                    .Position = 1
                End With
     
                .AddDataField Pvt.PivotFields("Id"), "Nombre de Id", xlCount
     
                ' Groupement des années et des mois
                .RowRange.Cells(3, 1).Group Start:=True, End:=True, Periods:=Array(False, False, False, False, True, False, True)
     
                ' Attribution d'un style
                .TableStyle2 = "PivotStyleDark7"
     
                ' La zone ColumnRange est la zone au dessus des données
                With .ColumnRange
                    .HorizontalAlignment = xlCenter
                    .ColumnWidth = 16
                End With
     
     
                ' La zone DataBodyRange est la zone des données
                With .DataBodyRange
                    .HorizontalAlignment = xlCenter
                End With
     
     
        End With
     
        ActiveWindow.DisplayGridlines = False
     
        Set AireTcd = Nothing
        Set ShTcd = Nothing
     
    End Sub

    Dans le module de l'onglet Données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Option Explicit
     
    Private Sub BoutonCreerLeTcd_Click()
            CreationTcd Sheets("Données"), 10, "Tcd"
    End Sub
    Le résultat :

    Pièce jointe 206853Pièce jointe 206854


    Ce que je voulais expliquer dans mon premier mail, c'est qu'une fois que tu as réussi à ébaucher ton Tcd, tu travailles avec l'enregistreur de macros pour le modifier petit à petit.


    Cordialement.

  8. #8
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour
    Citation Envoyé par Bacarab Voir le message
    ...
    Via options de TCD, data, none (désolée je suis en office US), j'ai essayé à plusieurs reprises et de plusieurs façons mais ça ne fonctionne pas mes anciennes données sont toujours là...
    As-tu bien actualisé ? le cube étant totalement reconstruit il ne peut y avoir de données absentes de la source actuelle. Voir aussi les options de champs : si afficher les éléments sans données n'est pas coché...

    As-tu vérifié la source du TCD : ne pointe-t-il pas sur le classeur initial ?

Discussions similaires

  1. supprimer des donnees dans une base de données via des checkbox dans un tableau
    Par nourchéne dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 03/04/2013, 18h01
  2. [XL-2003] TCD avec anciennes données résiduelles
    Par lbar012001 dans le forum Excel
    Réponses: 3
    Dernier message: 05/10/2011, 08h34
  3. TCD avec des donnees dans un autre classeur
    Par nana85 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/04/2008, 11h24
  4. Supprimer des donnees "definitivement"
    Par donbuz dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/02/2008, 11h42
  5. [LG] Supprimer une donnée...
    Par phoebee dans le forum Langage
    Réponses: 6
    Dernier message: 23/08/2005, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo