[Excel-VBA] Formule et plage de dimension variable

Bonjour,

Je ne parviens pas à créer mes formules qui se présentent comme suit:

=SOMME(D4:D18)-E19
et
=SOMME.SI(E4:E18;">0";E4:E18)

Le nombre de lignes du tableau peut augmenter par l’intermédiaire d’une macro qui insère 3 lignes entre la fin du tableau et la ligne de résultat.

en insérant les lignes SANS la macro, la formule se modifie (E18 devient E21 par ex)
en insérant les ligne AVEC la macro, la formule reste telle quelle

j’aimerai taper la formule de cette façon:

=SOMME(D4:Cells.Find(“Total”).Offset(0, -1))
(plage D4 jusqu’à la cellule à droite de la cellule marquée “Total”)

biensur Cells.Find("Total").Offset(0, -1) ne fonctionne que dans visual basic.

Comment puis-je faire svp (en vba ou en excel peu importe ?)

Solution excel :
Nommer la zone à sommer (ex : ZS)
La première formule devient alors
=Somme(ZS) - E19

Solution VBA :
Cells.find fonctionne, la somme peut se faire de la manière suivante :
s=Application.WorksheetFunction.Sum(Range("D4:"&Cells.Find("Total").Offset(0,1).Address))

Me revoilà

merci gcc de ta réponse.

pour ta solution “excel” cela ne fonctionne pas car la plage ne s’agrandit pas lorsque j’ajoute des lignes avec la macro.

Donc j’ai trouvé la solution qui est:

=SOMME(D4:INDEX(D1:D106;EQUIV("Total : ";C1:C106;0)-1;))-INDEX(E1:E106;EQUIV("Total : ";C1:C106;0);)

Index (plage de travail; n° de ligne; n° de colonne) —> = une cellule
le numéro de colonne n’est pas renseigné dans le cas d’une plage sur une seule colonne --> champ vide après le dernier “;”

INDEX(D1:D106;EQUIV("Total : ";C1:C106;0)-1;)

Equiv (valeur recherchée; quelle plage; type de recherche) —> n° de ligne
le type de recherche est 0 car je recherche une valeur exacte

voilà et maintenant tout marche :sol:

Si, ca fonctionne, mais à condition de rajouter A L’INTERIEUR de la zone nommée
Dans ton cas, tu dois rajouter juste en dessous, ce qui fait que ca ne marche pas. Il faudrait alors redifinir le nom pour la plage ancienne zone union plage insérée.

Mais ta solution est tout aussi valable bien que j’aie du mal à voir comment elle répond aux critères énoncés dans le problème (en particulier le somme.si)

pour le somme.si j’ai utilisé la même méthode

=SOMME.SI(E4:E18;">0";E4:E18)

=SOMME.SI(E4:INDEX(E4:E106;EQUIV("Total : ";C4:C106;0)-1;);">0";E4:INDEX(E4:E106;EQUIV("Total : ";C1:C106;0)-1;))

E18 = INDEX(E4:E106;EQUIV("Total : ";C4:C106;0)-1;)

effectivement ! :super: