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 :

Effectuer une somme de lignes filtrées


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Par défaut Effectuer une somme de lignes filtrées
    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

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Tu parles d'un TCD ?

  3. #3
    Membre éclairé Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Par défaut
    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

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    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 :
    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
    Je n'ai pas testé mais je pense que tu as l'idée.
    Place "tot" où tu souhaites après. Je les ai mis en colonne A.

    Tiens moi au courant !

  5. #5
    Membre éclairé Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Par défaut
    Merci pour ta réponse Kimy_Ire.

    Je viens de tester le code et j'ai le message d'erreur suivant :

    Impossible de lire la propriété pivotables de la classe worksheet
    Peut-tu me dire de quoi il s'agit ?

    Merci d'avance.

    Daniel

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    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" :
    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
    Pour plus de robustesse, je te propose également de placer ceci :
    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
    Ca calculera le tot uniquement si la valeur est numérique.

    Bref tiens moi au courant !

  7. #7
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    Bonsoir

    Voici le code que j'utilise

    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 & ")")
    Voici une procédure documentée qui vous donne deux possibilités pour la somme des lignes après application d'un filtre

    - Total avec la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [F3].Formula = "=SUM(" & Formule & ")"
    - le montant du Total :
    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

  8. #8
    Membre éclairé Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Par défaut
    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

  9. #9
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    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

Discussions similaires

  1. [CR X]Effectuer une somme d'une somme
    Par Chuppas dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 06/08/2008, 10h52
  2. effectuer une somme dans un etat
    Par pit88 dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/08/2007, 13h06
  3. n'arrive pas a recuperer mes id pour effectuer une somme
    Par CROSS dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/07/2007, 15h09
  4. Requête qui fait une somme par ligne
    Par snoopy69 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 10/08/2006, 08h30
  5. Réponses: 4
    Dernier message: 19/10/2005, 09h20

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