Faire un total sans sous-totaux
Résolu
Marie.Cherie
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
Marie.Cherie Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
Marie.Cherie Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
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 :
J'espère que vous aurez une solution à m'apporter
Faites jouer vos super pouvoirs !
Merci beaucoup
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
A voir également:
- Un total des totaux
- Total uninstall - Télécharger - Divers Utilitaires
- Formule total excel - Guide
- Total video converter - Télécharger - Conversion & Codecs
- Total av desabonnement ✓ - Forum Consommation & Internet
- Total bug caf - Guide
9 réponses
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
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
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".
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".
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
.
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
.
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
Dim f As String
f = "=SOMME.SI(A1:A20; ""<>"" & ""sous total"" ;D1:D20)"
Range("D24").FormulaLocal = f
Cdlmnt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
Alors cela m'affiche toujours VRAi..
Si je mets deux guillements : ""<>"", il me demande NOM?
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 !
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 !
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
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(...)
Cdlmnt
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
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
ç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
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 :
ou de
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,
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,
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
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
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