Additionner x lignes

YpoLipto

XLDnaute Nouveau
Bien le bonjour,

Je souhaiterais connaitre la réponse à un problème. Sachez que je suis très nul en macro, n'hésitez pas à me parler comme si j'avais 3 ans :)

Je récupère des données depuis un logiciel pro que je colle sur feuille Excel. Je lance ensuite une macro qui supprime automatiquement les lignes inutiles, ce qui me donne au final un tableau à N lignes. Ca peut être 8, ça peut être 250, tout dépend du nombre de lignes inutiles.

Je souhaiterais compléter ma macro avec une ligne (ou plusieurs) affichant, dans la cellule active, la somme des cellules depuis H8 jusqu'à la cellule active-1.

Merci d'avance.
 

Lone-wolf

XLDnaute Barbatruc
Bonjour YpoLipto et bienvenue sur XLD :)


Dim derlig As Long ' déclare la variable


Il faudra adapter le nom de la feuille ainsi que la colonne de calcul.

derlig = Feuil1.Range("a" & Rows.Count).End(xlUp).Row

Si possible dans la 1ère cellule(mais vide) : M1(par ex.) = WorkshetFunction.SubTotal(9, Range("k2:k" & derlig))

Si tu n'y arrive pas, joint le fichier sans données confidentielles.
 
Dernière édition:

YpoLipto

XLDnaute Nouveau
Bonjour YpoLipto et bienvenue sur XLD :)

Si possible dans la 1ère cellule: N1(par ex.) = WorkshetFunction.SubTotal(9, Range("k2:k65000"))

Salut Lone-wolf,

Merci beaucoup pour ton message de bienvenue et ta réponse.
Malheureusement j'ai riennn capté, désolé :(
Peut être que je n'ai pas été clair dans l'énoncé, ce qui est fort probable (compliqué de parler d'un sujet qu'on ne maîtrise pas du tout)

A la fin de ma macro je me place dans une cellule qui va varier en fonction du nombre de lignes dans mon tableau, du coup la fin de ma macro ressemble à ça :

Range("A7").Select
Selection.End(xlDown).Select
Selection.End(xlToRight).Select

Ce bout de "code" me permet de me placer sur la cellule dans laquelle j'aimerais voir s'afficher la somme de toutes les valeurs au-dessus et ce, jusqu'à la cellule H8 (H8 c'est une constante, la ligne 7 étant la ligne d'en-têtes de mon tableau).

Y a-t-il un moyen simple d'y arriver ?
 

YpoLipto

XLDnaute Nouveau
Bonjour YpoLipto et bienvenue sur XLD :)


Dim derlig As Long ' déclare la variable


Il faudra adapter le nom de la feuille ainsi que la colonne de calcul.

derlig = Feuil1.Range("a" & Rows.Count).End(xlUp).Row

Si possible dans la 1ère cellule(mais vide) : M1(par ex.) = WorkshetFunction.SubTotal(9, Range("k2:k" & derlig))

Si tu n'y arrive pas, joint le fichier sans données confidentielles.

Merci de ta patience !

Je te joins le tableau mis en forme après exécution de ma macro.
Les totaux en bas sont faux puisque issus du tableau avant suppression de plusieurs lignes. Le petit bout de macro que j'ai laissé me permet de me situer sur la cellule où j'aimerais que s'affiche la "vraie" somme.
Mais ensuite pour lancer l'addition jusqu'à H8, je ne sais pas faire, je patauge...
 

Pièces jointes

  • Tableau.xlsm
    36.4 KB · Affichages: 25

Lone-wolf

XLDnaute Barbatruc
Re

