Excel :Tableau croisé dynamique

intimez Messages postés 13 Date d'inscription lundi 25 décembre 2000 Statut Membre Dernière intervention 1 mai 2010 - 7 oct. 2009 à 18:39
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 12 oct. 2009 à 21:06
Bonjour à tous,
SVP je développe une application sous vs 2005 et j'aimerai générer un Tableau croisé dynamique dans une feuille Excel -qui contient bien sur les information nécessaire- a partir de mon application. par quoi doit je commencer? merci d'avance

11 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
7 oct. 2009 à 23:02
Bonsoir,

Par faire la programmation de ce que tu veux en VBA, pour l'adapter ensuite sous VB.NET...

Amicalement,
Us.
0
intimez Messages postés 13 Date d'inscription lundi 25 décembre 2000 Statut Membre Dernière intervention 1 mai 2010
8 oct. 2009 à 17:35
Merci pour t'as repense mais j'ai pas bien compris???? !!!
peut tu m'expliquer ??
Merci
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 oct. 2009 à 15:33
Bonjour,

En clair, je conseille de faire déjà la macro du tableau croisé dynamique avec les adaptations que tu veux, donc sous Excel en VBA. Puis, sous VB tu pourra écrire plus facilement le code pour le pilotage d'Excel, qui consistera a créer un objet qui pointera sur Excel, reprenant avec assez peu de modifications le code VBA... Sur CS tu pourra qlq codes pour t'inspirer...
Pour un exemple, même si ce n'est pas un exemple de référence, tu peux lire le commentaire du totriel suivant : http://www.vbfrance.com/tutoriaux/GRANDEUR-DECADENCE-VB2008_891.aspx

où le principe de l'adaptation du code sous VB, d'un code VBA est donné par :

Dim ExcelApp As Object
Dim ExcelClasseur As Object
Dim ExcelFeuille As Object

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ExcelApp = CreateObject("excel.application")
ExcelApp.visible = True
ExcelClasseur = ExcelApp.Workbooks.Add
ExcelFeuille = ExcelClasseur.sheets("Feuil1")
ExcelFeuille.cells.item(1, 1).value = "Machin"
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ExcelApp.quit()
End Sub

Ici, le code VBA serait un peu près celui-ci :

Workbooks.Add
Sheets("feuil1").Select
Cells(1, 1).Value = "Machin"

On reconnaît bien les 3 lignes...

Il est aussi plus facile de faire ainsi, car tu peut obtenir le code VBA de base grâce à l'enregistreur de macro...

Amicalement,
Us.
0
intimez Messages postés 13 Date d'inscription lundi 25 décembre 2000 Statut Membre Dernière intervention 1 mai 2010
12 oct. 2009 à 11:23
Bonjour,
Merci bcp, oui c'est la façon avec laquelle je gère mon fichier Excel(lecture,écriture ....) mais le problème c'est que je n'arrive pas à crée un tableau croisé dynamique en plus je sais pas travailler avec les macro.javascript:void(0);
Merci
0

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

Posez votre question
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
12 oct. 2009 à 12:26
euh... non... Excel travaille avec le langage VBA, c'est à dire en réalité VB + objets propre à l'application.
Pour créer des macros de base, il suffit d'utiliser l'enregistreur de macro. On obtient ainsi le code de base (en VBA) des manipulations effectuées. Pour cela il faut aller dans Outils>macro>nouvelle macro... A titre d'exemple (complètement caduc) qu'on obtient comme code d'un tableau croisé :

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 12/10/2009 par Us
'

'
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "Feuil1!R1C1:R5C2").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").PivotFields("sd")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("machin")
        .Orientation = xlColumnField
        .Position = 1
    End With
    ActiveWorkbook.ShowPivotTableFieldList = False
End Sub


IL faut vous renseignez sur l'enregistrement de macro, puisque cela vous semble inconnu...

