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 :

Macro sous.total dynamique [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Macro sous.total dynamique
    Bonjour à tous !

    N'ayant aucunes connaissances en programmation VB (mais j'apprends vite), je fais appel à vous car j'ai du mal à avancer sur ma macro.

    Le but de la macro :

    - Je rentre des lignes sur Excel
    - Je lance la macro
    - Les lignes sont triées par mois (1ère étape) (je pense avoir réussi, ça a l'air de marcher !)
    - Dès qu'on change de mois, une ligne vide est automatiquement insérée entre deux (ça aussi !)
    - Une formule sous.total (9 : somme) est insérée dans une des cellule de la ligne vide, et fait la somme des valeurs d'un mois concerné

    La difficulté :

    - J'aimerais que la formule sous.total (une par mois) prenne toutes les données du mois concerné et s'arrête d'elle même quand on change de mois. Elle en ferait de même pour chaque mois.
    - Le but est qu'on puisse insérer des lignes et que la formule s'adapte d'elle-même.

    Ce que j'ai fait :

    - Voici en joint le modèle sur lequel je travaille et le code que j'ai créé, en m'inspirant de codes trouvés sur internets pour des problèmes à peu près similaires (que j'ai ensuite essayé de comprendre).
    - Soyez indulgents, je découvre les macros Excel.

    J'ai joint le fichier type sur lequel je travaille (en xls), ainsi que le code VBS (en txt), le tout dans un ZIP.

    PS : dans un second temps, je mettrais en place une macro qui supprime les lignes créées, pour revenir à AVANT la macro.
    J'essaierais d'abord de la faire avant de vous demander de l'aide.

    Merci à tous pour votre aide,

    Bonne journée à tous !

    Pierre - stagiaire achats
    Fichiers attachés Fichiers attachés

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Points : 182
    Points
    182
    Par défaut
    Bonjour,

    Pourriez-vous être un peu plus précis sur le contenu de 'Sous-Total" car je ne comprends pas :

    "fait la somme des valeurs d'un mois concerné"?

    Merci pour la précision...

    A+

  3. #3
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Voici ta source avec les sous-totaux (à condition que j'aie bien compris)
    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
    Option Explicit
    Sub Activer_la_macro()
     
    'Le descriptif de la macro est ici, en vert.
    'Le descriptif concerne la ligne en dessous.
     
    'Screen Updating = False --> éviter le refresh de l'écran, ralentissant l'ordinateur
     Application.ScreenUpdating = False
     
    'Dim Ligne As Long --> Dimensions (Dim), toute la longueur possible (As long)
     Dim Ligne As Long, Tot As Long, TotRow As Long
     
    'Range("A65536") --> va jusqu'à la dernière ligne possible du fichier excel
    'Row to 3 --> commence les sauts de ligne à partir de la 3ème ligne (la 1ère est la légende, la 2nde le premier mois)
    'Step -1 --> saut à partir de la ligne L-1 (celle juste au dessus)
    ' Tot = 0
     TotRow = Range("A65536").End(xlUp).Row + 2
     For Ligne = Range("A65536").End(xlUp).Row To 2 Step -1
       Tot = Tot + Cells(Ligne, 10)
    'Si les données de la colonne "K" d'une ligne diffèrent des données de la colonne "K" de la ligne d'en dessous, alors
       If Range("K" & Ligne) <> Range("K" & Ligne - 1) Then
     
    'Insertion d'une ligne entière
         If Ligne > 2 Then
           Range("K" & Ligne).EntireRow.Insert
           Cells(TotRow, 12) = Tot
           TotRow = Ligne + 1
           Tot = 0
         End If
    'Fin de la condition
      End If
     
    'Ensuite
    Next
    Cells(TotRow - 1, 12) = Tot
     
    'Sélection de la case "L3"
    Range("L3").Select
     
    'Fin de la macro
    End Sub

  4. #4
    Candidat au Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    @ Electrons :
    La somme ne devait que concerner les valeurs d'un mois donné (et rien de plus) donc s'arrêter automatiquement en changeant de mois (d'où les sauts de ligne).

    @ Defluc :
    C'est exactement ce que j'espérais, c'est top ! Je m'attendais à quelque chose de beaucoup plus complexe, ça à l'air enfantin (mais je ne minimise pas ton travail !)
    Maintenant, je vais décoder le "Tot", pour mieux comprendre !

    Merci à vous pour votre implication, à peine une heure après un problème, c'est le top !

    Bonne journée à vous !

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Points : 182
    Points
    182
    Par défaut
    Bonjour,

    J'ai un peu simplifié le code, ici, le sous-total additionne les "quantités" pour chaque mois et les affiche sur la dernière ligne avant l'insertion de la ligne vide.

    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
    Sub Activer_la_macro()
     
    'Screen Updating = False --> éviter le refresh de l'écran, ralentissant l'ordinateur
    Application.ScreenUpdating = False
     
    Dim LgDebut As Long 'Pour le numero de ligne de départ
    Dim LgNext ' Numero de ligne qui suit celle en cours
     
    Dim SsTotal As Integer 'Mémorise à chaque passage la valeur des quantités pour lemême mois
     
    'Initialisation de svariables
    SsTotal = 0
    LgDebut = 2
    LgNext = 0
     
    While Range("K" & LgDebut).Value <> BLANK
     
       'exemple je mémorise la valeur Quantité de la ligne en cours
        SsTotal = SsTotal + Range("J" & LgDebut).Value
        LgNext = LgDebut + 1
     
        If Range("K" & LgNext) <> Range("K" & LgDebut) _
            And (Range("K" & LgNext) <> BLANK) Then
     
            Range("L" & LgDebut).Value = SsTotal
     
            'Insertion d'une ligne entière
            Range("K" & LgNext).EntireRow.Insert
     
            'Remise à 0 du sous total
            SsTotal = 0
            'Le numéro de Ligne doit être incrémenté de 2 car i y a l'insertion d'une ligne vide
     
            LgDebut = LgDebut + 2
     
        Else
     
            LgDebut = LgNext
     
        End If
     
    Wend 'fin Boucle While...
     
    'Sélection de la case "L3"
    Range("L3").Select
     
    'Fin de la macro
    End Sub
    Voila, l'espère que vous aurez plus facile pour la suite

    Bonne journée.

  6. #6
    Candidat au Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    C'est top, avec des explications en plus

    Merci Electrons !

    J'ai encore pleiiiiiins de macros à mettre en place, mon stage va être long et instructif !

    Pour apprendre, auriez-vous un truc, un livre, un site... ?

    Merci encore à vous,

    Pierre

  7. #7
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 421
    Points : 16 265
    Points
    16 265
    Par défaut
    Bonjour

    Procéder ainsi va rendre la plage de données non triable, non filtrable, non utilisable pour un TCD...

    Il est tout à fait possible, lorsque les données sont triées de faire des sous-totaux par formule...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

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

Discussions similaires

  1. Macro sous total et export pdf
    Par hogun06 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/02/2014, 23h25
  2. [XL-2007] Tableau croisé dynamique, problème de sous-total
    Par loic_78 dans le forum Conception
    Réponses: 2
    Dernier message: 29/06/2012, 15h06
  3. [CR XI] Tableau croisé dynamique : insérer colonne personalisée / sous total
    Par Soheel dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 15/12/2009, 15h29
  4. Macro somme/sous.total(9;..) automatique avec code couleur
    Par jerem2007 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/07/2009, 19h46
  5. Tableau croisé dynamique et sous total
    Par qltmi dans le forum Débuter
    Réponses: 1
    Dernier message: 04/03/2008, 21h59

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