Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2872 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA]Tableau croisé dynamique sur plage variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA]Tableau croisé dynamique sur plage variable

n°1273372
Nico-Rep
Posté le 26-12-2005 à 17:51:48  profilanswer
 

Bonjour à tous :hello:  
 
Je cherche à créer une macro éxécutant un tableau croisé dynamique à partir d'une plage contenue dans une autre feuille. Si la macro fonctionne parfaitement en sélection de plage fixe (je n'ai mis que la partie correspondant à la création du TCD même; il n'y a donc pas celle concernant l'insertion des champs dans le TCD):
 

Citation :


        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "'Historique relations clients'!R3C1:R44C5").CreatePivotTable TableDestination _
        :="'[Projet VBA - 15-12.xls]TCD - Analyse clientèle'!R3C3", TableName:= _
        "Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10


 
Je n'arrive pas à faire de même pour une plage qui peut par la suite évoluer (en l'occurence voir son nombre de ligne augmenter...). J'ai tenté ceci:
 

Citation :


        Range("A3" ).CurrentRegion.Select
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        Selection).CreatePivotTable TableDestination _
        :="'[Projet VBA - 15-12.xls]TCD - Analyse clientèle'!R3C3", TableName:= _
        "Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10


 
Mais lors de l'éxécution de la macro, un message d'erreur s'affiche: "Erreur d'éxécution '1004'. Impossible de lire la propriété PivotTables de la classe WorkSheet." Comment donc faire une macro qui construirait un TCD à partir d'une plage dont les lignes peuvent augmenter avec le temps?
 
Merci d'avance :hello:


Message édité par Nico-Rep le 26-12-2005 à 17:54:53

---------------
Topic de vente HW - Ancien feed
mood
Publicité
Posté le 26-12-2005 à 17:51:48  profilanswer
 

n°1273551
watashi
La démotivation : JAMAIS !
Posté le 27-12-2005 à 09:23:40  profilanswer
 

Salut nico-rep,

Code :
  1. dim lastrow
  2. lastrow = range("A3" ).end(xldoxn).row
  3.         ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
  4.         "'Historique relations clients'!R3C1:R" & lastrow & "C5" ).CreatePivotTable TableDestination _
  5.         :="'[Projet VBA - 15-12.xls]TCD - Analyse clientèle'!R3C3", TableName:= _
  6.         "Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10


 
Essaye avec ça, ça devrait marcher
Tu peux faire de mmême pour les colones :)
 
@+

n°1273603
Nico-Rep
Posté le 27-12-2005 à 11:32:28  profilanswer
 

Merci pour ton aide ;)
 
J'ai hélas toujours le même message d'erreur qui s'affiche... Il refuse de créer la PivotTable à partir d'une plage de donnée variable :pfff:


Message édité par Nico-Rep le 27-12-2005 à 11:37:07

---------------
Topic de vente HW - Ancien feed
n°1273625
watashi
La démotivation : JAMAIS !
Posté le 27-12-2005 à 11:51:26  profilanswer
 

Re en reregardant le code j'ai repéré qu'il manquait la virgule en gras. Est-ce corrigé chez toi ? Qui sait ça peut venir de là...

Citation :

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "'Historique relations clients'!R3C1:R" & lastrow & "C5" ).CreatePivotTable , TableDestination


@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
n°1273653
Nico-Rep
Posté le 27-12-2005 à 12:29:14  profilanswer
 

La virgule ne semble pas être utile, puisque le code n'est pas compris en sa présence...
 
Est-ce que ça peut être un bug d'excel 2003? J'ai demandé à un ami de faire le même type de commande sous Excel 2000 (à savoir créer un TCD à partir d'une plage de données variable) et cela marche avec un simple CurrentRegion...
 

Citation :

   ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:= _
        Sheets("Historique Relations Clients" ).Range("A3" ).CurrentRegion, TableDestination:=Sheets("TCD" ).Range("A1" ), TableName:= _
        "Tableau croisé dynamique2"
    ActiveSheet.PivotTables("Tableau croisé dynamique2" ).AddFields RowFields:= _
        "Numéro" & Chr(10) & "client", ColumnFields:="Type événement"
    With ActiveSheet.PivotTables("Tableau croisé dynamique2" ).PivotFields( _
        "Numéro événement" )
        .Orientation = xlDataField
        .Name = "NB Numéro événement"
        .Function = xlCount
    End With


---------------
Topic de vente HW - Ancien feed
n°1273702
watashi
La démotivation : JAMAIS !
Posté le 27-12-2005 à 14:08:44  profilanswer
 

Je suis aussi sous excel 2000, je ne sais pas dans quel sens t'orienter... J'espère que quelqu'un d'autre saura t'aider ...
Bon courage


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
n°1273738
Nico-Rep
Posté le 27-12-2005 à 15:22:24  profilanswer
 

Merci ;)


