IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Probleme de creation d'une Pivot table (TCD)


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut Probleme de creation d'une Pivot table (TCD)
    Bonjour a tous

    Je me prend la tete depuis 2 jours a creer une TCD a partir de données d'une feuille Excel en VBA mais je n y arrive pas!!!
    Voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Sub TCD()
    Sheets("Sheet2").Activate
    Dim pivot As String
    Dim counter As Double
    counter = Cells(2, 1).End(xlDown).Row
     pivot = "Sheet2!R1C1:R" & counter & "C2"
    'avec counter=nombre de lignes
     
    'création du tableau croisé dynamique
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=pivot). _
        CreatePivotTable TableDestination:=range("AA2"), TableName:="ALtis"
        ActiveSheet.Name = "Pivot toutAlti"
        ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
        ActiveSheet.Cells(3, 1).Select
        ActiveSheet.PivotTables("Altis").SmallGrid = False
        With ActiveSheet.PivotTables("Altis").PivotFields("Nom")
            .Orientation = xlRowField
            .Position = 1
        End With
        With ActiveSheet.PivotTables("Altis").PivotFields("Encours")
            .Orientation = xlDataField
            .Position = 1
        End With
     
     
    End Sub
    Ca bloque au niveau de ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=pivot). _
    Ca me fair erreur 1004. Je ne comprends pas pourquoi???

    Quelqu'un peut m'aider svp

    Merci d'avance

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Salut,

    ta syntaxe est incorrecte.
    SourceData:=pivot


    voici un exemple qui fonctionne.
    Il prend toutes les données de la feuille External comme source. (11 colonnes)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
            "External!R1C1:R" & xlrow & "C11").CreatePivotTable TableDestination:="", TableName:= _
            "Pivot_Press"

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    Merci Godzestla pour ta reponse mais ca ne marche tjs pas...
    Maintenant, j'ai une erreur 424 (Object required) avec le code que tu m'as donnée...
    Ce que je veux faire est le suivant:
    J'ai des données sur une feuille Excel (Sheet2),18 colonnes et le nombre de ligne varie d'une requête a l'autre ( je récupère mes données selon des critères d'une base de donnée Access via SQL en VBA Excel).
    Il ya trop de doublons, de triplons et même plus dans mes données, donc je veux récupérer une seule fois les données de la première colonne...
    J'ai essayé de faire des boucles, des Vlookup mais ca prend du temps car le nombre de ligne est important, c'est pour cela que je veux faire une pivot table en VBA, je récupère le bon nombre de champs, rapidement et j'ai pas a rafraichir les données manuellement a chaque requête ( nouvelles données).
    Si tu peux m'aider ca serait trop cool

    Merci

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Salut sissi00000,

    j'ai très peu de temps mais montre moi ta procédure ou fonction ou je vais peut-être pouvoir voir quelquechose.

    Merci de dire également ou se trouvent tes données de base pour le pivot.

    en fait mon code vient de :

    1) enregistremenrt macro
    2) Générer la pivot à la main
    3) Stop macro
    4) Adapte le range pour données variable.

    C'est tout.

    Tu peux essayer. C'est étonnant.

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    en fait , j'ai essayé plein de bout de code que j'ai trouve sur internet mais ca marche pas, parexemple celui la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    Sub MakeTable()
    'Dim Pt As PivotTable
    'Dim strField As String
    '
    '    'Pass heading to a String variable
    '    strField = Selection.Cells(2, 1).Text
    '
    '    'Name the list range
    '    range(Selection, Selection.End(xlDown)).Name = "Items"
    '
    '    'Create the Pivot Table based off our named list range.
    '    'TableDestination:="" will force it onto a new sheet
    '    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
    '        SourceData:="Sheet2!R1C1:R" & xlrow & "C11").CreatePivotTable TableDestination:="", _
    '            TableName:="ItemList"
    '
    '    'Set a Pivot Table variable to our new Pivot Table
    '    Set Pt = ActiveSheet.PivotTables("ItemList")
    '
    '    'Place the Pivot Table to Start from A3 on the new sheet
    '    ActiveSheet.PivotTableWizard TableDestination:=Cells(3, 25)
    '
    '    'Move the list heading to the Row Field
    '    Pt.AddFields RowFields:=strField
    '    'Move the list heading to the Data Field
    '    Pt.PivotFields(strField).Orientation = xlDataField
    'End Sub
    il bloque aussi a la creation de la table.
    mes données pour la pivot table se trouve dans une feuille sous forme de 18 colonnes et un nombre de ligne non defini...
    Normalement j'ai pas besoin de creer le pivot table a la main , non???

  6. #6
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Ca peut pas marcher comme cela. Il y a plein de fautes (XLrow n'existe pas dans ton code).

    Je me repete, please car pas le temps, donne moi ton code LISIBLE (donc pas avec des ' devant chaque ligne, et dis moi précisément comment je repère la source de données, en code SVP, du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sheet2!R1C1:R500C11") ou si le range est dans une variable ou une sélection montre moi ou.
    Faut prendre ton temps pour expliquer en détails si tu veux une réponse qui marche.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai testé votre code initial avec différents nombres de lignes et de colonnes et le TCD est bien créé.

    Donc pour l'erreur 1004 vérifiez bien votre base de données.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    counter = Cells(2, 1).End(xlDown).Row
     pivot = "Sheet2!R1C1:R" & counter & "C2"
    vous indiquez Cells(2, 1) pour trouver la dernière ligne et ce n'est pas un problème, mais les titres sont bien en ligne 1 et non pas en ligne 2 ?

    par contre après que le TCD soit bien créé j'ai une erreur sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    et là j'avoue que je n'ai pas trouvé pourquoi ni bien compris ce que vous voulez faire.

  8. #8
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    merci pour vos reponses mais ca marche tjs pas.
    J'ai pas un code specifique, c'est des codes que je recupere sur internet et j'essaye de les adapter mais je n y arrive pas.
    Comme je l'ai expliqué, je veux créer une pivot table avec des données qui existe sur une feuille sous forme de 18 colonnes et un nombre de ligne non defini...
    je veux recupérer les elements que de la premiere colonnes une seule fois chacun, comme je l'explique plus haut, y a des doublons dans mes colonnes, c'est pour ca que je fais une pivot table.
    voila le dernier code que j'ai utilisé et qui marche pas non plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub TCD()
    Sheets("Sheet2").Activate
    Dim pivot As String
    Dim counter As Double
    counter = Cells(2, 1).End(xlDown).Row
    pivot = "Sheet2!R1C1:R" & counter & "C2"
    'avec counter=nombre de lignes
     
    'création du tableau croisé dynamique
     
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=pivot).CreatePivotTable TableDestination:="", _
    TableName:="PivotTable1"
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Isin")
    .Orientation = xlRowField
    .Position = 1
    End With
     
    End Sub
    Je sais pas si je dois lui donner toute les données ou bien que la premiere colonne, vu que j'ai besoin que de ses elements???
    je commence par la deuxieme ligne pour counter = Cells(2, 1).End(xlDown).Row, car y a rien dans la premiere ligne.
    Merci pour votre aide a tous les deux mais j'avoue que c'est la premiere fois que j'entend parler des pivot table donc je ne comprends pas trop meme le code donc si vous pouvez me corriger ce code, ca serait sympa!

  9. #9
    Invité
    Invité(e)
    Par défaut Ajout d'informations
    je commence par la deuxieme ligne pour counter = Cells(2, 1).End(xlDown).Row, car y a rien dans la premiere ligne.
    Voila déjà pour votre erreur 1004

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pivot = "Sheet2!R1C1:R" & counter & "C2"
    il ne faut pas mettre R1C1
    Mais R2C1

    Pour le reste je ne vois pas l'utilité d'un TCD avec une seule colonne cela ne donnerait rien.

    En fonction de ces dernières informations, je reviens sur ce que vous a écrit Godzestla : sans un exemple de votre fichier et sans avoir une idée précise de ce que vous voulez faire, il est difficile de vous aider.

    N'oubliez pas que vous pouvez créer votre propre macro :

    Outils puis Macro puis Nouvelle Macro.

    Ensuite vous effectuez manuellement toutes les options pour créer votre TCD (Données puis Rapport de tableau croisé dynamique) conformément à ce que vous voulez et vous arrêtez l'enregistrement de la macro.

    Une fois que c'est fait vous pourrez mettre le code qui a été créé automatiquement dans une nouvelle réponse et on pourra vous dire quelles lignes modifier pour cela puisse se faire automatiquement en fonction de la plage existante.
    Dernière modification par Invité ; 10/07/2008 à 17h35. Motif: Ajout

  10. #10
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    Merci pour votre aide.
    En fait, je vais proceder autrement, je vais creer ma pivot table a la main mais je voudrai qu'elle se rafraichisse automatiquement a chaque fois que mes données changent .
    je sais pas du tout comment faire? j'ai trouve ca sur internet mais je sais pas comment l'adapter, ou le mettre??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveSheet.PivotTables("PivotTable1").RefreshOnFileOpen = True
    merci

  11. #11
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    re,

    tu vas troip vite et tu ne maitrise pas encore la matiere.

    Tu gères ta variable pîvot comme un string mais VBA ne sais pas la traduire.

    Essaie ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub TCD()
    Sheets("Sheet2").Activate
    Dim pivot As String
    Dim counter As Double
    Dim counterx as string
    counter = Cells(2, 1).End(xlDown).Row
    counterx = counter
    'avec counter=nombre de lignes
     
    'création du tableau croisé dynamique
     
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Sheet2!R1C1:R" & counterx & "C2").CreatePivotTable TableDestination:="", _
    TableName:="PivotTable1"
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Isin")
    .Orientation = xlRowField
    .Position = 1
    End With
     
    End Sub

  12. #12
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    je viens d'essayer le code que vous m'avez donné mais c tjs la meme erreur
    donc je me suis dis qu'il vaut mieux le creer a la main et la rafraichir automatiquement et c'est ca qui est vraiment importantt dans mon cas, c'est pas telement la creation de la pivot table en elle meme qui m'importe mais c'est les données recupérées a chaque fois ( car mes données changent d'une requete a une autre), c'est super important de savoir rafraichir cette pivot table a chaque changement de données.
    Mais le probeleme, c'est comment faire???

  13. #13
    Invité
    Invité(e)
    Par défaut
    Vous pouvez utiliser ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.PivotTables("Tableau croisé dynamique1").RefreshTable
    Pour vérifier le nom de votre TCD vous cliquez dessus avec le bouton droit puis "Propriétés".

    Mais quitte à faire votre TCD manuellement vous n'êtes pas obligée de créer une macro par actualiser.

    Vous pouvez faire Affichage puis Barre d'outils puis Tableau croisé dynamique et cliquer sur !

    Godzestla :

    à priori, pas d'accord avec votre remarque. J'ai bien dit dans ma précédente réponse que j'avais testé avec différents nombres de lignes et de colonnes et cela fonctionnait.

    Je ne vois pas la différence entre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SourceData:="Sheet2!R1C1:R" & counterx & "C2")
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mavariable = "Sheet2!R1C1:R" & counter & "C2"
    SourceData = mavariable
    De plus, il est précisé ci-dessus que la ligne 1 est vide, donc
    R2C1 et non R1C1 c'était l'erreur que faisait sissi00000.

  14. #14
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    C genial ma pivot table se rafraichie automatiquement et c'est le plus important...

    Merci a tous les deux pour votre aide precieuse et bravo.

    Cependant,vous avez l'air de bien vous y connaitre en VBA donc une autre question pour vous:
    J'ai une listBox que j'ai crée manuellement et pour la remplir, je clique sur le mode creation, clique droit,propriété,ListFillRange... mais la je veux la remplir automatiquement car le nombre de ligne de ma selection n'est pas fixe...
    une idée?
    Merci encore, vous etes geniaux

  15. #15
    Invité
    Invité(e)
    Par défaut
    Vous pouvez mettre ce code sur la feuille contenant votre ComboBox et la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Init_Combo()
    ComboBox1.Clear
    dl = Range("A65536").End(xlUp).Row
    For i = 1 To dl
    Text = Cells(i, 1)
    If Text <> "" Then
    ComboBox1.AddItem Text
    End If
    Next i
    End Sub
    Dans la ligne :

    dl = Range("A65536").End(xlUp).Row

    Vous remplacez éventuellement le A par la colonne contenant votre liste

    et dans :

    For i = 1 To dl

    vous remplacez éventuellement le 1 par votre première ligne de la liste.

    J'ai supposé que vous aviez créé ce ComboBox avec la Barre d'outils "Boite à outils contrôles".
    Dernière modification par Invité ; 10/07/2008 à 20h19.

  16. #16
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    jacques_jean
    Autant pour moi. je n'avais pas pris le temps de voir que R1C1 était vide.
    Et Pour Counterx, vu que la variable était de type long, je n'étais pas ceratin que la concaténation allait marcher.

    Bonne journée et merci pour les précisions.

  17. #17
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    Bonjour a tous

    Merci jacques_jean pour ta reponse mais ca marche pas.

    En fait j'ai une listBox et non pas une ComboBox, mais essayé avec les deux:
    Dans les deux cas, j'ai une erreur a la premiere ligne ComboBox1.clear ou bien listBox1.clear ( Run Time error '-2147467259(80004005)') Automation error,Unspecified error
    Je le mets donc en commentaire et je continue:
    Si je laisse ComboBox tel quel, j'ai un erreur la ligne:ComboBox1.AddItem Text (Run-Time error 424, object required)
    Quand je mets ListBox a la place de comboBox, j'ai une erreur au niveau de ListBox1.AddItem Text( Run-time error '70', persmission denied).

    Je ne sais pas qoi faire

  18. #18
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Si j'ai bien compris, ta ListBox se trouve directement sur la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Init_Combo()
    Dim dl As Integer
     
    With Sheets("Feuil1")
        .ListBox1.Clear
        dl = .Range("A65536").End(xlUp).Row
        For i = 1 To dl
            If .Cells(i, 1).Text <> "" Then
                .ListBox1.AddItem Cells(i, 1).Text
            End If
        Next i
    End With
    End Sub

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est toujours déprimant de constater qu'après avoir fait 3 ou 4 essais cela fonctionne sur 1 PC et pas sur l'autre, mais il y sûrement une raison.

    Vous avez créé votre ListBox avec Boite à outils contrôles ou avec la Barre d'outils Formulaires ?

  20. #20
    Invité
    Invité(e)
    Par défaut
    Re,

    Vous avez renseigné la zone ListFillRange dans les propriétés en indiquant la plage de cellules ?

    C'est sans doute la cause du problème : vous supprimez cette plage et vous laissez la zone vide.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Probleme de creation d'une table apres creation de la bdd
    Par adissa357 dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 02/10/2013, 01h33
  2. Probleme de creation d'une BDD avec SQL server 2005 et vista
    Par necer_cheniki dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 22/06/2008, 10h15
  3. Changer les données d'une pivot table en VBA avec SQL
    Par Reskibil dans le forum Général VBA
    Réponses: 0
    Dernier message: 03/04/2008, 17h47
  4. [SQL] Probleme de requete sur une même table
    Par LP-mpascolo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/01/2008, 14h02
  5. probleme de creation d'une BD
    Par impsaid dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/01/2008, 19h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo