VBA sur TCD

anthooooony
Messages postés
28
Date d'inscription
mercredi 1 février 2012
Statut
Membre
Dernière intervention
17 avril 2013
- 7 févr. 2012 à 23:22
 Utilisateur anonyme - 8 févr. 2012 à 12:33
Bonjour,

Je cherche une piste pour la fin d'un projet, je demande à une âme charitable de me diriger vers la lumière :D

J'ai un fichier Excel ou est présent deux onglets:
- BDD
- TCD


Sur l'onglet tableau croisé dynamique il y a un bouton"créer les pages" celle ci extrait autant de tcd que de champs en filtre de rapport.

j'ai un deuxième bouton "créer la page en cours" celle ci extrait l’extract brute de la bdd de la personne qui est sélectionné en filtre de rapport.

Mon problème est de savoir comment en gardant "TOUT"(NOM) en filtre de rapport avoir pour chaque nom la base de donnée lui correspondant
On m'a dit de mettre
Range("A1").PivotTable.ShowPages "Nom"
mais ça ne marche pas.

J'ai mi le document sur mon hotmail. Autrement, je mets en bas les codes présents sur mes docs.

https://skydrive.live.com/redir.aspx?cid=f35de83e1a50c124&resid=F35DE83E1A50C124!251&parid=F35DE83E1A50C124!139&authkey=!AEC7EHW0NW5SlyE

Merci d'avance pour l'aide apporter depuis le début !

Anthooooony

Option Explicit

Private Sub CommandButton1_Click()
 Range("A1").PivotTable.ShowPages
End Sub

Private Sub CommandButton2_Click()
    Dim nomFeuille As String
    With Range("A1").PivotTable
        nomFeuille = .PivotFields("NOM").CurrentPage.Name
        On Error Resume Next
        Sheets(nomFeuille).Name = nomFeuille
        If Err = 0 Then
            If MsgBox("La feuille '" & nomFeuille & "' existe déjà!" & vbCrLf & "En cliquant sur oui elle sera détruite puis recréée avec les nouvelles données" & vbCrLf & vbCrLf & "Continuer?", vbQuestion + vbYesNo, "Création feuille " & nomFeuille) = vbYes Then
            Application.DisplayAlerts = False
            Sheets(nomFeuille).Delete
            Application.DisplayAlerts = True
            End If
        End If
        On Error GoTo 0
        .TableRange1.Cells(.TableRange1.Cells.Count).ShowDetail = True
        ActiveSheet.Name = nomFeuille
    End With
End Sub


Dans le module

Option Explicit

Sub Macro2()
'
' Macro2 Macro
'

'
    Range("H8").Select
    Selection.ShowDetail = True
End Sub

6 réponses

Utilisateur anonyme
8 févr. 2012 à 04:16
Bonjour,

Par rapport à ton titre:
Rafraîchi moi la mémoire, TCD c'est "Tout le Code Décrypté"?



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
anthooooony
Messages postés
28
Date d'inscription
mercredi 1 février 2012
Statut
Membre
Dernière intervention
17 avril 2013

8 févr. 2012 à 10:06
Et bien non tableau croisé Dynamique.
J'ai omis de faire quelque chose?, J'aurais du renseigner plus d'éléments plus expliquer les lignes de code?
Merci de me dire si j'ai mal fait mon post?


Cdt,
anthooooony
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
8 févr. 2012 à 10:35
Bonjour,
pas certain d'avoir compris ton affaire de "TOUT"
Mais je pense deviner qu'il te suffit de faire une boucle
With Range("A1").PivotTable
  For i = 1 To .PivotFields.Count ' <<<<<<=========================================
    nomFeuille = .PivotFields(i).CurrentPage.Name
    On Error Resume Next
 
    Sheets(nomFeuille).Name = nomFeuille
      If Err = 0 Then
        If MsgBox("La feuille '" & nomFeuille & "' existe déjà!" & vbCrLf & "En cliquant sur oui elle sera détruite puis recréée avec les nouvelles données" & vbCrLf & vbCrLf & "Continuer?", vbQuestion + vbYesNo, "Création feuille " & nomFeuille) = vbYes Then
        Application.DisplayAlerts = False
        Sheets(nomFeuille).Delete
        Application.DisplayAlerts = True
      End If
    End If
    On Error GoTo 0
    .TableRange1.Cells(.TableRange1.Cells.Count).ShowDetail = True
     ActiveSheet.Nam = nomFeuille
  Next ' <<<<<===============================================
End With


ou encore une boucle du genre
For each machin .PivotFields
      nomFeuille = machin.CurrentPage.Name
       ..............
    Next


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
8 févr. 2012 à 10:36
For each machin in
.PivotFields
bien sur


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
anthooooony
Messages postés
28
Date d'inscription
mercredi 1 février 2012
Statut
Membre
Dernière intervention
17 avril 2013

8 févr. 2012 à 11:08
Bonjour,

"pas certain d'avoir compris ton affaire de "TOUT" "

En faite je dois créer des rapports pour des agences en tableau croisé dynamique.

Seulement pour des raisons de confidentialité je dois trouver une solution de contourner les infos et des les limiter à l'agence. Comme je n'ai pas réussi à soit supprimer en masse toutes les connexions vers la bdd ca garderait la mise en page et d'interactivité du tcd juste sur l'agence(et limiterait la taille du fichier), ou de bloquer le champs agence parce qu'il bloque et le filtre et la possibilité d'avoir tt les elements du tcd sur l'agence!

Mon idée était de ressortir la bdd de chaque agence et dy associer les tcd
c'est des fois difficile d'associer un besoin et sa compréhension.

Il y a une erreur "variable non définie", ca s'arrete au for "i". je vais voir pourquoi.

Merci ucfoutu
0
Utilisateur anonyme
8 févr. 2012 à 12:33
Salut,
Il y a une erreur "variable non définie", ca s'arrete au for "i"

ça aurait du te mettre la puce à l'oreille, la variable (i donc) qui n'est pas définie (déclarée).


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0