Amicalement,
Us.
0
intimez Messages postés 13 Date d'inscription lundi 25 décembre 2000 Statut Membre Dernière intervention 1 mai 2010
12 oct. 2009 à 15:33
Merci
j'ai compris ce que vous voulez me dire alors maintenant je vais essayer de l'adapter avec le code vb.net
je vous remercie
0
intimez Messages postés 13 Date d'inscription lundi 25 décembre 2000 Statut Membre Dernière intervention 1 mai 2010
12 oct. 2009 à 17:59
bonjour,
pardon moi pour le dérangement:
voila le code de macro :
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Feuil1!R1C1:R6C9").CreatePivotTable TableDestination:= _
"'[Rapport d''activité Mr Zakaria.xls]Feuil1'!RC", TableName:= _
"Tableau croisé dynamique2", DefaultVersion:=xlPivotTableVersion10
ActiveWorkbook.ShowPivotTableFieldList = True
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Date")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Projet")
.Orientation = xlColumnField
.Position = 1
End With
ActiveSheet.PivotTables("Tableau croisé dynamique2").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique2").PivotFields("heures nettes"), _
"Somme de heures nettes", xlSum
ActiveWorkbook.ShowPivotTableFieldList = False

en le plaçant dans vs2005 il m'a générer plusieurs erreur dont certaines j'ai arrivé a les corriger par l'ajout de :
xlApp = New Excel.ApplicationClass
FichierExel = xlApp.Workbooks.Open(My.Application.Info.DirectoryPath & "\FichierCopie.xls")
PageExel = FichierExel.Worksheets("Détails")
Dim range As Excel.Range

mais il reste d'autre erreur qui j'arrive pas à les comprendre: xlDatabase,xlPivotTableVersion10,xlRowField, xlColumnField, xlSum. pouvez vous m'aider à les comprendre ?
Merci
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
12 oct. 2009 à 18:11
hum... comme ça, par intuition, je dirais que xlDatabase, xl-------, etc. et tout ce qui commence sont des constante... et des constantes comprises que par Excel... (xl rappelle l'extension xls des fichiers excel). Donc il suffit d'aller dans le VBE d'excel et dans la fenêtre d'exécution (CTRL+G) de taper : ? xlDatabase (et entrer) (? remplace le mot clé Print, donc on peut aussi faire : print xlDatabase) pour obtenir la valeur que la constante xlDatabase possède. Ici, xlDatabase vaut 1. etc... avec les autres constantes, puis de les remplacer (ou les définir) dans VB.NET...

Pour d'autres question, il faut faire un nouveau post. Une question par post normalement.

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
12 oct. 2009 à 18:12
lire :

tout ce qui commence par xl sont des constante

au lieu de :

tout ce qui commence sont des constante

Us.
0
intimez Messages postés 13 Date d'inscription lundi 25 décembre 2000 Statut Membre Dernière intervention 1 mai 2010
12 oct. 2009 à 19:19
j'ai récupérer tout les valeurs de tout les constantes alors comme ça il n'y a pas d'erreur mais en exécution il me gère une exception dans ce bloc :
 FichierExel.PivotCaches.Add(SourceType:=1, SourceData:= _
          "Feuil1!R1C1:R4C9").CreatePivotTable(TableDestination:= _
          "'[FichierCopie.xls]Feuil1'!R9C2", TableName:= _
          "Tableau croisé dynamique", DefaultVersion:=1)

le message d'exception est : Paramètre incorrect. (Exception de HRESULT : 0x80070057 (E_INVALIDARG)).
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
12 oct. 2009 à 21:06
Je redit : "Pour d'autres questions, il faut faire un nouveau post."

enfin, par intuition, je vérifierai si les coordonnées relatives que tu utilises pointes bien sur la bonne plage... donc voir si "r1c1:r4c9" est bien valide, idem pour "r9c2"... Perso, je préfère les coordonnées absolues... ce n'est qu'une suggestion, ce n'est peut-être pas ça... Si tu poses la question dans un autre post, peut-être que qlq'un de plus inspiré pourrait de mettre sur la bonne piste...

Amicalement,
Us.
0
Rejoignez-nous