Bonjour,
Je souhaiterai effectuer la somme des lignes pour lesquelles j'ai appliqué un filtre.
Je n'ai rien trouvé sur le Forum (sauf erreur),
Pouvez-vous m'aider à trouver une solution ?
D'avance merci.
Daniel
Bonjour,
Je souhaiterai effectuer la somme des lignes pour lesquelles j'ai appliqué un filtre.
Je n'ai rien trouvé sur le Forum (sauf erreur),
Pouvez-vous m'aider à trouver une solution ?
D'avance merci.
Daniel
Re,
Oui, c'est ça, sauf que le présentation ne convient pas et je dois présenter différemment.
C'est pour cela que j'aimerai trouver une solution.
Merci pour ton aide.
Daniel
Hum... Je crois que tu peux faire cela grace au TCD directement. [Sous excel 2007] Outils de tableau croisé dynamique >> Création >> Totaux généraux >> Activé pour (les lignes uniquement)
... par exemple.
Sinon par macro :
Je n'ai pas testé mais je pense que tu as l'idée.
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 Sub tcd() Dim Pvt As PivotTable Dim cell_ori As Range Dim tot As Single With Worksheets("test") Set Pvt = .PivotTables("Tableau croisé dynamique1") Set cell_ori = .Cells(Pvt.TableRange1.Row, Pvt.TableRange1.Column) For i = 1 To Pvt.TableRange1.Rows.count - 1 tot = 0 For j = 1 To Pvt.TableRange1.Columns.count - 1 tot = tot + cell_ori.Offset(i, j) Next j .Range("A1").Offset(i, 0) = tot Next i End With End Sub
Place "tot" où tu souhaites après. Je les ai mis en colonne A.
Tiens moi au courant !![]()
Merci pour ta réponse Kimy_Ire.
Je viens de tester le code et j'ai le message d'erreur suivant :
Peut-tu me dire de quoi il s'agit ?Impossible de lire la propriété pivotables de la classe worksheet
Merci d'avance.
Daniel
Tu n'es pas arriver a calculer tes lignes avec le calcul automatique des TCD ?
Pour l'erreur dans la macro : elle vient du fait que ton TCD ne s'appelle pas "Tableau croisé dynamique1". A toi de compléter !
De plus : je viens de tester, ca fonctionne ! Une chose, je n'ai pas pris la première colonne et la première ligne de ton TCD puisqu'elles sont composées généralement de "titres".
Si tu veux les prendre en compte pour une quelconque raison, je te propose de mettre des "0" à la place des "1" après le "i" et le "j" :
Pour plus de robustesse, je te propose également de placer ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 For i = 0 To Pvt.TableRange1.Rows.count - 1 '... For j = 0 To Pvt.TableRange1.Columns.count - 1
Ca calculera le tot uniquement si la valeur est numérique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 If IsNumeric(cell_ori.Offset(i, j)) Then tot = tot + cell_ori.Offset(i, j) End If
Bref tiens moi au courant !![]()
Bonsoir
Voici le code que j'utilise
Voici une procédure documentée qui vous donne deux possibilités pour la somme des lignes après application d'un filtre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Dim ColDep As Range, TotDep As Double '*** Plage des données < Colonne Payé > après le filtrage - 2eme ligne du tableau Set ColDep = Range(Cells(11, 8), Cells(Rows.Count, 8).End(xlUp)) TotDep = Evaluate("Sum(" & ColDep.Cells.SpecialCells(xlCellTypeVisible).Address & ")")
- Total avec la formule :- le montant du Total :
Code : Sélectionner tout - Visualiser dans une fenêtre à part [F3].Formula = "=SUM(" & Formule & ")"
Code : Sélectionner tout - Visualiser dans une fenêtre à part [G3] = Evaluate("Sum(" & ColSum.Cells.SpecialCells(xlCellTypeVisible).Address & ")")____________________
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 Sub SommeFiltre() Dim LastRow As Long, I As Long, Formule As String, StrNom As String Dim Donnees As Range, ColSum As Range With Worksheets("Mvts") '*** Plage avec une ligne d'entete afin que le filtre ne la prenne pas en compte Set Donnees = .Range(.Cells(3, 2), .Cells(.Rows.Count, 3).End(xlUp)) '* Filtrage sur la colonne C StrNom = ActiveCell Donnees.AutoFilter 1, StrNom '* Derniere ligne LastRow = .Cells(.Rows.Count, 2).End(xlUp).Row '* Commence à la 2eme ligne du tableau pour ne pas intégrer la ligne d'entête For I = 4 To LastRow '* Ne prend en compte que les lignes visibles If .Cells(I, 2).EntireRow.Hidden = False Then '* Construire la formule Formule = Formule & .Cells(I, 3).Address(0, 0) & "," End If Next I '* Vire la dernière virgule Formule = Left(Formule, Len(Formule) - 1) [E3] = StrNom [F3].Formula = "=SUM(" & Formule & ")" '------------------------------------------------------ '*** Plage des données < Colonne Montants > après le filtrage - 2eme ligne du tableau Set ColSum = Range(Cells(4, 3), Cells(Rows.Count, 3).End(xlUp)) [G3] = Evaluate("Sum(" & ColSum.Cells.SpecialCells(xlCellTypeVisible).Address & ")") '------------------------------------------------------ '* ôter le filtre Donnees.AutoFilter End With '* Libère mémoire ----------------------------- Set Donnees = Nothing: Set ColSum = Nothing End Sub
Cordialement
Albert
Re,
Je viens de teste le code de sogestion et c'est nickel
Si je peux, j'aurai une demande supplémentaire.
Pour consulter les sommes, il faut la première fois cliquer dans la cellule et renseigner le type de calcul a effectuer pour consulter le total.
Existe-t-il une solution pour le faire automatiquement ?
Daniel
Bonsoir,
Il suffit tout simplement de ne pas annuler le filtre mis enj place
>> ligne de code a supprimer
_________________
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2'* ôter le filtre Donnees.AutoFilter
Cordialement
Albert
Partager