Faire un total sans sous-totaux

Résolu/Fermé
Marie.Cherie Messages postés 9 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 2 mai 2017 - 30 avril 2017 à 14:48
Marie.Cherie Messages postés 9 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 2 mai 2017 - 2 mai 2017 à 17:02
Bonjour à tous,

Je vous expose mon problème :

Je souhaite faire un total de la colonne I, en excluant les lignes de sous-total.
J'ai utilisé plusieurs formules, mais je n'obtiens jamais le résultat jusque là.
Voici mon Code :
ThisWorkbook.Sheets("basequantitatif").Activate
Range("base_totbac").Select
Selection.Copy
ThisWorkbook.Sheets("Estimatif BAC").Activate
ActiveSheet.Paste
ActiveCell.Offset(0, 0).Select
ActiveCell.Offset(0, 8).Formula = "=WorksheetFunction.SumIf(Range(B6:B800), " <> " & ""sous total"", Range(I6:I800)) "
ActiveCell.Offset(1, 0).Select


J'espère que vous aurez une solution à m'apporter

Faites jouer vos super pouvoirs !

Merci beaucoup

9 réponses

ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
30 avril 2017 à 17:59
Bonjour

Pourquoi ne pas utiliser plutôt la fonction sous.total ?
- en renvoyant la formule
Range("B22").FormulaLocal = "=SOUS.TOTAL(9;B1:B20)"
- en renvoyant la valeur
Range("B24").Value = Application.WorksheetFunction.Subtotal(9, Range("B1:B20"))

http://www.cjoint.com/c/GDEp6qcQ8D8

Cdlmnt
0
Marie.Cherie Messages postés 9 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 2 mai 2017
30 avril 2017 à 18:41
Je te remercie pour ta reponse ccm81.

C'est que ma macro ne contient pas de fonction sous total, en fait il s'agit simplement d'une ligne qui vient s'ajouter si plusieurs éléments identiques se suivent.

C'est pourquoi j'ai utilisé la fonction sumif, pour qu'il utilise en critère le texte.

Est ce que la macro entière t'aiderai à mieux me comprendre ?

Merci encore
0
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
30 avril 2017 à 19:12
Peux tu envoyer la partie concernée de ton fichier,sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu
1) Tu vas dans https://www.cjoint.com/
2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
en bleu souligné ; tu le sélectionnes et tu fais "Copier"
5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse
tu fais "Coller".
0
Marie.Cherie Messages postés 9 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 2 mai 2017
30 avril 2017 à 20:32
Je me sens pas trop de couper ma macro, je te l'envoie. Il s'agit de la feuille estimatif et la macro estimatif, tu ne peux pas te tromper !
J'ai mis un petit code couleur pour te signaler les éléments en question.
Cette feuille importe les éléments à partir d'autres feuilles que je t'ai mises si tu veux la lancer

http://www.cjoint.com/c/GDEsFHPX6du

Par ailleurs dans la macro, il doit bien y avoir quelques petites choses qui ne vont pas, je suis novice dans ce domaine, j'apprends encore
.
0
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
30 avril 2017 à 20:29
Essaies peut être quelque chose comme ceci

Dim f As String
f = "=SOMME.SI(A1:A20; ""<>"" & ""sous total"" ;D1:D20)"
Range("D24").FormulaLocal = f

Cdlmnt
0
Marie.Cherie Messages postés 9 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 2 mai 2017
30 avril 2017 à 20:34
J'ai deja essayé cela, mais il n'en veut pas.
Dans ce cas, il me met une erreur.
0
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
30 avril 2017 à 20:40
Sur celui ci, ça fonctionne
http://www.cjoint.com/c/GDEsN5pVfs8
0
Marie.Cherie Messages postés 9 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 2 mai 2017
30 avril 2017 à 21:17
Je l'ai appliqué;
Sur ma macro, ca affiche VRAI, et pas la valeur.
C'est dû à un réglage ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
Modifié le 30 avril 2017 à 21:42
Essaies ceci avec ta macro

Dim f As String
f = "=sumif(B6:B800, ""<>"" & ""sous total"", I6:I800)"
ActiveCell.Offset(0, 8).Formula = f

http://www.cjoint.com/c/GDEtLieeNc8

RQ. Vérifies que dans ta feuille le mot "sous total" est bien écrit sans espace devant et derrière

Cdlmnt
0
Marie.Cherie Messages postés 9 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 2 mai 2017
30 avril 2017 à 21:54
Alors cela m'affiche toujours VRAi..
Si je mets deux guillements : ""<>"", il me demande NOM?

