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 SubMerci 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.
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 SubMytå
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