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 :

programmation de tableaux dynamiques et graphiques?


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 96
    Points : 45
    Points
    45
    Par défaut programmation de tableaux dynamiques et graphiques?
    bonjour,
    je tente d'automatiser un processus de passage d'un indicateur de produits d'une entreprise, du type "ancien", au type "récent" (pour simplifier), et je me demandais s'il était possible de programmer la mise à jour d'un tableau croisé dynamique à partir d'une base access, qui est sans cesse modifiée? et également si la création de plusieurs graphiques bien définis peut être programmée, afin de faire de façon automatique leur mise à jour? (sachant que je peux prévoir une colonne de plus, afin d'ajouter les nouvelles valeurs...)
    merci à vous et bonne journée

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

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    tout cela est possible mais je pense que dans ta question, il y a tout un tas de questions.

    Voici une piste pour le début, à savoir rappatrier tes data acess vers excel.

    Pour le reste, pivot, graph.... je te suggère de démarrer l'enregistreur de macro, de faire la tache manuellement, et tu auras déjà une bopnne base en regardant le code généré par l'enregistreur.

    Après, pour rendre cela dynamique, il y aura quelques aménagements. Je te laisse déjà à l'ouvrage et je t'attends avec le code que tu auras pu pondre.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 96
    Points : 45
    Points
    45
    Par défaut
    oula...j'ai enregistré la réalisation d'un tableau croisé à partir de mon tableau de données, mais lorsque je l'ai effacé pour pouvoir tester ma macro j'ai un problème dès la première instruction...

    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
    30
    Sub Création_Tableau_Croisé_Dynamique_Chaine_Traction2()
    '
    ' Création_Tableau_Croisé_Dynamique2 Macro
    
    'on supprime la dernière colonne vide et les sommes de chaque année
    
    '
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
            "'data produit'!R1C1:R5000C8").CreatePivotTable TableDestination:=Range("B4") _
            , TableName:="Tableau croisé dynamique7"
        With ActiveSheet.PivotTables("Tableau croisé dynamique7")
            .RowGrand = False
            .SmallGrid = False
        End With
        ActiveSheet.PivotTables("Tableau croisé dynamique7").AddFields RowFields:= _
            "classification", ColumnFields:=Array("Année", "Mois")
        ActiveSheet.PivotTables("Tableau croisé dynamique7").PivotFields( _
            "Numéro événement").Orientation = xlDataField
        Application.CommandBars("PivotTable").Visible = False
        Range("K5").Select
        Selection.Delete
        ActiveWindow.SmallScroll ToRight:=15
        ActiveWindow.ScrollRow = 85
        ActiveWindow.ScrollRow = 14
        ActiveWindow.ScrollRow = 1
        ActiveWindow.SmallScroll ToRight:=12
        Windows("test code tableau croisé dyn.xls").Activate
        Range("X5").Select
        Selection.Delete
    End Sub

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

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Re,
    je te conseille de travailler de la manière suivante :
    1) toujours utiliser le même nom de feuille pour le résultat du Pivot : Ex "PIVOT" et aussi nommer la PIVOTtable du même nom que la feuille. (ne fonctionne que si un pivot par feuille)

    2) Tu commences par parcourir les feuilles et tu delete la feuille PIVOT si elle existe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    For idx = 1 to sheets.count
      if sheets(idx).name = "PIVOT" then
        Application.DisplayAlerts = False
         sheets(idx).delete
       Application.DisplayAlerts = False
         exit for
      end if
    next idx
    3) Tu récupéres le nombre de lignes de ta feuille data via end(xlup)... dans une variable XLROW
    4) place le résultat de ton pivot sur une nouvelle feuille puis renomme-là en PIVOT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
    "'data produit'!R1C1:R " & xlrow & "C8").CreatePivotTable TableDestination:=Range("B4") _
    , TableName:="Pivot"
    With ActiveSheet.PivotTables("Pivot")
    .RowGrand = False
    .SmallGrid = False
    End With
    ActiveSheet.PivotTables("Pivot").AddFields RowFields:= _
    "classification", ColumnFields:=Array("Année", "Mois")
    ActiveSheet.PivotTables("Pivot").PivotFields( _
    "Numéro événement").Orientation = xlDataField
    Application.CommandBars("PivotTable").Visible = False
    ActiveSheet.Name = "Pivot"
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 96
    Points : 45
    Points
    45
    Par défaut
    voici alors mon code:il y a toujours un soucis avec l'expression en rouge...

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Sub test3_création_tableau_dynamique()
    '
    ' test3_création_tableau_dynamique Macro
    ' Macro enregistrée le 20/02/2009 par djanicot
    '
    'création tableau croisé dynamique sans les totaux des lignes et des colonnes
    '
    '********************************************
        'au préalable
    '********************************************
    'on commence par parcourir les feuilles et par delete la feuille PIVOT si elle existe
    For idx = 1 To Sheets.Count
      If Sheets(idx).Name = "PIVOT" Then
        Application.DisplayAlerts = False
         Sheets(idx).Delete
       Application.DisplayAlerts = False
         Exit For
      End If
    Next idx
    
    'on récupére le nombre de lignes de la feuille data via end(xlup)...
    'dans une variable XLROW on place le résultat du pivot
    'sur une nouvelle feuille puis on la renomme en PIVOT
    
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
    "'data produit'!R1C1:R " & xlrow & "C8").CreatePivotTable TableDestination:=Range("B4") _
    , TableName:="Pivot"
    With ActiveSheet.PivotTables("Pivot")
    .RowGrand = False
    .SmallGrid = False
    End With
    ActiveSheet.PivotTables("Pivot").AddFields RowFields:= _
    "classification", ColumnFields:=Array("Année", "Mois")
    ActiveSheet.PivotTables("Pivot").PivotFields( _
    "Numéro événement").Orientation = xlDataField
    Application.CommandBars("PivotTable").Visible = False
    ActiveSheet.Name = "Pivot"
    '*************************************
    '   suite enregistrement
    '*************************************
        
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
            "'data produit'!R1C1:R5000C8").CreatePivotTable TableDestination:=Range("B70" _
            ), TableName:="Tableau croisé dynamique4"
        With ActiveSheet.PivotTables("Tableau croisé dynamique4")
            .ColumnGrand = False
            .RowGrand = False
            .SmallGrid = False
        End With
        ActiveSheet.PivotTables("Tableau croisé dynamique4").AddFields RowFields:= _
            "classification", ColumnFields:=Array("Année", "Mois")
        ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields( _
            "Numéro événement").Orientation = xlDataField
        ActiveWindow.SmallScroll Down:=12
        Range("K71").Select
        Selection.Delete
        ActiveWindow.SmallScroll ToRight:=13
        Range("X71").Select
        Selection.Delete
        Range("W71").Select
        Selection.Delete
        ActiveWindow.ScrollColumn = 1
    End Sub

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

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Hi,

    en vitesse car stress.

    Tu n'a pas fait ce que j'ai dit avec XLROW. Ce n'est pas implicite.

    Il faut le faire par code.

    Si je suppose que ta feuille data a une colonne a significative, alors tu peux faire ceci avant ton pivot:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dim LROW   as long
    dim XLROW as string
     
    lrow = Sheets("data produit").Range("A65535").End(xlUp)
    xlrow = lrow

    Bone chance.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

Discussions similaires

  1. Graphiques à partir de tableaux dynamiques
    Par raziel33 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/07/2008, 10h58
  2. Graphiques et tableaux dynamiques
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/03/2008, 16h17
  3. Tableaux croisé dynamique, un graphique
    Par phenixnerull dans le forum Excel
    Réponses: 2
    Dernier message: 26/06/2007, 11h58
  4. Tableaux croisés dynamiques et graphiques
    Par Marmouz dans le forum Access
    Réponses: 1
    Dernier message: 24/11/2005, 15h38
  5. [Kylix] Tableaux dynamiques sour Kylix2
    Par Krän dans le forum EDI
    Réponses: 6
    Dernier message: 07/10/2003, 14h31

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