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 :

[E-03] Après un tri comment faire des sous totaux


Sujet :

Macros et VBA Excel

  1. #1
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut [E-03] Après un tri comment faire des sous totaux
    Bonjour, j'ai actuelement une macro qui me tri une plage de données par référence de produit. ce qui va me donner un résultat comme suit:

    Colonne A ........ Colonne Q

    Référence Produit Quantité


    80650 63
    80650 61
    80650 10


    80651 28
    80651 12
    80651 10


    .....

    Ce que je voudrais réussir à faire après execution de la macro, c'est faire un sous total après chaque changement de référence produit comme suit, en rappelant le numéro de référence en face du sous total

    Colonne A ........ Colonne Q

    Référence Produit Quantité


    80650 63
    80650 61
    80650 10


    80650 134 (Somme de 63+61+10)


    80651 28
    80651 12
    80651 10


    80651 50 (Somme de 28+12+10)

    Si quelqu'un voit comment faire?

    Et a la dernière ligne, je souhaiterais avaoir le total de tous les sous-totaux.

    Merci pour votre aide

    [EDIT]
    je n'arrive pas à vous illustrer la mise en forme, si besoins je peut fournir une petite explication sur WORD.

  2. #2
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Je pense qu'il y a moyen d'adapter la formule Excel "Sous-Total" et de l'adapter en VBA jusqu'à la dernière ligne?

  3. #3
    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
    Bonsoir Moilou2,

    je ne comprends pas ta demande, du tout car ce que tu demandes est très basique.

    J'ai saisis tes données dans une feuille puis via l'enregistreur de macro j'ai mémorisé ce que fais la fonction sous-total.

    J'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Range("A1:B7").Select
        Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2), _
            Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    Ou est ta difficulté ?

  4. #4
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Non ce n'est pas sa que je veux faire. Je te met en fichier joint mon fichier et on en reparle directement.
    Fichiers attachés Fichiers attachés

  5. #5
    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
    Bon, ok et puis.

    Ca donne ça. Tu veux quoi à la place.

  6. #6
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Oui c'est sa que je veux, mais la le problème c'est que tu as fait par rapport au nombre de ligne pile poil, mais moi ce que je veux faire c'est que cela soit adaptable si j'ai 100, 200, 5 lignes et non pas pour un nombre de lignes définies...

    Tu vois se que je veut dire? ou Pas?

    En gros dans la formule que je ne vois pas ou tu la mise dailleur parce que c'est en lecture seul, il ne faut pas que se soit défini par exemple de la ligne A1 à la ligne A10..... Mais que ce soit de la ligne A1 jusqu'à la dernière ligne où il y a des données....

    C'est sa la formule que tu as utilisée?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("G2") _
            , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
            False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
            :=xlSortNormal
        Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(15), _
            Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    Mais en fait tu n'a pas définit une ligne pour la fin des données si? Je n'en ai pas l'impression?

    Tu as juste défini que c'était en fonction de la cellule A2 et G2 c'est tout, mais si il y avait eu 500 lignes sa aurait fonctionné aussi?

  7. #7
    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
    Ben toi, alors, tu es un marrant.
    Tu commences par dire non puis tu dis oui alors que je n'ai rien changé.

    Cool. Tu vas nous pêter une durite.

    Mon code en lecture seule ? Ah bon. Me demande bien comment mais soit.



    Pour en revenir à nos moutons, voici comment faire, et c'est enfantin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub Soustotaux()
    '
    ' Soustotaux Macro
    ' Macro enregistrée le 22/10/2008 par Admin
    '
     
    '
        Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(15), _
            Replace:=True, PageBreaks:=False, SummaryBelowData:=True
        ActiveWindow.SmallScroll Down:=87
    End Sub
     
    Pour le nombre de lignes : on s'en fout !!!!!!!!!!!

  8. #8
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Est ce que tu peut m'apporter une précision parce que je suis un peut perdu, je suis désolé.

    Ta première solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("G2") _
            , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
            False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
            :=xlSortNormal
        Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(15), _
            Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    Et ta seconde:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(15), _
            Replace:=True, PageBreaks:=False, SummaryBelowData:=True
        ActiveWindow.SmallScroll Down:=87
    End Sub
    Quelle est la différence? Parce que je ne sais pas comment sa se fait mais quand je l'intègre dans ma macro sa ne fonctionne pas?

    Si sa peut t'aider, c'est peut être moi qui est fait une erreur, ou c'est mon code précédent qui bloque peut être...

    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
    Dim Cel As Range
     
    'J'attribue N° de lot à la cellule G1
    Range("G1").Value = "N° de lot"
     
    'Pour toutes les cellules de la colones G jusqu'à la dernière ligne où il y a des données, je récupère celles de la colonne F et je troncature au 6ème caractère en partant de gauche
    For Each Cel In Range([F2], [F65536].End(xlUp))
        Cel.Offset(0, 1).NumberFormat = "@"
        Cel.Offset(0, 1) = Left(Cel, 6)
    Next Cel
     
    'La je fait le pri par rapport aux données de la colonne A et de la colonne G
    NbLignes = ActiveSheet.UsedRange.Rows.Count
     
            With Range("A1:AJ" & NbLignes)
    .Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:= _
           Range("G2"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
           MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:= _
            xlSortTextAsNumbers, DataOption2:=xlSortTextAsNumbers
            End With
     
        Columns("B:C").Select
        Selection.EntireColumn.Hidden = True
        Columns("F:F").Select
        Selection.EntireColumn.Hidden = True
        Columns("H:I").Select
        Selection.EntireColumn.Hidden = True
        Columns("K:L").Select
        Selection.EntireColumn.Hidden = True
        Columns("P:AJ").Select
        Selection.EntireColumn.Hidden = True
     
         ActiveWindow.SmallScroll Down:=-126
        Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("G2") _
            , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
            False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
            :=xlSortNormal
        Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(15), _
            Replace:=True, PageBreaks:=False, SummaryBelowData:=True
        ActiveWindow.SmallScroll Down:=-27

  9. #9
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Oh je suis désolé je viens de voir mon erreur, c'était de ma faute, voila mon code modifié:

    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
    Dim Cel As Range
     
    'J'attribue N° de lot à la cellule G1
    Range("G1").Value = "N° de lot"
     
    'Pour chaque cellule de la colonne G je reprend les valeurs des cellules de la colonne F et je les troncature au 6e caractère vers la gauche
    For Each Cel In Range([F2], [F65536].End(xlUp))
        Cel.Offset(0, 1).NumberFormat = "@"
        Cel.Offset(0, 1) = Left(Cel, 6)
    Next Cel
     
    'Je fait le tri en fonction des colonnes A croissante et G croissante
    NbLignes = ActiveSheet.UsedRange.Rows.Count
     
            With Range("A1:AJ" & NbLignes)
    .Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:= _
           Range("G2"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
           MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:= _
            xlSortTextAsNumbers, DataOption2:=xlSortTextAsNumbers
            End With
     
    'Je fait mes sous totaux
      Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(15), _
            Replace:=True, PageBreaks:=False, SummaryBelowData:=True
        ActiveWindow.SmallScroll Down:=-27
     
     'Je masque les colonnes B,C,F.....
        Columns("B:C").Select
        Selection.EntireColumn.Hidden = True
        Columns("F:F").Select
        Selection.EntireColumn.Hidden = True
        Columns("H:I").Select
        Selection.EntireColumn.Hidden = True
        Columns("K:L").Select
        Selection.EntireColumn.Hidden = True
        Columns("P:AJ").Select
        Selection.EntireColumn.Hidden = True
     
    'Mise en forme finale
        Columns("A:A").ColumnWidth = 8.57
        Columns("D:D").ColumnWidth = 41.57
        Columns("E:E").ColumnWidth = 20
        Columns("J:J").ColumnWidth = 9.14
        Columns("A:O").Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Columns("O:O").Select
        Selection.NumberFormat = "#,##0"
        Range("A1").Select
    Merci encore pour toutes ces indications

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

Discussions similaires

  1. [AC-2002] Comment calculer des sous-totaux dans une requete croisee
    Par babinou dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/08/2009, 09h43
  2. Faire des sous totaux
    Par Niagala dans le forum Excel
    Réponses: 3
    Dernier message: 07/02/2008, 14h52
  3. [Etat] Faire des sous totaux
    Par SBranchu dans le forum IHM
    Réponses: 3
    Dernier message: 30/03/2007, 09h50
  4. [MySQL] Comment faire des sous-totaux ?
    Par renaud26 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/02/2006, 15h56
  5. [Debutant] Comment faire des sous-packages
    Par benratti dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 17/02/2005, 13h46

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