Faire un total sans sous-totaux

Résolu
Marie.Cherie Messages postés 9 Statut Membre -  
Marie.Cherie Messages postés 9 Statut Membre -
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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Marie.Cherie Messages postés 9 Statut Membre
       
      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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Marie.Cherie Messages postés 9 Statut Membre
       
      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
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Marie.Cherie Messages postés 9 Statut Membre
       
      J'ai deja essayé cela, mais il n'en veut pas.
      Dans ce cas, il me met une erreur.
      0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Sur celui ci, ça fonctionne
    http://www.cjoint.com/c/GDEsN5pVfs8
    0
    1. Marie.Cherie Messages postés 9 Statut Membre
       
      Je l'ai appliqué;
      Sur ma macro, ca affiche VRAI, et pas la valeur.
      C'est dû à un réglage ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Marie.Cherie Messages postés 9 Statut Membre
       
      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
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Marie.Cherie Messages postés 9 Statut Membre
       
      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
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Marie.Cherie Messages postés 9 Statut Membre
       
      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
  9. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  10. Marie.Cherie Messages postés 9 Statut Membre
     
    Tu es mon héros !

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