Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Additionner x lignes

  • Initiateur de la discussion Initiateur de la discussion YpoLipto
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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:
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 ?
 

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

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))
 
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.
 
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 !
 
Bonjour job75 🙂

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.

La macro que j'ai réalisé, par de la cellule active jusqu'à H8 et fait la somme, ceci pour les 3 colonnes.
 
Dernière édition:

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.
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
751
  • Question Question
Microsoft 365 macro vba sumifs
Réponses
5
Affichages
630
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…