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 :

Moyenne des trois dernières valeurs d'un tableau croisé dynamique


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Moyenne des trois dernières valeurs d'un tableau croisé dynamique
    Bonjour à tous,

    Je souhaiterais calculer la moyenne des trois dernières valeurs d'une colonne d'un tableau croisé dynamique.

    Mon tableau croisé dynamique est alimenté par une base de données qui tous les mois intègre de nouvelles lignes.

    La colonne de mon tableau croisé dynamique commence en C6.

    J'aimerais que la moyenne apparaisse en F3.

    J'ai fait un début de code mais n'étant pas expert, je me suis vite retrouvé bloqué.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C6").End(xlDown).Offset(-2, 0).Select
    Auriez vous une solution à m'apporter?

    En vous remerciant par avance!

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    quand on se déplace dans un TCD, il est préférable d'utiliser les outils qui lui sont associés

    si tu cherches la dernière cellule non vide de ta colonne, et que tu as une ligne de total à la fin de ton TCD, elle sera prise en compte à tort

    voici un petit exemple simple à comprendre (et simplifiable) : pour un TCD appelé "Tableau croisé dynamique1" dont la colonne sur laquelle faire le calcul s'appelle "QUANTITE"

    cette procédure s'active automatiquement quand la feuille est recalculée, et s'activera quand tu changeras les données de ton TCD
    elle écrit en F3 la moyenne des trois dernières données de la colonne QUANTITE

    la procédure est à coller directement dans le module de la feuille qui contient le TCD
    il faut juste changer le nom du TCD et de ta colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Calculate()
        With PivotTables("Tableau croisé dynamique1").DataFields("QUANTITE").DataRange
            ' il y a moins de 3 lignes de données
            If .Rows.Count < 3 Then
                Range("F3") = "Pas assez de lignes dans le TCD"
            Else
                ' on fait la somme des trois dernières lignes, on divise par3
                ' et on écrit le résultat en F3
                Range("F3") = Application.WorksheetFunction.Sum(.Rows(.Rows.Count - 2).Value, .Rows(.Rows.Count - 1).Value, .Rows(.Rows.Count).Value) / 3
            End If
        End With
    End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Merci Joe pour ta réponse.

    J'avais enlevé la ligne de la colonne car, en effet, à juste titre, la dernière valeur de la colonne ne doit pas être intégré.

    J'ai essayé ta solution mais cela me renvoie une erreur au niveau de PivotTables

    Je te joins mon fichier car cela peut aider à mieux comprendre.

    Merci encore!
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    je t'avais indiqué qu'il fallait :
    la procédure est à coller directement dans le module de la feuille qui contient le TCD
    il faut juste changer le nom du TCD et de ta colonne

    Tu as bien renommé le champs et le nom du TCD

    mais tu n'as pas mis la macro au bon endroit

    il faut la coller telle quelle dans le module de la feuille :

    - clic droit sur l'onglet du nom de la feuille
    - choisir "visualiser le code"
    - coller la macro suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Worksheet_Calculate()
        With PivotTables("Tableau croisé dynamique3").DataFields("Somme de Evolution USD").DataRange
            ' il y a moins de 3 lignes de données
            If .Rows.Count < 3 Then
                Range("F3") = "Pas assez de lignes dans le TCD"
            Else
                ' on fait la somme des trois dernières lignes, on divise par3
                ' et on écrit le résultat en F3
                Range("F3") = Application.WorksheetFunction.Sum(.Rows(.Rows.Count - 2).Value, .Rows(.Rows.Count - 1).Value, .Rows(.Rows.Count).Value) / 3
            End If
        End With
     End Sub
    dès que la feuille est recalculée (modification des filtres, actualisation du TCD etc...) ça recalculera la moyenne des trois dernières lignes du TCD

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Super Merci!

    Cela fonctionne et j'apprécie également le code en amont si il n'y a pas plus de 3 valeurs

    Merci beaucoup pour l'aide que tu m'as apporté!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/12/2010, 10h01
  2. Lire une valeur dans un tableau croisé dynamique
    Par hugues03 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 09/06/2010, 18h57
  3. Remplacer valeur dans un tableau croisé dynamique
    Par caro93150 dans le forum Excel
    Réponses: 16
    Dernier message: 04/07/2008, 09h13
  4. Réponses: 1
    Dernier message: 21/01/2008, 18h04
  5. Réponses: 4
    Dernier message: 27/11/2006, 23h20

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