IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Sous total Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut Sous total Excel
    Bonjour,

    Je débute en VBA et je rencontre quelques soucis.
    J'ai une feuille avec des prix et je voudrais faire régulièrement des sous-totaux tout au long de la feuille à l'aide d'un bouton qui renvoit à une macro.
    Donc en appuyant sur le bouton, il faudrait qu'il recherche le sous-total précédent et ne somme que les cellules situées entre le sous-total précédent et le nouveau sous-total.

    J'ai essayé d'écrire une macro mais elle ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub MacroSousTotal()
     
    ActiveCell.Offset(0, 0).Select
         ActiveWorkbook.Names.Add Name:="stt", RefersToR1C1:=ActiveCell
         Range("AN1:BQ1").Select
         Selection.Copy
         Application.Goto Reference:="stt"
         ActiveCell.Offset(0, 0).Select
         ActiveSheet.Paste
         Application.CutCopyMode = False
     
    Ligne1 = ActiveCell.Row
     
    If ("stt" <> "SOUS TOTAL") And ("stt" <> "DESIGNATION") Then
        ActiveCell.Offset(-1, 0).Select
    Else
        If ("stt" = "SOUS TOTAL") Or ("stt" <> "DESIGNATION") Then
            ActiveCell.Offset(1, 0).Select
            Ligne2 = ActiveCell.Row
        End If
    End If
     
    Application.Goto Reference:="stt"
    ActiveCell.Offset(0, 8).Select
        Range(R[" & Ligne1 & "]C).Formula = "=SUM(R[" & Ligne2 & "]C:R[" & Ligne1 - 1 & "]C)"
     
    End sub
    Le problème se situe apparemment au niveau de la formule de somme
    Normalement je faire la somme dans plusieurs colonnes, mais je n'ai pas mis la fin du code vu que ca se répète.

    Et ils me disent "Attendu séparateur de liste ou )" pour l'intérieur de mes crochets mais je ne sais pas comment améliorer

    Si quelqu'un avait une idée pour m'aider, ça serait formidable
    Merci!

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour Ali, bienvenue sur le forum,
    J'ai essayé d'écrire une macro mais elle ne fonctionne pas.
    En effet, tes guillemets sont mal placés, en outre on ne peut pas désigner un range (une cellule ou une plage de cellules) ainsi

    Si je regarde tes "goto", Ligne1 est la ligne de stt puisque tu écris
    Application.Goto Reference:="stt"
    ...
    ...
    Ligne1 = ActiveCell.Row
    Donc, quand tu écris
    Range(R[" & Ligne1 & "]C).Formula =
    (ce qui ne veut rien dire en VBA) tu sembles vouloir écrire ta formule sur la ligne de stt ce qui n'a pour moi aucun sens. Peux-tu préciser ce que tu veux faire ?
    Tu écris également en début de code
    ActiveCell.Offset(0, 0).Select
    ActiveWorkbook.Names.Add Name:="stt", RefersToR1C1:=ActiveCell
    Très dangereux car où que tu te trouves dans la feuille, tu auras une cellule nommée "stt"
    L'enregistreur de macro utilise ReferstoR1C1 mais dans une macro, utilise RefersTo et désigne l'adresse de la cellule. Par exemple, pour nommer la cellule B19, utilise ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ActiveWorkbook.Names.Add Name:="stt", RefersTo:=Worksheets("feuil1").Range("B19")
    Pour le reste, je ne comprends pas.
    Le mieux serait que tu joignes ton fichier avec une seule feuille de calculs et que tu nous expliques ce que tu veux faire.
    Bon courage
    A+

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut
    Merci de la réponse rapide

    Je ne peux pas trop joindre le fichier car c'est pour le boulot, mais je vais essayer de t'expliquer ce que je veux faire.

    Le fichier que j'utilise sert à faire des prix, donc il y a des listes de "désignations" en colonne B et des prix dans les colonnes suivantes.
    Les désignations sont divisées en plusieurs parties qui sont à la suites les unes des autres dans la feuille, et pour chaque partie je voudrais mettre une ligne sous-total qui fait la somme dans certaines colonnes des cellules au dessus.
    La somme ne doit prendre en compte que les cellules de sa partie.
    C'est pourquoi dans la macro je voulais commencer par chercher le sous-total précédent pour créer une plage de cellule entre les 2 sous-totaux et ensuite faire la somme.

    Le problème est que le fichier est utilisée pour toutes les affaires et donc qu'il est très différent à chaque fois, c'est à dire que le nombre de lignes varie et l'emplacement des sous-totaux aussi.

    C'est pourquoi par exemple je ne connais pas l'adresse de la cellule "stt" à l'avance puisque ca va dépendre de la cellule que j'aurais sélectionnée avant de cliquer sur le bouton.

    En fait, je voudrais que la ligne de sous-total s'écrive sur la ligne de la cellule sélectionnée, chaque somme se faisant dans la colonne correspondante.

    Donc dans la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ActiveCell.Offset(0, 0).Select
         ActiveWorkbook.Names.Add Name:="stt", RefersToR1C1:=ActiveCell
         Range("AN1:BQ1").Select
         Selection.Copy
         Application.Goto Reference:="stt"
         ActiveCell.Offset(0, 0).Select
         ActiveSheet.Paste
         Application.CutCopyMode = False
     
    Ligne1 = ActiveCell.Row
    Je voulais nommer la cellule sélectionner pour ensuite pouvoir la retrouver
    Je copie une ligne vierge de sous-total qui est dans les cellules AN1:BQ1 de ma feuille vers la ligne de la cellule "stt"
    Et je donne un nom à la ligne (je pensais que ca serait plus facile pour jusqu'ou il faut sommer)

    Dans la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If ("stt" <> "SOUS TOTAL") And ("stt" <> "DESIGNATION") Then
        ActiveCell.Offset(-1, 0).Select
    Else
        If ("stt" = "SOUS TOTAL") Or ("stt" <> "DESIGNATION") Then
            ActiveCell.Offset(1, 0).Select
            Ligne2 = ActiveCell.Row
        End If
    End If
    Je voulais rechercher la cellule précédente qui s'appelle "SOUS TOTAL" (ou"DESIGNATION" si c'est le premier sous-total de la feuille) dans la colonne B, pour ensuite pouvoir sommer que les cellules entre les 2
    et je donne un nom à la ligne

    Et après.... C'est la que je voulais faire la somme (par exemple en colonne J, K et P) des cellules situées entre les 2 lignes
    Mais apparemment je n'écrit pas bien le range.
    Comment est ce que je peux l'écrire avec les adresses des cellules grace aux noms que j'ai donné? (Ou doivent etre placés les guillemets? J'ai regardé sur des forums mais tout se mélange un peu pour moi)

    Peux etre faut il que je créée une plage de données par exemple des cellules de la colonne J situées entre le sous-total précédent et le nouveau pour ensuite faire la somme de cette plage?

    Je ne sais pas si j'ai réussi à etre plus claire
    merci pour ton aide


    j'ai oublié de précisé qu'il y a actuellement une macro écrite dans un onglet et que j'essaie de transformer pour la mettre dans un module:
    SousTotal (t) Calcul et insertion d'un sous-total
    =ECRAN(FAUX)
    =SELECTIONNER("LC1") Copie de la ligne type de
    =COPIER(LIGNE_DU_SOUS_TOTAL) sous-total dans la ligne
    =INSERER(2) sélectionnée en l'insérant
    =SELECTIONNER("LC2")

    xy=(DECALER(CELLULE.ACTIVE();-1;8)) Boucle recherchant le
    =SELECTIONNER("l(-1)c") sous-total précédant
    a=SELECTION() pour automatiser la
    compteur= 0 somme
    =TANT.QUE(ET(a<>"sous total";a<>"DESIGNATION"))
    compteur= compteur + 1
    =SELECTIONNER("l(-1)c")
    a=SELECTION()
    =SUIVANT()
    yz=(DECALER(CELLULE.ACTIVE();1;8))
    =SELECTIONNER(DECALER(xy;1;0))

    =FORMULE("=SOMME(l(-1)c:l("&-compteur&")c)") Formule de somme

    =COPIER() Copie la somme dans
    =LIGNEH(3) les cellules
    =SELECTIONNER("LC(4)")
    =LIGNEH(9)
    =SELECTIONNER("LC;LC(9);LC(11):LC(20)")
    =COLLER()
    =ANNULER.COPIE()
    =SELECTIONNER("lc1")
    =DEFINIR.NOM("stt")
    =ECRAN(VRAI)
    =RETOUR()
    Je ne sais pas si ca aidera pour la compréhension

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    J'ai essayé de décripter ton code mais, sans le fichier, "je" suis incapable de comprendre ce que tu cherches à faire (hormis le fait que tu veux obtenir des sous-totaux sur plages de cellules... ce qui est un peu juste...)
    Si ton fichier a des données confidentielles, enregistre-le sous un autre nom, remplace les données confidentielles par fhjsdfhklf, mais sans lui je suis dans l'incapacité de te répondre.
    Désolé

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut
    J'ai mis une partie du fichier pour tenter d'etre plus claire

    Les lignes de sous-total ont été créées avec l'ancien code (sur l'onglet macro) que je n'ai pas fait.
    Je voudrais que ca donne la meme chose avec les nouveau code

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Où sont les valeurs à ajouter ?
    Quelle cellule, par exemple, nommes-tu stt ?
    A+

Discussions similaires

  1. [WD16] Sous-total Excel ole
    Par fasyr dans le forum WinDev
    Réponses: 0
    Dernier message: 10/11/2011, 15h25
  2. [AC-2007] sous total 9 comme excel est ce possible ?
    Par Debutant10 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 03/10/2011, 21h58
  3. Créer un sous total comme dans excel
    Par egbrooke dans le forum IHM
    Réponses: 2
    Dernier message: 28/09/2008, 23h14
  4. [EXCEL] Fonction sous.total
    Par repié dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 15/02/2006, 10h13
  5. [CR] Sous Total par page
    Par adrien_78 dans le forum SAP Crystal Reports
    Réponses: 16
    Dernier message: 19/01/2005, 12h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo