Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rw&, v#, i&, x%
'hauteur du tableau = ligne de la dernière cellule non vide colonne 1
Rw = Cells(Rows.Count, 1).End(xlUp).Row
'si le tableau ne contient que 2 lignes sortir (puisque seulement ligne de titre et ligne total ?)
If Rw < 3 Then Exit Sub
'si ligne de titre changée ou colonne I ou plus ne rien faire (puisque géré par Worksheet_SelectionChange)
If Target.Row = Rw Or Target.Column > 8 Then Exit Sub
'pour chaque ligne du corps du tableau
For i = 2 To Rw - 1
'somme de la colonne
v = v + Cells(i, Target.Column)
Next i
'écrire la somme
Cells(Rw, Target.Column) = v
v = 0
'x = première colonne à compter / si x pair = 4 / si x impair = 3
x = 4 - Target.Column Mod 2
'pour adapter à différent cas de type et nombre de colonnes S et une première colonne utile variable :
'soit Typ (exemple S1-S4->Typ=4), NbC (exemple S1-S4 répété 5fois->NbC=5), tt = derniere colonne de 'titre' (exemple ce fichier tt = 2)
'x= ((target.column - tt) mod Typ) + tt
'pour chaque colonne de l'intervalle (1 sur 2)
For i = x To x + 4 Step 2
'dans le cas général remplacer par
'for i = x to x + (NbC-1)*Typ Step Typ
v = v + Cells(Target.Row, i)
Next i
Cells(Target.Row, x + 6) = v
'dans le cas général remplacer par
'Cells(Target.Row, x + NbC*Typ) = v
v = 0
For i = 2 To Rw - 1
v = v + Cells(i, x + 6)
'dans le cas général remplacer par
'v = v + Cells(i, x + NbC*Typ)
Next i
Cells(Rw, x + 6) = v
'dans le cas général remplacer par
'Cells(Rw, x + NbC*Typ) = v
End Sub