Tableau croisé dynamique sur plage variable [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 27-12-2005 à 09:23:40
Salut nico-rep,
Code :
|
Essaye avec ça, ça devrait marcher
Tu peux faire de mmême pour les colones
@+
Marsh Posté le 27-12-2005 à 11:32:28
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
Marsh Posté le 27-12-2005 à 11:51:26
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:= _ |
@+
Marsh Posté le 27-12-2005 à 12:29:14
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:= _ |
Marsh Posté le 27-12-2005 à 14:08:44
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
Marsh Posté le 14-04-2008 à 11:55:07
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
Marsh Posté le 30-04-2010 à 11:42:00
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.
Marsh Posté le 30-04-2010 à 11:43:45
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.
Marsh Posté le 14-12-2010 à 00:50:55
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
Marsh Posté le 14-12-2010 à 11:41:35
Bonjour
Problème également, excel ne veut pas se lancer et se bloque ici :
Code :
|
Marsh Posté le 26-12-2005 à 17:51:48
Bonjour à tous
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):
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:
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
Message édité par Nico-Rep le 26-12-2005 à 17:54:53
---------------
Topic de vente HW - Ancien feed