Création d'un tableau croisé dynamique en VBA

Blafi

XLDnaute Occasionnel
Bonjour le forum,

J'ai une base de données avec entre autres des noms d'adhérents, leur ville d'habitation et leur année de naissance.

J'ai enregistré une macro afin d'en tirer un tableau croisé dynamique qui me donnerait le nom des villes d'habitation et le nombre de gens habitant dans chacune de ces villes.

J'ai modifié ma macro enregistrée pour que la zone des données soient adaptée à ma base dont la longueur varie régulièrement.
La macro marche bien pour créer le TCD en me sortant le nom des villes dans la première colonne, mais lorsque je voudrais qu'elle entre en 2ème colonne le "nombre de ville", elle me place cette colonne à la place de la 1ère colonne.. ce qui rend mon TCD inutile et illisible.

Je ne comprend pas bien ce phénomène...

Je joins mon fichier "édulcoré" puisqu'il comporte réellement plus de 1500 noms et 25 champs. Les noms et adresses des personnes y ont été modifiée naturellement...

Quelqu'un peut-il m'expliquer l'origine du pb et m'aider à le résoudre??

Merci et à ++
 

Pièces jointes

  • Ma base.xlsm
    85.8 KB · Affichages: 73
  • Ma base.xlsm
    85.8 KB · Affichages: 81
  • Ma base.xlsm
    85.8 KB · Affichages: 81

kingfadhel

XLDnaute Impliqué
Re : Création d'un tableau croisé dynamique en VBA

Bonjour,

Simplement j'ai inverser la position du code:



ActiveSheet.PivotTables("MonTableau").AddDataField ActiveSheet. _
PivotTables("MonTableau").PivotFields("Ville"), _
"Nombre de Ville", xlCount


With ActiveSheet.PivotTables("Montableau").PivotFields("Ville")
.Orientation = xlRowField
.Position = 1
End With




nouveau code obtenu:

Code:
Sub MonTableauX()
'
' MonTableauX Macro
'
Dim DernierNom, ZoneBase
'
    Range("C2").Select
    DernierNom = Range("C3").End(xlDown).Offset(0, 1).Row
    ZoneBase = "R1C1:R" & DernierNom & "C7"
    MsgBox ZoneBase
    Sheets.Add.Name = "TableauX"
    
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Statistiques!" & ZoneBase, Version:=xlPivotTableVersion12).CreatePivotTable _
        TableDestination:="Tableaux!R3C1", TableName:="MonTableau", _
        DefaultVersion:=xlPivotTableVersion12
    Sheets("Tableaux").Select
    Cells(3, 1).Select
    ActiveSheet.PivotTables("MonTableau").AddDataField ActiveSheet. _
        PivotTables("MonTableau").PivotFields("Ville"), _
        "Nombre de Ville", xlCount
    With ActiveSheet.PivotTables("Montableau").PivotFields("Ville")
        .Orientation = xlRowField
        .Position = 1
    End With
    Range("C3").Select
End Sub


j'ai changé : DefaultVersion:=xlPivotTableVersion14 par DefaultVersion:=xlPivotTableVersion12 pour la compatibilité
 

chris

XLDnaute Barbatruc
Re : Création d'un tableau croisé dynamique en VBA

Bonjour

Puisque tu as Excel 2010 pour quoi ne pas mettre ta base sous forme de tableau, au sens 2007-2013.
(Cf Ce lien n'existe plus ou là Les tableaux dans Excel 2007 ou là Ce lien n'existe plus)

Ainsi le TCD, basé sur le tableau gère automatiquement la dimension évolutive de la base.

Tu n'as pas expliqué pourquoi tu veux créer le TCD en VBA...
 

Blafi

XLDnaute Occasionnel
Re : Création d'un tableau croisé dynamique en VBA

Merci Chris et Kingfadhel pour vos réponses rapides...

Je vais essayer vos deux solutions et je vous tiens au courant...

Pour répondre à la question, je veux le faire en VBA car l'utilisatrice qui doit sortir ce TCD ne connait pas grand chose à Excel et en lui faisant une macro, elle à juste à cliquer sur le bouton que je vais lui mettre...

Je vais aussi examiner la solution du tableau avec excel 2010 que je n'utilise pas d'habitude..

Cordialement..
 

Misange

XLDnaute Barbatruc
Re : Création d'un tableau croisé dynamique en VBA

Bonjour,
J'ai toujours du mal quand je lis "l'utilisateur ne connait rien à excel donc je lui prépare un truc ou il n'y a qu'à appuyer sur le bouton". Je constate que quand on explique aux utilisateurs des procédures qui sont en l’occurrence très simples (ici il n'y a qu'à actualiser le TCD... = 1 clic sur un bouton existant dans la barre d'outils) il est en général très content d'avoir appris un truc et parfois (souvent !) ça lui donne envie de progresser.
A l'inverse quand l'utilisateur n'a aucune interaction possible avec un classeur, au premier truc qui ne marche pas exactement comme attendu, il ne cherche pas à comprendre et laisse tomber ou mets la "faute" sur le concepteur du classeur.
Bref, je préfère faire le pari de l'éducation et de l'intelligence des utilisateurs :)
 

Pièces jointes

  • Ma base.xlsm
    79.5 KB · Affichages: 71
  • Ma base.xlsm
    79.5 KB · Affichages: 81
  • Ma base.xlsm
    79.5 KB · Affichages: 79

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 534
dernier inscrit
Kalamymustapha