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 :

[VBA-E]Ligne calculée en fin de tableau dynamique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 54
    Par défaut [VBA-E]Ligne calculée en fin de tableau dynamique
    Salut le forum Developez

    Un total calculé sur un résultat de champ de tableau dynamique me pose probleme. J'ai lu moult articles sur les champs et les éléments calculés des TCD, mais je n'y trouve pas la solution.

    Mon TCD contient :
    des lignes de produits,
    des colonnes de N° Semaines,
    des datas avec :
    la quantité de produits commandés par semaine
    le coût en Euros du produit commandés par semaine
    le total colonne semaine de quantité et coût euros de produits

    J'aimerais qu'en fin de TCD sous le total colonne, vienne se rajouter un Total mensuel extrapolé qui ferait :
    (total colonne coût semaine*52)/12

    La fonction des TCD, insertion champ calculé me pose probleme : je n'arrive pas à la restreindre à la zone total ; je ne peux pas la mettre ailleurs que dans les datas, et du coup il me renvoie le mensuel extrapolé de chaque ligne de produits, ce qui rend le TCD illisible...

    Et si je rajoute à la main les formules correspondantes, elles sont écrasées des que mon TCD est actualisé...

    Y a t'il un moyen de rajouter en fin de TCD des champs calculés à partir des totaux de TCD?

    Là je vais essayer qque chose en VBA, mais avec mon peu d'experience, je vais pondre un truc du genre : à chaque ouverture ou actualisation du TCD, recherche la ligne total et dessous rajoute les lignes contenant les formules blabla....
    Un peu lourd quoi....

    Quelqu'un aurait il une solution plus élégante à mon probleme?

    D'avance merci

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    A défaut d'une réponse plus orthodoxe... Avec VBA97, je n'ai pas trouvé d'autre solution que de faire une copie du TCD puis un "Collage spécial -> Valeurs seules", afin de pouvoir effectuer des calculs sur une nouvelle ligne du TCD.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        cells(1,1).CurrentRegion.Copy 'copie du tcd
        Range("O1").PasteSpecial Paste:=xlValues, Operation:=xlNone, _
        SkipBlanks:= false, Transpose:=False 'collage "ailleurs"...
    ... pour copier les valeurs sur un autre emplacement
    DernièreLigne = cells(1,1).currentcegion.end(xlDown).Row
    'et
    DernièreColonne = cells(1,1).currentregion.end(xlToRight).Column
    '... te donnent des indications pour positionner correctement ta formule.
    A défaut... etc

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 54
    Par défaut
    Merci ouskel'n'or

    Bon ok c'est une solution bidouille aussi, mais j'avais pas pensé au copier coller sur une autre feuille :
    avantage : en collant avec liaison de conserver le dynamisme du tableau initial
    desavantge : aucune mise en forme possible puisque la structure change à chaque update du tableau

    Autre solution bidouille : rajouter du code pour ajout des lignes voulues en fin de tableau
    avantage : transparent pour l'utilisateur, updaté en meme temps que le tableau
    desavantage : faut s'y connaitre un poil en VBA table Pivot pour utiliser les bons objets et faire ce qu'on veut
    de diou qu'est ce que c'est lourd pour faire un truc si simple

    Exemple de bidouille pour qui veut :

    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
    Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
     
    'Recherche de la ligne 'Total' càd der lig du tcd
            Dim ligFinTCD As Integer
            ActiveSheet.Range("A:A").Find(What:="Total", After:=ActiveSheet.Range("A7"), LookIn:=xlValues, LookAt:=xlWhole).Activate
            ligFinTCD = ActiveCell.Row
     
        'Effacement des données précentes
            ActiveSheet.Range(Cells(ligFinTCD + 1, 1), Cells(ligFinTCD + 5, colSEMAINES.Count + 4)).Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Clear
     
        'Insertion des lignes 'Mensuel extrapolé'
            ActiveSheet.Rows(ligFinTCD).Select
            Selection.Copy
            ActiveSheet.Rows(ligFinTCD + 1).Select
            Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            ActiveSheet.Range("A7").Activate
            ActiveSheet.Range("A" & ligFinTCD + 1).Value = "Mensuel extrapolé"
            'Boucle sur NB de colonne Semaines pour implementation du mensuel extrapolé
                Dim colSem As Long
                    For colSem = 5 To colSEMAINES.Count + 4 Step 2
                        If ActiveSheet.Cells(ligFinTCD, colSem).Value <> "" Then
                        ActiveSheet.Cells(ligFinTCD + 1, colSem).Value = (ActiveSheet.Cells(ligFinTCD, colSem).Value * 52) / 12
                        End If
                    Next colSem
     
    End Sub
    Si quelqu'un a une solution plus nette que nos deux bidouilles, pourquoi pas à partir de la fonction existante des PivotTables d'Excel, je suis preneuse,

    merci

    et merci encore Ouskel'n'or de m'avoir répondu

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par AliochaBada
    Autre solution bidouille : rajouter du code pour ajout des lignes voulues en fin de tableau
    avantage : transparent pour l'utilisateur, updaté en meme temps que le tableau
    J'ai peur que ta solution soit plus lourde que ma bidouille à moi
    Si tu colles les valeurs sur places et que tu utilises "Application.screenupdating = false" avant d'exécuter tes manipes, que tu le remets à true après, l'utilisateur ne verra rien mais cela évitera la recherche d'un mot (Total) et de tout ce qui l'accompagne.
    Ceci dit, bidouille pour bidouille... Mais je préfère ma bidouille à moi

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 54
    Par défaut
    Attends, tu veux dire qu'avec le copier coller sur place, je garde la structure du tableau dynamique avec la mise à jour des données, et le groupage et degroupage des lignes pour afficher ou masquer le detail?

    Ta solution permet ca?

    Si oui, alors clairement je vote pour ta solution et j'erase mon code

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Non, je ne veux pas dire ça. Ce que je veux dire, si ton TCD est créé par une macro, tu peux également automatiser la suite - Copie sur place et insertion de la formule qui va bien à l'endroit qui va bien
    Sinon, ce serait trop beau... Malheureusement les miracles, ça n'existe que pour les miraculés

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

Discussions similaires

  1. [XL-2010] VBA - Suppression de l'élément d'un tableau dynamique à 2 dimensions
    Par thomas.r dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/05/2013, 05h55
  2. Réponses: 3
    Dernier message: 22/01/2009, 18h29
  3. [E-03][Vba]faire une case totaux dans un tableau dynamique
    Par Overcrash dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/06/2008, 11h39
  4. Réponses: 2
    Dernier message: 06/09/2007, 15h08
  5. [VBA-E] ajout de ligne automatique en fin de tableau
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/06/2006, 21h13

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