Modifier somme si ligne supprimée

salut a tous

J'aurai besoin d'une petite aide.

j'ai un tableau sur excel. grace a ma macro, je peu faire la somme des éléments d'une colonne si :

  • ces montants sont> à 10000
  • ces montants sont entre 4 et 10 000
  • et si ces montants sont inférieurs a 4 000

Mais je beugue sur un point. je me demandais comment puis je faire pour que les sous totaux tiennent compte des suppressions de lignes.

je m'explique : une fois mon programme exécuté et que mon tableau tout fini et tout beau .

je serais amené à supprimer des lignes.

je me demandais comment faire pour que les sous totaux en tiennent compte?

Merci

Sub TrierEtSommeSI()
Worksheets("Feuil1").Range("A1").Sort Key1:=Worksheets("Feuil1").Columns("H"), order1:=xlDescending, Header:=xlGuess

' boucle

For i = 2 To 5000
If Range("H" & i).Value >= 10000 Then
        SommeSup = SommeSup + Range("H" & i).Value
        derniersup = i
    ElseIf Range("H" & i).Value >= 4000 And Range("H" & i).Value < 10000 Then
        SommeInf = SommeInf + Range("H" & i).Value
        dernierinf = i
    Else
        SommeReste = SommeReste + Range("H" & i).Value
    End If

Next

Range("H" & derniersup + 1).EntireRow.Insert
Range("G" & derniersup + 1).Value = "Total des retards >= 10 000"
Range("G" & derniersup + 1).Font.Bold = True
Range("G" & derniersup + 1).HorizontalAlignment = xlRight
Range("H" & derniersup + 1).Value = SommeSup
Range("H" & derniersup + 1).Font.Bold = True

Range("H" & dernierinf + 2).EntireRow.Insert
Range("G" & dernierinf + 2).Value = "Total des retards entre 4 000 et 10 000"
Range("G" & dernierinf + 2).Font.Bold = True
Range("G" & dernierinf + 2).HorizontalAlignment = xlRight
Range("H" & dernierinf + 2).Value = SommeInf
Range("H" & dernierinf + 2).Font.Bold = True

' me permets d'accéder à la dernière cellule non vide
Cells(Rows.Count, 7).End(xlUp).Offset(1).Select
Cells(Rows.Count, 7).End(xlUp).Offset(1).Value = "Total des retards < 4000"
Cells(Rows.Count, 7).End(xlUp).Font.Bold = True
Cells(Rows.Count, 7).End(xlUp).Offset(1).HorizontalAlignment = xlRight
Cells(Rows.Count, 8).End(xlUp).Offset(1).Value = SommeReste
Cells(Rows.Count, 8).End(xlUp).Font.Bold = True

End Sub

Merci de votre reponse

Bonjour fopinem,

C'est peut-être possible de le faire en recalculant ta somme à chaque fois qu'une ligne est effacée avec une procédure événementielle du type Worksheet_Change mais je crois que ça ralentirais ton classeur.

Tu peux aussi utiliser une formule matricielle pour calculer tes 3 différents sommes. De cette façon quand tu effaces une ligne, ça se recalcule automatiquement.

Dans ton cas, si tu veux que tes totaux apparaissent à 3 endroits spécifiques, c'est plus compliqué. Tu pourrais donc utiliser une macro pour déterminer où écrire tes totaux, combiner à une formule matricielle. (un peu compliqué à expliquer)

Voir exemple ci-joint : en B18:B20 se sont des formules matricielles. En D18:D20, les mêmes mais écrites par la macro TOTO. À adapter pour ton code.

16fopinem.zip (8.77 Ko)

c'est la premier fois que jentends parler des formules matricielles. et j'avoue jy comprends ier

mai je continue a faire des recherche la dessus

Merci kan meme

Salut le forum

En modifiant la façon de traiter le problème (J'ai pas mis la partie mise en forme du texte)

Sub Mise_en_Page()
Dim Lig As Integer
Dim Lig_Deb As Integer

Worksheets("Feuil1").Range("A1").Sort _
    Key1:=Worksheets("Feuil1").Columns("H"), _
    Order1:=xlDescending, Header:=xlGuess

' Boucle tant que pas vide
Lig = 2: Lig_Deb = Lig
    Do While Not IsEmpty(Cells(Lig, "H")) And Cells(Lig, "H") >= 10000
        Lig = Lig + 1
    Loop
        Cells(Lig, "H").EntireRow.Insert
        Cells(Lig, "H").Formula = "=SUM(R" & Lig_Deb & "C:R" & Lig - 1 & "C)"

Lig = Lig + 1: Lig_Deb = Lig
    Do While Not IsEmpty(Cells(Lig, "H")) And Cells(Lig, "H") >= 4000
        Lig = Lig + 1
    Loop
        Cells(Lig, "H").EntireRow.Insert
        Cells(Lig, "H").Formula = "=SUM(R" & Lig_Deb & "C:R" & Lig - 1 & "C)"

Lig = Lig + 1: Lig_Deb = Lig
    Do While Not IsEmpty(Cells(Lig, "H"))
        Lig = Lig + 1
    Loop
        Cells(Lig, "H").Formula = "=SUM(R" & Lig_Deb & "C:R" & Lig - 1 & "C)"

End Sub

Mytå

salut myta. ça marche nikel. merci.

mais je veux compendre la ligne

Cells(Lig, "H").Formula = "=SUM(R" & Lig_Deb & "C:R" & Lig - 1 & "C)"

c'est R pour Row et C pour column? c'est peut etre une question bebete

Merci bocoup

Re le forum

Pour des explications : Somme avec R1C1

Mytå

Rechercher des sujets similaires à "modifier somme ligne supprimee"