---------------
Topic de vente HW - Ancien feed
n°1717171
loren_zo
Posté le 14-04-2008 à 11:55:07  profilanswer
 

Salut nico-rep,
 
>>lastrow = range("A3" ).end(xldoxn).row
 
 
une seule faute et tous ne marche pas comme prévu.
 
Essai avec çà. Et ca fonctionnera
lastrow = range("A3" ).end(xldown).row
       
 
Salut

n°1989021
smha
Posté le 30-04-2010 à 11:42:00  profilanswer
 

Créer un TCD à partir d’une base de données évolutive, soit évolution des données à l’intérieur du TCD, soit évolution par rajout des données (rajout des lignes), sans modification du nombre de colonnes.
 
1 : Les données sont sur Feuil1. La 1ère ligne est réservée aux titres des colonnes.
2 : Le TCD est sur Feuille2
3 : Sur Feuil2, en cellule A1 par exemple : tapes NombreEntrées (pas d’espace entre les mots)
4 : Feuil2, cliquer sur A1, Insertion, Nom, Définir, Fait référence à, C1,
=Feuil2!$C$1
OK.
5 : Feuil2, cliquer sur C1, =, NBVAL, Feuil1 (en bas), cliquer sur A (sommet de la 1ère colonne), OK
6 : Feuille2, cliquer sur C1, dans l’espace à côté de fx, où est écrit
=NBVAL(Feuil1!A:A)-1
tapes -1 (pour enlever la1ère ligne des titres)
pour obtenir
=NBVAL(Feuil1!A:A)-1-1
 
Ainsi, en Feuil2, A1 fait référence à un nom, dont la valeur est de C1.
En Feuil2, C1 fait référence au nombre d’entrées de la 1ère colonne de Feuil1 moins la 1ère ligne des titres.
S’assurer qu’il n’y a pas de cellule vide entre les 1ère et dernière entrées de la 1ére colonne de Feuil1.
 
Test :
Entrer les données en Feuil1.
Choisis 4 colonnes.
Vérifies que C1 en Feuil2 correspond bien au nombre de lignes -1 de Feuil1.
 
Ensuite on passe à VBA en tapant sur Alt et F11 en même temps.
 
Créer un 1er module et tapes le code suivant :
 
Option Explicit
 
'variable booleen pour la mise à jour
Public blnMAJ As Boolean
 
'variable nbligne pour le nombre d'entrées
Public lngNombreEntrées As Long
 
'objet feuilles
Public objFeuil1 As Worksheet
Public objFeuil2 As Worksheet
 
Créer un 2e module et tapes le code suivant :
 
Sub MajTCDEssai()
 
    Range("A5" ).Select
     'A5 est la cellule où on insère un TCDEssai de la feuille2
 
    ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:= _
        "Feuil1!R1C1:R" & Range("NombreEntrées" ).Value + 1 & "C4"
 
     'R1CI veut dire à partir de la Rangée 1 et Colonne 1 de la feuille Données
     'vers la Rangée correspondant au nombre de lignes
     'selon le nom défini NombreEntrées + 1, correspondant à la ligne des titres
     'ici le Nombre_Entrées se trouve en C1 de la feuille2
     'et le nombre de colonne, qui est de 4
 
End Sub
 
En Feuille2, tapes le code suivant :
 
Private Sub Worksheet_Activate()
    Call MajTCDEssai
End Sub
 
Fermer VBA
 
Cliquer sur Feuille1
Ensuite sur Feuille2.
 
Un TCD est créé en Feuille2.
A vous de modifier le TCD selon vos critères.
 
Exemple Date en A6
Euros en B7
Selectionner la colonne B. Format. Cellule. Monétaire…..OK
Clique droit sur Date en A6
Grouper et afficher…
Grouper
Mois et Années
OK
 
FIN
 
NB : Je ne suis pas un expert en VBA. J’ai simplement compilé les données ici et là pour satisfaire mes besoins : un TCD avec des données qui peuvent varier soit à l’intérieur de la base des données, soit en rajoutant ou en enlevant des lignes. Le nombre de colonnes est déterminé d’avance et restera fixe.
 
Je reste réceptif à tout conseil.

n°1989024
smha
Posté le 30-04-2010 à 11:43:45  profilanswer
 

CORRECTIF
 
Créer un TCD à partir d’une base de données évolutive, soit évolution des données à l’intérieur du TCD, soit évolution par rajout des données (rajout des lignes), sans modification du nombre de colonnes.
 
