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 VBA sous total Excel


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Macro VBA sous total Excel
    Bonjour à tous,

    Je travaille sous excel 2010, je voudrai automatisé via une macro VBA la fonction sous total.

    J'ai sur ma feuille excel un compte de résultat comptable, compte 6 et compte 7 en ligne et les mois de l'année en colonne, et je voudrai appliqué un sous total à chaque changement de nature comptable sur l'ensemble de mon tableau (TOTAL 60: sous total, TOTAL 61: sous total).

    Je travaille sur différentes feuilles, chaque feuille représentant une activité particulière; mes tableaux ont tous une taille différente. Par exemple, le Total 60 se trouve en ligne 14 pour une activité et en ligne 21 pour une autre.

    Je suis novice en terme de macro .

    Merci d'avance de votre aide!!

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    Bonsoir
    Pour établir un état de résultat ou n'importe quel autres calcul je procède de la façon suivante :
    Ma base de travail c'est toujours la balance comptable des charges et des produit, pour moi ma balance est structuré de la façon suivante :
    N° Compte / Libellé compte / Mouvement débit / Mvt Crédit / solde débit / solde crédit et j'ajoute autres colonne pour Solde (solde débit - solde crédit)
    Puis je déclare mon tableau et je fais les regroupements comme suit :
    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
     
    sub comptabilite
    dim Sh as worksheets
    Set Sh = sheets ("TONBALANCE")
    Tablo = Sh.Range("A2", "G" & Sh.Range("G" & Sh.Rows.Count).End(xlUp).Row)
     
     
    'CHIFFRESAFFAIRES 701/702/703/705 ici un exemple comment je calcul le Chiffre d'affaire
    For i = LBound(Tablo, 1) To UBound(Tablo, 1)
        If Tablo(i, 1) Like "701*****" Or Tablo(i, 1) Like "702*****" Or Tablo(i, 1) Like "703*****" Or Tablo(i, 1) Like "705*****" Then
            REVENU = REVENU + Tablo(i, 7)
        End If
    Next i
    Sheets("RESULTATA").Range("C7") = REVENU 'ici la feuille qui recevra ton calcul
    End sub
    Bonne continuation
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Merci de votre réponse, mais mon tableau est issu d'une extraction via sage et je ne peux pas modifier le format.

    Les cellules "Total 60" etc sont des champs non calculés.


    J'aimerai simplement appliqué un sous total sur les colonnes de D à S dès que "Total 60", "Total 61", "Total 62" etc... apparaît (en colonne B sur mon fichier pour toutes les feuilles) le tout en conservant mon formatage.

    Merci d'avance

  4. #4
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour et bienvenue sur le forum!
    la fonction SOUS.TOTAL existe sur Excel. Lorsqu'une fonction existe comme ça sur Excel, on peut directement l'utiliser en VBA grâce à la syntaxe WorksheetFunction.nom_de_la_fonction.
    Attention : VBA est en anglais, donc il faut trouver le nom de la fonction en ANGLAIS et on utilisera "," comme sépérateur d'argument et pas ";" comme sur Excel.
    Dans ton cas, tu peux utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.Subtotal(109, Sheets("nom de la feuille").Range("D1:D10"))
    En adaptant les arguments.

    https://msdn.microsoft.com/en-us/lib.../ff840579.aspx

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Re,

    Le problème c'est que la fonction sous total m'insère une ligne et j'aimerai que la macro ne m'en rajoute aucune.
    Je te met le fichier en pj pour que tu comprennes.

    Merci de ta réactivité
    Fichiers attachés Fichiers attachés

  6. #6
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Hmmm... je ne comprends pas bien comment la fonction sous totale peut insérer une ligne....
    Dans ton fichier tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.Subtotal(109, Sheets("nom de la feuille").Range("D1:D10"))
    tel quel dans un module. Je pense que tu n'as pas bien compris comment écrire du code VBA. Renseigne-toi sur la façon d'écrire du code, mais voici quelques explications:

    Il faut que tu créés une méthode que tu lanceras quand tu en auras besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub nom_de_la_methode
        'code
    End Sub
    Dans cette méthode, tu va mettre le code qui t'intéresses. Par exemple, tu veux que dans la cellule D11 apparaisse le sous total des cellules D1 à D10, tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub monSousTotal()
        Sheets("maFeuille").Range("D11").Value = Application.WorksheetFunction.Subtotal(109, Sheets("maFeuil").Range("D1:D10"))
    End Sub
    A gauche de "=", tu mets la cellule dans laquelle tu aimerais voir apparître le sous total et à droite tu mets le calcul pour le sous total.
    Sheets("maFeuil") indique que tu veux travailler dans la feuille nommée maFeuil. Range te permets de travailler dans une cellule.

    Pourquoi veux-tu passer par une macro? Ne peux-tu pas écrire seulement une formule dans ton fichier?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Le problème, c'est que je travaille sur différents onglets où mes tableaux sont de taille différentes, du coup mon sous total 60 sera jamais à la même position selon les feuilles.

    J'ai des fichiers ou je travaille sur des centaines de feuilles, c'est pourquoi j'aimerai automatiser l'opération.

  8. #8
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Mais Excel ne peut pas deviner où il doit écrire le sous total.
    Comment peux-tu lui indiquer où il doit l'écrire? Quelle est la logique de ton fichier? Y a-t-il un mot clef que l'on pourrait repérer à côté de la cellule où il faudra l'écrire?

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    A coté des cellules "total 60", "total 61", "total 70" etc...

    Je veux qu'Excel m'applique un sous total sur l'ensemble des mois de l'année représenté en colonne.

    Regarde mon fichier en pj, tu vas vite comprendre le cœur de mon problème...
    Fichiers attachés Fichiers attachés

  10. #10
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim i as Long
    i = Application.WorksheetFunction.Match("Total 60", Sheets("1").Range("C:C"), 0)
    Ainsi tu récupères la ligne où il est écrit "Total 60" dans la colonne C

    Imaginons que tes données commences toujours en ligne 11, pour janvier (colonne E) tu peux faire le sous-total ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("1").Range("E" & i).Value = Application.WorksheetFunction.Subtotal(109, Sheets("1").Range("E11:E" & i - 1))
    Ensuite tu sais que les données pour le sous-total 61, se trouvent en-desssous de la ligne i, tu peux faire qqc comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim debut As Long
    debut = i + 1    'pour avoir la première ligne des données pour le sous total 61
    i = Application.WorksheetFunction.Match("Total 61", Sheets("1").Range("C:C"), 0)    'pour avoir la ligne du sous-total 61
    Sheets("1").Range("E" & i).Value = Application.WorksheetFunction.Subtotal(109, Sheets("1").Range("E" & debut & ":E" & i - 1))
    etc.. .avec les autres sous-totaux

Discussions similaires

  1. [XL-2010] Macro VBA copie tableau Excel sous Powerpoint
    Par shakapouet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/04/2012, 09h47
  2. [XL-2007] Macro vba sous excel, un rien compliqué
    Par colapsus dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/06/2011, 15h25
  3. macro VBA sous Excel
    Par _debutant dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/01/2009, 17h44
  4. Sous total Excel
    Par ali92 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/04/2008, 09h46
  5. Lenteurs de macros VBA sous Excel 2007 vs Excel 2003
    Par nicotab dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/11/2007, 18h47

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