XL 2013 suppression de lignes = formules et plages modifiées

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Me re-voilà devant un problème que j'ai depuis très longtemps.
Jusqu'à maintenant, je m'étais "débrouillé" en modifiant par ci et par là LOL :confused:, mais aujourd'hui, mes fichiers importants m'obligent à chercher une vraie solution.

Voici le problème ( dans le fichier joint) :
Quand je supprime des lignes entre la ligne 3 et 100, ma formule et ma plage sont modifiées

Mes recherches
J'ai fait des recherches et j'ai vu qu'il était possible de "bloquer", par exemple F3 à F100
avec ".End(xlUp)" ou que la plage de calculs ou de base soit toujours la dernière ligne NON vide

Mais je n'ai pas trouvé comment "adapter" pour que ça marche.

Encore une fois, je fais appel à vous pour m'aider (pj fichier test)
Un grand merci pour m'avoir lu.
Amicalement,
Lionel,
 

Pièces jointes

  • Test Formules et plage.xlsm
    10.7 KB · Affichages: 32

Yurperqod

XLDnaute Occasionnel
Bonjour à tous

Est-ce que cette formule en F2 en remplacement de la tienne peut te convenir ?
=SOUS.TOTAL(9;F:F)/2

Et pour la plage nommée base, tu peux utiliser une macro qui recrée le nom
VB:
Sub MacroTest()
ActiveWorkbook.Names.Add Name:="base", RefersToR1C1:="=Feuil1!R3C6:R102C6"
End Sub
Il faut penser à remplacer Feuil1 par le vrai nom de la feuille.
 
Dernière édition:

Yurperqod

XLDnaute Occasionnel
Avec une formule, en cas de suppression de lignes , la référence des cellules change dans la plage nommée.
Voila une formule pour nommée une plage de manière dynamique
=DECALER(Feuil1!$F$3;0;0;NBVAL(Feuil1!$F$3:$F$102);1)

mais comme je disais, si on supprime des lignes, la référence change.

C'est pour ca que je suis passé par une macro pour nommer la plage.
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Merci pour ta gentillesse et pour ta volonté de m'aider.
Tu m'as déjà donné une formule qui fonctionne et c'est déjà beaucoup.

Concernant la définition de la plage, j'en ai tellement dans mon fichier que je préfère éviter les macros.
Je vais continuer à chercher une solution pour cela.
Amicalement,
Lionel,
 

Yurperqod

XLDnaute Occasionnel
Si vraiment tu veux utiliser End(xlUp) pour ta formule, il faut passer par une macro
VB:
Sub MacroTest3()
Dim Ligne As Long
Ligne = Cells(Rows.Count, "F").End(xlUp).Row
ActiveWorkbook.Names.Add Name:="base", RefersToR1C1:="=OFFSET(Feuil1!R3C6,0,0,COUNTA(Feuil1!R3C6:R" & Ligne & "C6),1)"
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 176
Messages
2 085 965
Membres
103 069
dernier inscrit
jujulop