ThisWorkbook.Sheets("basequantitatif").Activate
Range("base_totbac").Select
Selection.Copy
ThisWorkbook.Sheets("Estimatif BAC").Activate
ActiveSheet.Paste
ActiveCell.Offset(0, 0).Select
Dim tst As String
tst = "=WorksheetFunction.SumIf(Range(B6:B800), " <> " & ""sous total"", Range(I6:I800)) * 2.5"
ActiveCell.Offset(0, 8).Formula = tst


Je dois t'avouer que je ne comprends pas vraiment ce que signifie ce VRAI, je pensai qu'avec .Formula, il affichait la valeur.

Merci Encore pour ton aide et ton temps !
0
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
Modifié le 1 mai 2017 à 15:41
1. je pensai qu'avec .Formula, il affichait la valeur.
non ! .Formula renvoie une formule excel
dans ce code f est une formule, en fait le texte (type string) de la formule qui sera inscrite dans la cellule excel
Dim f As String
f = "=sumif(B6:B800, ""<>"" & ""sous total"", I6:I800)"
ActiveCell.Offset(0, 8).Formula = f

2. Si tu veux renvoyer une valeur, c'est .Value qui te faut utiliser, et le code n'est plus le même.
Application.WorksheetFunction.SumIf fait appel à la fonction excel SOMME.SI et utilise les plages "vba" Range(...)
tst = Application.WorksheetFunction.SumIf(Range("B6:A800"), "<>" & "sous total", Range("I6:I800")) * 2.5 
ActiveCell.Offset(0, 8).Value = tst

Cdlmnt
0
Marie.Cherie Messages postés 9 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 2 mai 2017
1 mai 2017 à 21:36
Bonjour ccm81,
Ta dernière solution me donne un résultat 0.00, jusque là j'utilisai .Formula dans mes lignes de code, et c'est la premiere fois que ça refuse de calculer.
0
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
Modifié le 1 mai 2017 à 22:20
Ta dernière solution me donne un résultat 0.00, jusque là j'utilisai .Formula dans mes lignes de code, et c'est la premiere fois que ça refuse de calculer.
ça ne refuse pas de calculer puisque tu trouves 0.00, par contre, il doit y avoir un problème ailleurs

Mon exemple avec tes plages (version formule et version valeur)
http://www.cjoint.com/c/GEburaEm1e8

Cdlmnt
0
Marie.Cherie Messages postés 9 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 2 mai 2017
Modifié le 2 mai 2017 à 13:49
Salut ccm81,
Je pense que l'erreur vient du fait qu'il cherche la valeur de la cellule ù doit s'afficher le total, aussi que penses tu de :
ActiveCell.Offset(0, 8).Formula = "= Sum(I7:ActiveCell.Row - 1) - SumIf(B7:ActiveCell.Row-1,""sous total"",I7:ActiveCell.Row-1)"


ou de
ActiveCell.Offset(0, 8).FormulaR1C1 = "=Sum(R" & 7 & "C:R" & ActiveCell.Row - 1 & "C) - SumIf(C[-6]:R" & 7 & "C,""sous total"",R" & 7 & "C:R" & ActiveCell.Row - 1 & "C)"


Le souci est que ça rest 0.00, je ne sais pas d'où vient le problème. Lorsque je sépare les formules, elles se calculent très bien. Mais impossible jusque là de les assembler

En te remerciant pour ton retour,
0
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
Modifié le 2 mai 2017 à 14:46
1. Il y a déjà un problème ici
Sum(I7:ActiveCell.Row - 1)
I7:ActiveCell.Row - 1 ne définit pas une plage (il manque la colonne après le ":"

2. J'ai trouvé ton fichier plus haut (évites de répondre en Commentaire, ça ne met pas le message en fin de post )
J'ai essayé de comprendre ce que tu veux faire
Pour des raisons de taille de fichier, le fichier joint ci-dessous, ne contient QUE la feuille Estimatif BAC sans ses formules
http://www.cjoint.com/c/GEcmHlCNvQ8
J'ai choisi le double clic pour lancer la macro, mais on peut la lancer autrement bien sûr
Pour tester, tu insères des lignes avant la ligne total puis clic-clic sur la cellule total, tu devrais voir la formule évoluer
Si ça te convient, il te suffit de copier la macro dans le module de la feuille Estimatif BAC de ton fichier
Sinon, il faudra expliquer davantage

3. RQ. Tu peux quand même te passer de macro, il suffit de garder une ligne vide de service avant la ligne total (ici garder la ligne 83 vide) et d'insérer des lignes avant celle ci, la formule suivra.

Cdlmnt
0
Marie.Cherie Messages postés 9 Date d'inscription dimanche 30 avril 2017 Statut Membre Dernière intervention 2 mai 2017
2 mai 2017 à 17:02
Tu es mon héros !

Problème résolu, je te remercie énormément !
Je n'aurai pas pensé à cela.
0