XL 2010 RESOLU par tous : Somme colonne A à partir de A4

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Dans ma feuille, j'ai à supprimer régulièrement des lignes.

Résultats, mes formules et mes plages se modifient et cela me pose un problème quand j'ajoute des lignes qui ne sont plus prises en compte.

Mes colonnes ont des titres que 1,2 ou 3 lignes voir plus.
Est-il possible de faire une formule pour calculer la somme d'une colonne à partir de la cellule A4 par exemple ?

J'ai cherché sur le net, le forum et d'autres forum ..... j'ai pas trouvé.

Auriez-vous la solution ?
Avec mes remerciements,
Je vous souhaite un bon dimanche,
Amicalement,
Lionel,
 

Victor21

XLDnaute Barbatruc
Bonjour, arthour973.

Un p'tit fichier en illustration aurait aidé.
Cependant considérez que la somme des cellules de la colonne A à partir de A4 est égale à la somme des cellules de la colonne A dont on soustrait la somme des cellules A1,A2,A3.

Edit : Bonjour, Jean-Claude :)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Victor,
Bonjour JCGL,

En voilà un retour si rapide un dimanche LOL
Merci d'être là.

Je ne dois pas être bien Éveillé ce matin :confused: car à l'habitude, je joins toujours un fichier test.
Vous avez bien fait de me le signaler.
Le voici en pièce jointe en espérant être clair (pas sûr LOl).
Bon dimanche,
Amicalement,
Lionel,
 

Pièces jointes

  • test forum.xlsx
    9.8 KB · Affichages: 62

Dranreb

XLDnaute Barbatruc
Bonjour.
Une solution par fonction perso :
VB:
Option Explicit

Function PartantDe(ByVal Lig As Long, ByVal Col As Range) As Range
Set PartantDe = Col.Rows(Lig).Resize(Col.Rows.Count - Lig + 1)
End Function
Formule :
Code:
=SOMME(Partantde(5;J:J))
 

Dranreb

XLDnaute Barbatruc
L'inconvénient de ma fonction c'est qu'elle renvoie le restant des colonne entières.
Cette version non :
VB:
Option Explicit

Function PartantDe(ByVal Lig As Long, ByVal Col As Range) As Range
Set PartantDe = ColUti(Col.Rows(Lig))
End Function
'

Function ColUti(ByVal PlageDép As Range, Optional ByVal LMin As Long, Optional ByVal CMin As Long) As Range
Rem. Cherche la partie utilisée d'une colonne ou d'un groupe de colonnes, c'est à dire s'étendant jusqu'à la dernière ligne du tableau Excel
'        la contenant, à défaut jusqu'à la dernière cellule renseignée de plus qu'une chaîne vide.
'    PlageDép: Cellule(s) de départ. Seule la 1ère ligne spécifiée est prise en compte pour la déterminer, et suffit donc pour VBA.
'        Pour utilisation en formules, il est néanmoins nécessaire de spécifier la plage depuis celle ci jusqu'au reste des colonnes entières,
'        sinon Excel risque de ne pas détecter la nécessité d'une réévaluation de formule suite à un changement dans le restant non spécifié.
'    LMin: Mombre de lignes minimum à considérer même si tout est vide.
'    CMin: Mombre de colonnes minimum à considérer même si tout est vide.
Dim LO As ListObject: Set LO = PlageDép.ListObject
If LO Is Nothing Then
   Set ColUti = PlgUti(PlageDép, Intersect(PlageDép.Worksheet.UsedRange, PlageDép.EntireColumn), LMin, CMin)
Else
   Set ColUti = PlageDép.Resize(LO.ListRows.Count + PlageDép.Row - LO.DataBodyRange.Row): End If
End Function
'

Function PlgUti(ByVal PlageDép As Range, Optional ByVal PlagExam As Range = Nothing, _
   Optional ByVal LMin As Long, Optional ByVal CMin As Long) As Range
Rem. Cherche la partie utilisée d'une plage, c'est à dire celle qui s'étend jusqu'à la dernière cellule renseignée de plus qu'une chaîne vide.
'    PlageDép: Plage de départ. Seule la 1ère cellule spécifiée est prise en compte pour la déterminer, et suffit donc pour VBA.
'        Pour utilisation en formules, il est néanmoins nécessaire de spécifier la plage depuis celle ci jusqu'au reste des colonnes entières,
'        sinon Excel risque de ne pas détecter la nécessité d'une réévaluation de formule suite à un changement dans le restant non spécifié.
'    PlageExam: Plus grande plage susceptible de contenir la plage cherchée.
'        Facultatif: UsedRange assumé par défaut.
'    LMin: Mombre de lignes minimum à considérer même si tout est vide.
'    CMin: Mombre de colonnes minimum à considérer même si tout est vide.
Dim LMax As Long, CMax As Long, NbL As Long, NbC As Long
On Error GoTo RienTrouvé
If PlagExam Is Nothing Then Set PlagExam = PlageDép.Worksheet.UsedRange
LMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row
CMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByColumns, xlPrevious).Column
On Error GoTo 0
NbL = LMax - PlageDép.Row + 1: If NbL < LMin Then NbL = LMin
NbC = CMax - PlageDép.Column + 1: If NbC < CMin Then NbC = CMin
If NbL < 1 Or NbC < 1 Then GoTo CEstToutVide
Set PlgUti = PlageDép.Resize(NbL, NbC)
Exit Function
RienTrouvé: Resume CEstToutVide
CEstToutVide: Set PlgUti = Nothing
End Function
Oui, c'est à mettre en place dans un module standard, que j'appelle habituellement Utilit.
Mais après on peut s'en servir partout dans le classeur, dans les formules, les références de noms du classeur et toute programmation VBA. C'est vraiment pratique. Au point que je ne sais plus trop pourquoi je tends vaguement à faire en sorte de ne plus tellement en avoir besoin dans mes modules de service MClassement et ComboBoxLiées. Sans doute une influence des ListObject, ils en font en effet perdre tout intérêt…
 

Discussions similaires

Statistiques des forums

Discussions
312 756
Messages
2 091 729
Membres
105 058
dernier inscrit
axcelle