1 : Les données sont sur Feuil1. La 1ère ligne est réservée aux titres des colonnes.
2 : Le TCD est sur Feuille2
3 : Sur Feuil2, en cellule A1 par exemple : tapes NombreEntrées (pas d’espace entre les mots)
4 : Feuil2, cliquer sur A1, Insertion, Nom, Définir, Fait référence à, C1,
=Feuil2!$C$1
OK.
5 : Feuil2, cliquer sur C1, =, NBVAL, Feuil1 (en bas), cliquer sur A (sommet de la 1ère colonne), OK
6 : Feuille2, cliquer sur C1, dans l’espace à côté de fx, où est écrit
=NBVAL(Feuil1!A:A)
tapes -1 (pour enlever la1ère ligne des titres)
pour obtenir
=NBVAL(Feuil1!A:A)-1
 
Ainsi, en Feuil2, A1 fait référence à un nom, dont la valeur est de C1.
En Feuil2, C1 fait référence au nombre d’entrées de la 1ère colonne de Feuil1 moins la 1ère ligne des titres.
S’assurer qu’il n’y a pas de cellule vide entre les 1ère et dernière entrées de la 1ére colonne de Feuil1.
 
Test :
Entrer les données en Feuil1.
Choisis 4 colonnes.
Vérifies que C1 en Feuil2 correspond bien au nombre de lignes -1 de Feuil1.
 
Ensuite on passe à VBA en tapant sur Alt et F11 en même temps.
 
Créer un 1er module et tapes le code suivant :
 
Option Explicit
 
'variable booleen pour la mise à jour
Public blnMAJ As Boolean
 
'variable nbligne pour le nombre d'entrées
Public lngNombreEntrées As Long
 
'objet feuilles
Public objFeuil1 As Worksheet
Public objFeuil2 As Worksheet
 
Créer un 2e module et tapes le code suivant :
 
Sub MajTCDEssai()
 
    Range("A5" ).Select
     'A5 est la cellule où on insère un TCDEssai de la feuille2
 
    ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:= _
        "Feuil1!R1C1:R" & Range("NombreEntrées" ).Value + 1 & "C4"
 
     'R1CI veut dire à partir de la Rangée 1 et Colonne 1 de la feuille Données
     'vers la Rangée correspondant au nombre de lignes
     'selon le nom défini NombreEntrées + 1, correspondant à la ligne des titres
     'ici le Nombre_Entrées se trouve en C1 de la feuille2
     'et le nombre de colonne, qui est de 4
 
End Sub
 
En Feuille2, tapes le code suivant :
 
Private Sub Worksheet_Activate()
    Call MajTCDEssai
End Sub
 
Fermer VBA
 
Cliquer sur Feuille1
Ensuite sur Feuille2.
 
Un TCD est créé en Feuille2.
A vous de modifier le TCD selon vos critères.
 
Exemple Date en A6
Euros en B7
Selectionner la colonne B. Format. Cellule. Monétaire…..OK
Clique droit sur Date en A6
Grouper et afficher…
Grouper
Mois et Années
OK
 
FIN
 
NB : Je ne suis pas un expert en VBA. J’ai simplement compilé les données ici et là pour satisfaire mes besoins : un TCD avec des données qui peuvent varier soit à l’intérieur de la base des données, soit en rajoutant ou en enlevant des lignes. Le nombre de colonnes est déterminé d’avance et restera fixe.
 
Je reste réceptif à tout conseil.

mood
Publicité
Posté le 30-04-2010 à 11:43:45  profilanswer
 

n°2041904
Miofan
Posté le 14-12-2010 à 00:50:55  profilanswer
 

bonsoir,
 
apres plusieurs jour de recherche je vous pose mon probleme,
 
je souhaite mettr à jour un tcd apres avoir ajouté des lignes et des collones.
je recherche avec come base ceci:
 
Range("a1" ).CurrentRegion.Select
 
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
Sheets("Feuil1" ).Range("a1" ).CurrentRegion).PivotTables("Tableau croisé dynamique3" ).PivotCache.Refresh , _
DefaultVersion:=xlPivotTableVersion10
 
mais pas de resultat jusqu'à present,
 
pouvez vous m'aider ,
 
Merci d'avance

n°2041977
tonio187
Posté le 14-12-2010 à 11:41:35  profilanswer
 

Bonjour
 
Problème également, excel ne veut pas se lancer et se bloque ici :  
 
 

Code :
  1. Sheets.Add
  2.     ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
  3.         "POINTAGE ATELIER!L98C2:L312C9", Version:=xlPivotTableVersion10). _
  4.         CreatePivotTable TableDestination:="Feuil1!L3C1", TableName:= _
  5.         "Tableau croisé dynamique5", DefaultVersion:=xlPivotTableVersion10


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA]Tableau croisé dynamique sur plage variable

 

Sujets relatifs
vba word couleur tableaupb variable php/mysql
Transféré un tableau entre 2 form ? Pointeur ?Importer mots d'un fichier texte dans un tableau
Instruction VBA ExcelListBox VBA
Connexion Active Directory en dynamiqueBesoin d'aide VBA Excel
passage de variable entre php et flashPerte Variable de session
Plus de sujets relatifs à : [VBA]Tableau croisé dynamique sur plage variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR