Insérer des sous totaux en VBA

Bonjour,

Pour mon travail je remplis des devis sur le tableur excel. Ces devis contiennent énormément de sous-totaux !!

Pour gagner un temps précieux j'aimerais automatiser ces sous-totaux. Pour ce faire étant donné que je ne connais jamais le nombre de ligne contenu dans les sous parties, mon idée est de mettre un certain symbole (pour exemple ²) dans une colonne spécifique (la A par exemple) est que lorsque j'appui sur le bouton (que j'ai créé pour l'occasion...) le code me permette de faire la somme des éléments des lignes qui sont au-dessus jusqu'à la ligne du précédent symbole. J'espère que ma demande est clair ...

C'est la seule idée que j'ai eu pour pouvoir me détacher du problème du nombre de ligne variable par section...

merci d'avance

Bonjour thibaut1313,

Peux-tu joindre un extrait de ton fichier,

çà sera + facile de t'aider

Claude

joindrefichier

dsl pas fonctionnée la pièce jointe ...

Bonjour

Un essai

Bonjour à tous,

Autre version

voir commentaire en A1

Sub SousTotaux()
Dim Lg%                                     'dernière ligne du tableau
Dim Ld%                                     '1ère ligne Sous-total
Dim Lf%                                     'dernière ligne Sous-total
    Application.ScreenUpdating = False
    Lg = Range("a" & Rows.Count).End(xlUp).Row

    For Ld = 3 To Lg
        Lf = Cells(Ld, "a").End(xlDown).Row
            If Cells(Lf, "a") = "Fin" Then Exit Sub
        '--- formules ---
        Cells(Lf, "m") = "=sum(m" & Ld & ":m" & Lf - 1 & ")"
        Cells(Lf, "m").AutoFill Destination:= _
        Range("h" & Lf & ":m" & Lf), Type:=xlFillDefault
        '---
        With Range("c" & Lf & ":m" & Lf)
            .Interior.ColorIndex = 8                    'bleu turquoise
            .Borders(xlEdgeTop).Weight = xlMedium       'haut
            .Borders(xlEdgeBottom).Weight = xlMedium    'bas
        End With
        Ld = Lf
    Next Ld
End Sub

Amicalement

Claude

Re bonjour,

Merci tu d'abord de cette répons rapide qui est presque parfaite ... car en vrai moi ce dont j'ai besoin est beaucoup plus simple car j veux simplement le sous total de la dernière colonne uniquement. Et malheureusement les trois dernière colonne la somme est fausse !

