Rapport de tableau croisé dynamique

Résolu
cs_Bidibop Messages postés 12 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 27 mars 2007 - 28 févr. 2007 à 16:38
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 8 mars 2007 à 03:18
Bonjour,

Je souhaite, depuis Visual Basic, créer un rapport de tableau croisé dynamique dans Excel.
Mon document Excel est déjà créé avec un onglet rempli des donnés qui me sont nécessaires.

Par où dois-je commencer ? Avez vous des codes d'exemples à me donner ? Quels sont les références et composants à insérer dans mon projet ?

Merci.
 

11 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
8 mars 2007 à 03:18
Bienvenue,

Pour les prochains lecteurs, tu peux cliquer le bouton "Accepter..." sur la réponse qui a résolu ton problème.

MPi
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
1 mars 2007 à 00:01
Tu peux toujours rechercher avec ces mots
CreatePivotTable
PivotTables
PivotCaches
.....................donc, finalement, en recherchant Pivot tout court, tu trouveras certainement toutes sortes de codes...

Et tu peux aussi utiliser l'enregistreur de macro d'Excel, effectuer les tâches nécessaires, puis regarder le code et l'adapter.
À partir de ce code, il ne te reste qu'à l'insérer dans VB en utilisant tes objets WorkBook, WorkSheet,... préalablement créés.

MPi
0
cs_Bidibop Messages postés 12 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 27 mars 2007
1 mars 2007 à 11:39
Ok, merci de ton aide qui m'a servi à démarrer.


J'en suis là :


    
     Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")

     Dim waExcel: Set waExcel = CreateObject("Excel.Application")

     StrPath = "C:\TEST"

    StrFich = "Test.txt"

     

     If FSO.FileExists(StrPath & StrFich) Then

     waExcel.Visible = True

     waExcel.Workbooks.OpenText StrPath & StrFich, , 2, , , False, False, True, False, False, False

     waExcel.Workbooks(StrFich).SaveAs StrPath & Left(StrFich, Len(StrFich) - 4) & ".xls", , , , , , 4

        End If

      

    waExcel.Workbooks.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _

     "Test!R1C1:R2182C13").CreatePivotTable TableDestination:="", _

     TableName:="Tableau croisé dynamique3"


Message d'erreur sur la partie en gras : "Erreur 438" Cet objet ne gère pas cette propriété ou méthode
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
1 mars 2007 à 23:56
Ce petit bout de code fonctionne chez moi.
La plage de données qui doit servir à créer le tableau croisé doit contenir des entêtes. S'il n'y en a pas dans le fichier texte, il faudra les ajouter manuellement ou par code.
Il te restera ensuite à faire la disposition des champs...

Option Explicit

Private xlApp As Excel.Application
Private xlBook As Excel.Workbook
Private xlSheet As Excel.Worksheet

Private Sub Créer_Click()
    ' créer un nouveau fichier Excel
    ' à partir d'un fichier texte
    ' délimité avec des points-virgules

    Set xlApp = New Excel.Application
  
    ' Création - l'onglet par défaut se nomme comme le fichier => "Texte"
    xlApp.Workbooks.OpenText FileName:=App.Path & "\Texte.txt", DataType:=xlDelimited, SemiColon:=True
   
    ' Sauvegarder
    xlApp.ActiveWorkbook.SaveAs FileName:=App.Path & "\Test.xls", FileFormat:=xlExcel5
    xlApp.Visible = True
   
    'Création d'objets Excel
    Set xlBook = xlApp.ActiveWorkbook
    'Set xlSheet = xlApp.ActiveSheet   ' facultatif ici
   
    'sélectionne la plage s'il n'y a pas d'espaces
    Range("A1").CurrentRegion.Select      'facultatif, je pense
   
    'Création d'un tableau croisé dynamique
    xlBook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
     "Test!R1C1:R2182C13").CreatePivotTable TableDestination:="", _
     TableName:="Tableau croisé dynamique3"
    
End Sub

N'oublie pas, lorsque tu quittes le programme, de fermer l'application Excel et de tout mettre les objets utilisés = Nothing
    xlApp.Quit
    Set xlBook = Nothing
    Set xlApp = Nothing

MPi
0

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

Posez votre question
cs_Bidibop Messages postés 12 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 27 mars 2007
5 mars 2007 à 17:12
xlBook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Test111!R1C1:R2182C13").CreatePivotTable TableDestination:="", _
TableName:="Tableau croisé dynamique3"

Je suis bloqué ici : Erreur d'execution 438, cet objet ne gère pas cette propriété ou méthode.

J'ai bien des entêtes dans mon fichier.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 mars 2007 à 23:11
Est-ce que Test111 est bien le nom de l'onglet ?

Sinon, il faudrait que tu utilises une variable qui contiendrait le nom de l'onglet

MPi
0
cs_Bidibop Messages postés 12 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 27 mars 2007
6 mars 2007 à 10:18
Mon onglet est bien Test111 mais en fait mon problème vient avant cette partie là.

Quand je mets ça dans mon code :

Option Explicit

Private xlApp As Excel.Application
Private xlBook As Excel.Workbook
Private xlSheet As Excel.Worksheet

sur xlApp As Excel.Application, j'ai le message "Type défini par l'utilisateur non défini".
Faut-il mettre une référence, un composant ?

Merci à toi en tout cas, c'est très gentil de m'aider !
0
cs_Bidibop Messages postés 12 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 27 mars 2007
6 mars 2007 à 10:23
Ok, j'ai trouvé l'erreur :
Tout d'abord pour pouvoir utiliser Excel dans
un projet Visual Basic vous devez rajouter dans le menu
Projets - Références, Microsoft Excel x.x

Je continue ....
0
cs_Bidibop Messages postés 12 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 27 mars 2007
6 mars 2007 à 14:31
Ca fonctionne !!

Merci à toi.

Par contre dans la partie :
xlBook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Test!R1C1:R2182C13").CreatePivotTable TableDestination:="", _
TableName:="Tableau croisé dynamique3"

Le R1C1:R2182C13 me dérange, en effet ma source de données ne fera pas toujours le même nombre de lignes.
Comment lui faire sélectionner autrement le nombre de lignes ?
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
7 mars 2007 à 00:03
Tu pourrais essayer quelque chose comme ça, si les données commencent toujours à la ligne 1
Dim Ligne as Long, Colonne as Integer
Ligne = Cells.find("*",Range("A1"),,,xlbyRows,xlPrevious).row
Colonne = Cells.Find("*", Range("A1"),,,xlbyColumns,xlPrevious).column
......
xlBook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Test!R1C1:R " & Ligne & " C" & Colonne).CreatePivotTable TableDestination: ="", _
TableName:="Tableau croisé dynamique3"

Je n'ai pas testé, mais ça devrait ressembler à ça

MPi
0
cs_Bidibop Messages postés 12 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 27 mars 2007
7 mars 2007 à 10:30
Ca fonctionne parfaitement MPi !

Mille mercis !
0
Rejoignez-nous