Si tu met le fichier(comme je l'ai dit avant), ça serait plus simple. Mais si to tableau commence en ligne 7, et bien dans la macro tu met

Dim derlig As Long
derlig = Feuil1.Range("a" & Rows.Count).End(xlUp).Row

Range("h6") = = WorkshetFunction.SubTotal(9, Range("h8:h" & derlig))
 

YpoLipto

XLDnaute Nouveau
Re

Ton fichier en retour. Les totaux sont en couleurs pour chaque colonne. Pas besoin de macro, mais juste une formule.

Ok merci encore pour ta patience mais malheureusement cette solution ne m'avance absolument pas... :'(
Le calcul doit se faire automatiquement après le travail de mise en forme en fonction du nombre de lignes restant dans mon tableau et doit s'afficher en bas de celui-ci.
En fait je veux juste demander (poliment bien sûr) à excel "additionne moi toutes les cellules au dessus de la cellule active, jusqu'a la cellule H8". Ca me paraît tout bête mais je ne connais pas de commande demandant d'additionner une plage de cellules variables.
 

job75

XLDnaute Barbatruc
Bonjour YpoLipto, Lone-wolf,

Si la dernière ligne est repérée par le mot "TOTAUX" en colonne A c'est facile :
Code:
Sub Addition()
Dim c As Range
Set c = [A:A].Find("TOTAUX", , xlValues, xlWhole)
If c Is Nothing Then MsgBox "TOTAUX n'existe pas en colonne A...": Exit Sub
Union(c(1, 8), c(1, 10), c(1, 12)) = "=SUM(H8:H" & c.Row - 1 & ")"
Range(c(1, 8), c(1, 12)) = Range(c(1, 8), c(1, 12)).Value 'facultatif, supprime les formules
End Sub
On peut laisser les formules pour vérifier ou les supprimer comme indiqué.

A+
 

YpoLipto

XLDnaute Nouveau
Bonjour YpoLipto, Lone-wolf,

Si la dernière ligne est repérée par le mot "TOTAUX" en colonne A c'est facile :
Code:
Sub Addition()
Dim c As Range
Set c = [A:A].Find("TOTAUX", , xlValues, xlWhole)
If c Is Nothing Then MsgBox "TOTAUX n'existe pas en colonne A...": Exit Sub
Union(c(1, 8), c(1, 10), c(1, 12)) = "=SUM(H8:H" & c.Row - 1 & ")"
Range(c(1, 8), c(1, 12)) = Range(c(1, 8), c(1, 12)).Value 'facultatif, supprime les formules
End Sub
On peut laisser les formules pour vérifier ou les supprimer comme indiqué.

A+

Salut job75,

Merci beaucoup ça fonctionne parfaitement !
Bon, cette solution dépasse de loin mes compétences et je ne pourrai pas la réutiliser mais pas grave, au moins mon problème est réglé ;)

Merci aussi Lone-wolf pour le temps que tu as passé sur mon cas, c'est vraiment sympa !
 

YpoLipto

XLDnaute Nouveau
Bonjour job75 :)



La macro que j'ai réalisé, par de la cellule active jusqu'à H8 et fait la somme, ceci pour les 3 colonnes. Mais je n'avais pas compris que tu voulais faire la somme totale des 3 colonnes, d'après ce que montre job75.

Non non c'était bien la somme colonne par colonne, pas une somme totale des trois. Avec la macro de job75 j'ai bien une somme en bas de chaque colonne, qui remplace les "fausses" sommes.
Merci encore pour tes nombreuses tentatives en tout cas. Je n'ai sûrement pas été assez précis dans ma demande.
 

job75

XLDnaute Barbatruc
Re,

Maintenant si le mot "TOTAUX" n'existe pas en colonne A il suffit de l'ajouter :
Code:
Sub Totaux_Addition()
Dim c As Range
Set c = [A:A].Find("TOTAUX", , xlValues, xlWhole)
If c Is Nothing Then Set c = [A:A].Find("*", SearchDirection:=xlPrevious)(2): c = "TOTAUX"
Union(c(1, 8), c(1, 10), c(1, 12)) = "=SUM(H8:H" & c.Row - 1 & ")"
Range(c(1, 8), c(1, 12)) = Range(c(1, 8), c(1, 12)).Value 'facultatif, supprime les formules
End Sub
A+
 

Discussions similaires

Réponses
12
Affichages
638

Statistiques des forums

Discussions
314 095
Messages
2 105 817
Membres
109 436
dernier inscrit
alex.972