Si vous pouviez regarder (il est évident que j'essai de mon côté de comprendre votre code et de voir le problème se situe)

Merci d'avance


Merci bcp Claude cela fonctionne très bien.

Sans vouloir abuser pourrez tu me dire comment faire pur que les colonnes de mon tableaux soient séparées par des bordures et est-il possible de faire un total des sous totaux ??

re,

tu formate ton tableau avec les bordures qui vont bien, une fois pour toute

ensuite tu insère ou supprime des lignes sans problème !

le total des sous totaux est en dernière ligne (avec "Fin" en colonne "A")

que veux-tu de plus ? , réécrire les formules ?

Claude

Vraiment désolé tout est parfait la seule chose que j'aimerai est que je n'arrive pas a rajouter dan votre code c'est que l'ensemble des colonnes de mon tableau soient séparées par des bordures.

Comme mes tableaux sont toujours différents en taille je en peux pas le faire de manière définitive ou générale.

Peut être qu'il y a quelque chose que je fais mal mais je ne pense pas.

Merci de votre compréhension cordialement


Vraiment désolé tout est parfait la seule chose que j'aimerai est que je n'arrive pas a rajouter dan votre code c'est que l'ensemble des colonnes de mon tableau soient séparées par des bordures.

Comme mes tableaux sont toujours différents en taille je en peux pas le faire de manière définitive ou générale.

Peut être qu'il y a quelque chose que je fais mal mais je ne pense pas.

Merci de votre compréhension cordialement

Bonjour,

C'était pas utile d'ouvrir un nouveau poste,

Sub BorduresEtSousTotaux()
Dim Lg&                                     'dernière ligne du tableau
Dim Ld&                                     '1ère ligne Sous-total
Dim Lf&                                     'dernière ligne Sous-total
    Application.ScreenUpdating = False
    Lg = Range("d" & Rows.Count).End(xlUp).Row
        '--- bordurage du tableau ---
        With Range("c2:m" & Lg)
            .Interior.ColorIndex = xlNone
            .Borders(xlEdgeLeft).Weight = xlMedium
            .Borders(xlEdgeTop).Weight = xlMedium
            .Borders(xlEdgeBottom).Weight = xlMedium
            .Borders(xlEdgeRight).Weight = xlMedium
            .Borders(xlInsideVertical).Weight = xlThin
            .Borders(xlInsideHorizontal).Weight = xlThin
        End With
        '---
    For Ld = 3 To Lg
        Lf = Cells(Ld, "a").End(xlDown).Row
            If Lf >= Lg Then GoTo Fin
        '--- formules ---
        Cells(Lf, "m") = "=sum(m" & Ld & ":m" & Lf - 1 & ")"
        Cells(Lf, "m").AutoFill Destination:= _
        Range("h" & Lf & ":m" & Lf), Type:=xlFillDefault
        '--- bordurage ligne Sous-total ---
        With Range("c" & Lf & ":m" & Lf)
            .Interior.ColorIndex = 8                    'bleu turquoise
            .Borders(xlEdgeTop).Weight = xlMedium       'haut
            .Borders(xlEdgeBottom).Weight = xlMedium    'bas
        End With
        Ld = Lf
    Next Ld
Fin:
        '--- formules Totaux des Sous-totaux ---
    Range("h" & Lg) = "=SUMPRODUCT(($a$3:$a" & Lg - 1 & "<>"""")*(h3:h" & Lg - 1 & "))"
    Range("h" & Lg).AutoFill Destination:=Range("H" & Lg & ":M" & Lg), Type:=xlFillDefault
        '--- bordurage dernière ligne ---
        With Range("c" & Lg & ":m" & Lg)
            .Interior.ColorIndex = 6                    'jaune
            .Borders(xlEdgeTop).Weight = xlMedium       'haut
            .Borders(xlEdgeBottom).Weight = xlMedium    'bas
        End With
End Sub

édit: fichier et code modifié (oublie d'une ligne)

.Interior.ColorIndex = xlNone

Amicalement

Claude

Je reviens vers vous car cela fais une semaine que j'essai de me débrouiller sans vous ... mais cela est impossible désolé ...

Ce que vous avez fais est déjà excellent mais comme je le dis sur l autre poste j'ai des sous totaux de sous sections et ensuite je dois faire la somme des sous sections composant une section et enfin faire la somme global de chaque section pour avoir la somme globale. Il y a 3 niveaux de somme différente. Je vous joins un exemple avec plusieurs sections pour mieux comprendre.

Merci d'avance

Bonjour,

Je vois vaguement ce que tu souhaite

et te propose de repartir à zéro pour être sûr,

sans t'occuper des macros

1) remplis une feuille représentative bien formatée

2) mets les formules manuellement sur toute la feuille

au besoin ajoute des annotations explicatives.

On verra + clair !

Claude

Salut le forum

Claude, tu peux remplacer

       With Range("C2:M" & Lg)
            .Interior.ColorIndex = xlNone
            .Borders(xlEdgeLeft).Weight = xlMedium
            .Borders(xlEdgeTop).Weight = xlMedium
            .Borders(xlEdgeBottom).Weight = xlMedium
            .Borders(xlEdgeRight).Weight = xlMedium
            .Borders(xlInsideVertical).Weight = xlThin
            .Borders(xlInsideHorizontal).Weight = xlThin
        End With

Par simplement

With Range("C2:M" & Lg)
    .Interior.ColorIndex = xlNone
    .Borders.Weight = xlThin
    .BorderAround Weight:=xlMedium
End With

Mytå

Merci Mytå,

effectivement çà raccourci bien, je note

j'ajoute des annotations pour m'en souvenir.

    Lg = Range("d" & Rows.Count).End(xlUp).Row
    With Range("C2:M" & Lg)                 'plage
        .Borders.Weight = xlThin            'trait fin (orizontaux et verticaux)
        .BorderAround Weight:=xlMedium      'trait moyen (contour plage)
    End With

Claude

Voila en pièce jointe un exemple de tableau avec les formules et sans code pour repartir d'une base saine mais qui contient tous les sous totaux nécessaire.

Merci d'avance.

Bien cordialement

Thibaut

Bonjour,

Bon, j'ai vu pour les résultats à obtenir,

mais quand tu commence un nouveau devis, tu pars de quoi ?,

tu as une feuille "Modèle" ?

explique un peu comment çà se passe.

Amicalement

Claude

En faite je n'ai que les colonnes C a E quand je commence tout le reste c'est moi qui le rempli. Je rempli les colonnes F a H et les autres se calcules toutes seules. Je ne sais jamais à l'avance le nombre de partie, de ligne ou quoique ce soit...

La seule chose que je garde c'est les lignes 1 a 4 qui sont les lignes types tous le reste est vierge.

J'espère que les choses sont plus claire.

Merci beaucoup Claude de prendre autant de temps.

Très cordialement

Bonjour à tous,

Je regarde + précisément dans la journée et te fera une proposition,

c"est pas si simple !

Amicalement

Claude

Bonjour,

Je m'en rend compte de la complexité de ma demande ....

Merci déjà de m'aider.

Dans l'attente, sincères salutations

Thibaut

Bonsoir Thibaut, forum,

Tout çà me parait un peu scabreux, mais bon il faudra tester !

Plus de & ou &&, remplacés par une liste déroulante en colonne "A"

Bien lire le commentaire "Aide" en A1

Le code principal est dans le ThisWorkbook,

Pour un nouveau devis, tu peux copier l'onglet "Devis" et supprimer des lignes.

Je pense que le + simple serait de faire une feuille "Modèle" avec déjà

un "SousT" (sous total) et un "TotalG" (total groupe)

Dans les lignes totaux, attention à ce que tu mets en colonne "D"

à voir et à tester

Amicalement

Claude

Bonjour Claude,

Merci encore je n'ai pas encore pu tester avec d autre devis je le ferai lundi et te tiendrai informé.

En attendant cela répond parfaitement a ma demande. De manière plus simple !!

Merci beaucoup grace a cela je vais gagner un temps précieux et surtout arrêter de perdre du temps avec la création de somme ou de mise en page.

Rechercher des sujets similaires à "inserer totaux vba"