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 :

Somme.Si par trimestre en vba


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Somme.Si par trimestre en vba
    Bonjour,

    Merci de m'aider à trouver la solution. Je voudrais avoir le total de 2 colonnes par trimestre. Pour les mois c'est bon (code ci-dessous)
    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
    Sub essai_SommeSi_mois()
        Dim mois As Byte, An As Integer, derlig As Integer, NBd As Long
        Dim TotMoisD As Currency, TotMoisR As Currency
        Dim ShBd As Worksheet, ShSyn As Worksheet
        Dim c As Range, Ddate As Object, Cle, Période As String
        Application.ScreenUpdating = False
        'On Error Resume Next
        Set ShBd = Worksheets("BD")
        Set ShSyn = Worksheets("MaFeuille")
     
        NBd = ShBd.Cells(ShBd.Rows.Count, 1).End(xlUp).Row
        derlig = 6
        For An = Year(WorksheetFunction.Min(ShBd.Range("A2:A" & NBd))) To Year(WorksheetFunction.Max(ShBd.Range("A2:A" & NBd)))
     
            For mois = 1 To 12
                TotMoisR = WorksheetFunction.SumIfs(ShBd.Range("B2:B" & NBd), ShBd.Range("A2:A" & NBd), ">=" & mois & "/01/" & An, ShBd.Range("A2:A" & NBd), "<" & WorksheetFunction.EoMonth(mois & "/01/" & An, 0))
                TotMoisD = WorksheetFunction.SumIfs(ShBd.Range("c2:c" & NBd), ShBd.Range("A2:A" & NBd), ">=" & mois & "/01/" & An, ShBd.Range("A2:A" & NBd), "<" & WorksheetFunction.EoMonth(mois & "/01/" & An, 0))
                If TotMoisR <> 0 Or TotMoisD <> 0 Then
                    ShSyn.Cells(derlig, 1) = Format(CDate("01/" & mois & "/" & An), "mmmm yyyy")
                    ShSyn.Cells(derlig, 2) = TotMoisR
                    ShSyn.Cells(derlig, 3) = TotMoisD
                    derlig = derlig + 1
                End If
            Next mois
        Next An
    End Sub
    Merci beaucoup.

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    un trimestre équivalant à trois mois, il te suffit de changer les bornes de ta boucle For/Next (1 to 4 si les 4 trimestres) et avec un peu d'arithmétique de jouer sur ta variable mois

    dans tes lignes où tu calcules la date de début du mois et de fin de mois :
    - début trimestre = mois
    - fin trimestre = mois+3

    et si c'est une année complète à calculer, pas besoin de variable mois :

    T1 = mois "1" jusque fin mois "3"
    T2 = mois "4" jusque fin mois "6"
    etc...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup de m'avoir éclairé. C'est de ma faute, je n'ai pas précisé que je voulais trouver la syntaxe pour utiliser le trimestre.

    J'avais obtenu de bons résultats arithmétiquement comme tu me le suggères.

    J'ai trouvé sur le forum, comment avoir le trimestre d'une date--> Range("f1") = Year(Range("a6")) & " " & DatePart("q", Range("a6")).

    Mon objectif est non seulement d'obtenir le résultat escompté mais d'apprendre à manipuler les dates.

    Qui je l'avoue, pas bien assimilées. Et, par conséquent je n'ai pas réussi à utiliser dans la formule le trimestre "directement".

    Merci encore.

    Edit: même pour les mois, je n'avais pas réussi. et en consultant l'aide j'ai découvert la fonction EoMonth, j'ai donc borné entre le début du mois et la f1n du mois.
    Dernière modification par Invité ; 03/11/2018 à 14h08. Motif: Ajout des balises [C] ... [/C]

  4. #4
    Invité
    Invité(e)
    Par défaut
    dans tes lignes où tu calcules la date de début du mois et de fin de mois :
    - début trimestre = mois
    - fin trimestre = mois+3
    à vif, j'ai encaissé le coup mais ton arithmétique est une aberration
    un trimestre équivalant à trois mois
    mais 1+3=4, enfin de compte Ton trimestre n'a plus 3 mois mais 4. Le 4 c'est avril.

    Merci quand même.

    Je voulais juste dire quelque chose, à l'exception de quelques "Forumeurs" très gentils et sont là vraiment pour le partage.

    Il me semble que le forum c'est transformé au fil des ans en forum de grosses têtes qui prennent un malin plaisir à humilier les novices tels que moi.

    L'administrateur peut le vérifier, je consulte et poste de moins en moins (je sais ce n'est pas une grande perte).

    La notoriété fait perdre toutes valeurs.

    Bon, avant d'aller vaquer à mes occupations, je tenais à dire toute ma reconnaissant à MERCATOG qui m'a marqué par son humilité et sa modestie.

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    sauf erreur élémentaire de ma part, et mauvaise lecture de la façon dont tu calculais les choses
    si l'on doit extraire des éléments datés, admettons T1

    Debut T1 : 01/01/2017 INCLUS
    Fin T1 : 01/04/2017 EXLUS

    Chez moi, ça donne bien mois et mois+3 à utiliser dans une boucle pour balayer tous les trimestres
    avec les INCLUS et EXCLUS bien utilisés dans ta procédure initiale comme l'en attestent les deux opérateurs de comparaisons ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TotMoisR = WorksheetFunction.SumIfs(ShBd.Range("B2:B" & NBd), ShBd.Range("A2:A" & NBd), ">=" & mois & "/01/" & An, ShBd.Range("A2:A" & NBd), "<" & WorksheetFunction.EoMonth(mois & "/01/" & An, 0)
    seul le EoMonth n'est plus à utiliser ... sinon on utilises dans ce cas là mois et mois+2 mais je ne vois pas l'intérêt de surcharger le traitement avec une fonction alors qu'un basique 01/mois+3/annee se suffit à lui-même.

    Qui a un souci d'arithmétique, ou plutôt de logique ? Le débat est ouvert

    Mais ma participation s'arrête ici, surtout quand on vient nous bassiner avec des histoire de notoriété et j'en passe.
    Je suis pas là pour ça, et ma raison d'être sur ce forum n'est pas destinée à des posteurs qui réagissent comme toi

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour ton retour.

    Je ne voulais pas du tout cuit, enfin c'est l'expression qui très largement utilisée sur le forum.

    Je quémandais quelques infos quant à la manipulations des dates (avec par exemple somme.si ou mise en place d'autofiltres).

    Comme tu m'as présenté la chose, j'ai été déçu et frustré une fois de plus sur ce forum.

    Je n'aspire pas à devenir un développeur pro. Je n'en ai ni le temps, ni un haut niveau académique, ni l'âge pour remédier à mes grosses lacunes.

    C'est en quelque sorte une occupation ludique qui me plaît.

    Encore merci, mais svp arrêtez (pas toi personnellement, mais la communauté Developpez.com) à humilier les moins nantis intellectuellement.

    Sans aucunes rancunes mais beaucoup d'amertume. Je retourne à mon forum préféré où je n'ai jamais été humilié (ici ce n'est pas la 1ère fois).

    Je vous souhaite beaucoup de réussite.

    Cordialement,

  7. #7
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,

    il y a ce lien qui peut t'intéresser si tu ne l'as pas encore vu :
    Les Fonctions Date/Heure
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  8. #8
    Invité
    Invité(e)
    Par défaut
    Merci RuyAutodidacte,

    Ce document je ne l'ai pas seulement consulté, mais télécharger et imprimer.
    On est pas tous à la même enseigne, je veux par là intellectuellement.
    Pour certain les choses sont d'une limpidité éclatante, pour d'autres comme mon cas
    les choses le sont moins ou pas du tout. Sinon, on aurait été tous des 'Einstein'.

    Ce n'est que par politesse, que je te réponds car j'ai déjà demandé la suppression de mon compte.
    Au risque de me répéter, j'ai remarqué depuis un bout de temps qu'à chaque question posée,
    on te lorgne de haut. du genre: Ah,bon! tu ne connais pas ça! c'est le ba ba....etc
    'de la façon dont tu abordes le problème'..... et j'en passe.

    Merci c'est très gentil de ta part, mais cette communauté n'est pas pour moi.

    stp, ne te sens pas concerné.

    Sans racunes.

Discussions similaires

  1. Cumuler des Filtres par Selection en VBA ?
    Par Fredo67 dans le forum Access
    Réponses: 4
    Dernier message: 05/07/2006, 14h00
  2. grouper par trimestre
    Par lazzeroni dans le forum Oracle
    Réponses: 3
    Dernier message: 30/05/2006, 15h18
  3. [VBA-E] Comment créer un bouton ds une wksheet par un code vba
    Par moicwill dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/05/2006, 17h12
  4. Controle par requete en VBA
    Par Sam 069 dans le forum Access
    Réponses: 3
    Dernier message: 28/04/2006, 09h36
  5. Somme pluvio par mois
    Par Grégo_42 dans le forum Access
    Réponses: 5
    Dernier message: 05/02/2006, 15h54

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