[Excel] Tableau croisé dynamique avec macro
Résolu
Arn's
Messages postés
25
Statut
Membre
-
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
Je cherche à faire un tableau croisé dynamique à l'aide d'une macro.
Mais un message d'erreur s'affiche lorsque j'exécute le code fourni par l'enregistreur de macros (je sais que c'est mal).
Ci-joint le fichier (simple) qui pose problème :
http://www.cijoint.fr/cjlink.php?file=cj200908/cijITG1Saz.xls
et voici le code fourni par l'enregistreur (il est aussi dans le fichier) :
Merci d'avance pour vos réponses, et bon courage.
Je cherche à faire un tableau croisé dynamique à l'aide d'une macro.
Mais un message d'erreur s'affiche lorsque j'exécute le code fourni par l'enregistreur de macros (je sais que c'est mal).
Ci-joint le fichier (simple) qui pose problème :
http://www.cijoint.fr/cjlink.php?file=cj200908/cijITG1Saz.xls
et voici le code fourni par l'enregistreur (il est aussi dans le fichier) :
Sub TestTCD()
'
' TestTCD Macro
' Macro enregistrée le 19/08/2009 par LIBGR15
'
'
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Feuil1!C1:C7").CreatePivotTable TableDestination:="", TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1")
.ColumnGrand = False
.RowGrand = False
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:= _
Array("TITRE", "Données")
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("SALAIRE" _
)
.Orientation = xlDataField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("SALAIRE" _
)
.Orientation = xlDataField
.Caption = "Somme de SALAIRE2"
.Function = xlSum
End With
Range("B3").Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").DataPivotField
.Orientation = xlColumnField
.Position = 1
End With
End Sub
Merci d'avance pour vos réponses, et bon courage.
A voir également:
- [Excel] Tableau croisé dynamique avec macro
- Tableau croisé dynamique - Guide
- Tableau word - Guide
- Trier un tableau excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Imprimer tableau excel sur une page - Guide
4 réponses
bonjour
Tu devrais vérifier ceci
Il est toujours préférable en plus de nommer ta plage de données du TCD avec DECALER pour qu'elle suive les modifications d'ajout et suppression.
Tu devrais vérifier ceci
"Feuil1!C1:C7"car il me semble qu'il n'y a pas toutes les données que tu veux utiliser ensuite.
Il est toujours préférable en plus de nommer ta plage de données du TCD avec DECALER pour qu'elle suive les modifications d'ajout et suppression.
bonjour
"DJ!c1:c2290" n'a pas grand chose de commun avec "DJ!A1:N2000" car tu n'as mis qu'une colonne.
Faudrait aussi supprimer le premier ordre "Feuil1!C1:C7" qui fait tout planter probablement.
"DJ!c1:c2290" n'a pas grand chose de commun avec "DJ!A1:N2000" car tu n'as mis qu'une colonne.
Faudrait aussi supprimer le premier ordre "Feuil1!C1:C7" qui fait tout planter probablement.
Merci gbinforme,
en effet, ca n'avait pas grand chose à voir!
Je cherche à créer un bouton (1 par ligne) qui me permet de copier les informations de 5 cellulles d'une ligne (B3; F3;G3;H3 et J3) dans 5 cellulles d'un autre fichier excel (B7 à B11).
Ca doit etre facile, mais pour moi c est titanesque!
Merci pour vos idées,
Guillaume
en effet, ca n'avait pas grand chose à voir!
Je cherche à créer un bouton (1 par ligne) qui me permet de copier les informations de 5 cellulles d'une ligne (B3; F3;G3;H3 et J3) dans 5 cellulles d'un autre fichier excel (B7 à B11).
Ca doit etre facile, mais pour moi c est titanesque!
Merci pour vos idées,
Guillaume
Merci beaucoup gbinforme, c'était donc ça. Je comprends pas pourquoi l'enregistreur s'est planté. J'ai recommencé en sélectionnant les colonnes A à G, comme la première fois, et dans le code j'obtiens toujours C1 à C7. Mais en modifiant cette plage à la main, tout rentre dans l'ordre.
Bonjour,
pourrai tu m'expliquer comment tu as résolu ton probleme, j'ai exactement le meme probleme mais je ne m'y connais pas, j'ai essayé de modifier "DJ!C1:C14" qui correspiond àu nombre de colonnes de mon tableau par "DJ!A1:N2000" (l'ensemble de mon tableau) sans succes
Merci pour la réponse,
Guillaume
PS: Voici mon code
Sub Tableau_croisé()
'
' Tableau_croisé Macro
' Macro enregistrée le 01/10/2009 par VIGUERARD Stéphane
'
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Feuil1!C1:C7").CreatePivotTable TableDestination:="", TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
'
Cells.Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"DJ!c1:c2290").CreatePivotTable TableDestination:="", TableName:=
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique1").PivotFields( _
"Degres-jours (base T C int.) COSTIC"), _
"Nombre de Degres-jours (base T C int.) COSTIC", xlCount
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Année")
.Orientation = xlRowField
.Position = 1
End With
Range("A3").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Nombre de Degres-jours (base T C int.) COSTIC").Function = xlSum
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "TABLEAU DJ"
Sheets("CONSOMMATIONS").Select
Cells.Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"CONSOMMATIONS!C1:C16").CreatePivotTable TableDestination:="", TableName:= _
"Tableau croisé dynamique2", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Identification compteur")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Mois")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Année")
.Orientation = xlColumnField
.Position = 1
End With
ActiveSheet.PivotTables("Tableau croisé dynamique2").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique2").PivotFields("Consommation"), _
"Nombre de Consommation", xlCount
Range("A3").Select
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Nombre de Consommation").Function = xlSum
ActiveWindow.SmallScroll Down:=-3
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Unite d'enregistrement")
.Orientation = xlRowField
.Position = 1
End With
Sheets("Feuil2").Select
Sheets("Feuil2").Name = "TABLEAU CONSOMMATIONS"
End Sub
pourrai tu m'expliquer comment tu as résolu ton probleme, j'ai exactement le meme probleme mais je ne m'y connais pas, j'ai essayé de modifier "DJ!C1:C14" qui correspiond àu nombre de colonnes de mon tableau par "DJ!A1:N2000" (l'ensemble de mon tableau) sans succes
Merci pour la réponse,
Guillaume
PS: Voici mon code
Sub Tableau_croisé()
'
' Tableau_croisé Macro
' Macro enregistrée le 01/10/2009 par VIGUERARD Stéphane
'
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Feuil1!C1:C7").CreatePivotTable TableDestination:="", TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
'
Cells.Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"DJ!c1:c2290").CreatePivotTable TableDestination:="", TableName:=
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique1").PivotFields( _
"Degres-jours (base T C int.) COSTIC"), _
"Nombre de Degres-jours (base T C int.) COSTIC", xlCount
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Année")
.Orientation = xlRowField
.Position = 1
End With
Range("A3").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Nombre de Degres-jours (base T C int.) COSTIC").Function = xlSum
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "TABLEAU DJ"
Sheets("CONSOMMATIONS").Select
Cells.Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"CONSOMMATIONS!C1:C16").CreatePivotTable TableDestination:="", TableName:= _
"Tableau croisé dynamique2", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Identification compteur")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Mois")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Année")
.Orientation = xlColumnField
.Position = 1
End With
ActiveSheet.PivotTables("Tableau croisé dynamique2").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique2").PivotFields("Consommation"), _
"Nombre de Consommation", xlCount
Range("A3").Select
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Nombre de Consommation").Function = xlSum
ActiveWindow.SmallScroll Down:=-3
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Unite d'enregistrement")
.Orientation = xlRowField
.Position = 1
End With
Sheets("Feuil2").Select
Sheets("Feuil2").Name = "TABLEAU CONSOMMATIONS"
End Sub
bonjour
Ca doit etre facile, mais pour moi c est titanesque
Facile non, titanesque oui car faire un bouton par ligne c'est plus compliqué et plus long que de faire un seul bouton qui traite la ligne sélectionnée.
Avec cette macro, dans ta feuille concernée tu copie la ligne que tu veux, sans bouton, simplement avec un double clis sur une des cellules de la ligne.
Bien sûr tu remplaces les valeurs en gras par les tiennes propres et si tu veux tu peux choisir le classeur de copie avec une fenêtre de sélection.
Ca doit etre facile, mais pour moi c est titanesque
Facile non, titanesque oui car faire un bouton par ligne c'est plus compliqué et plus long que de faire un seul bouton qui traite la ligne sélectionnée.
Avec cette macro, dans ta feuille concernée tu copie la ligne que tu veux, sans bouton, simplement avec un double clis sur une des cellules de la ligne.
Private Sub Worksheet_BeforeDoubleClick(ByVal sel As Range, Cancel As Boolean)
Dim dest As Range
Set dest = Workbooks("classeur1").Sheets("copie").Range("B7")
Cancel = True
Cells(sel.Row, "B").Copy Destination:=dest
Cells(sel.Row, "F").Copy Destination:=dest.Offset(1, 0)
Cells(sel.Row, "G").Copy Destination:=dest.Offset(2, 0)
Cells(sel.Row, "H").Copy Destination:=dest.Offset(3, 0)
Cells(sel.Row, "J").Copy Destination:=dest.Offset(4, 0)
End Sub
Bien sûr tu remplaces les valeurs en gras par les tiennes propres et si tu veux tu peux choisir le classeur de copie avec une fenêtre de sélection.