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 :

Grouper par trimestre automatiquement mais pour une année définie-VBA [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 49
    Par défaut Grouper par trimestre automatiquement mais pour une année définie-VBA
    Bonjour,

    Je souhaite grouper automatiquement les dates que j'ai en trimestre: J'ai des date allant de 2015 jusqu'en 2018.
    Je veux grouper en trimestre que les dates de 2017.
    Par exemple je vais avoir ce genre:
    <2017, Q1, Q2, Q3, Q4, >2017
    j'ai pu grouper tout automatiquement, mais la date automatique est par défaut la première date de ma liste donc 2015 et la dernière est 2018.
    alors dans ce cas je modifie le champ manuellement!

    Comment je peux faire? je veux pas la date automatique de defaut, mais comment choisir la date début :01/01/2017 et fin : 31/12/2017? je peux le faire manuellement mais j'ai bcp de tableaux, je préfère avec le code VBA

    voici le code que j'utilise:

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Sub CreatePivotTableCompte()
    'PURPOSE: Creates a brand new Pivot table on a new worksheet from data in the ActiveSheet
     
    Dim sht As Worksheet
    Dim pvtCache As PivotCache
    Dim pvt As PivotTable
    Dim StartPvt As String
    Dim SrcData As String
    Dim y As Workbook
     
    Set y = Workbooks.Open("Z:\Base_de_données\Base_Para.xlsx")
    'Determine the data range you want to pivot
      lastrow = y.Sheets("TbCrx").Range("C" & Rows.count).End(xlUp).Row
      SrcData = y.Sheets("TbCrx").Name & "!" & Range("B1:F" & lastrow).Address(ReferenceStyle:=xlR1C1)
     
    'Open a new worksheet
      Set sht = y.Sheets("Compte")
     
    'Where do you want Pivot Table to start?
      StartPvt = sht.Name & "!" & sht.Range("A3").Address(ReferenceStyle:=xlR1C1)
     
    'Create Pivot Cache from Source Data
      Set pvtCache = ActiveWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=SrcData)
     
    'Create Pivot table from Pivot Cache
      Set pvt = pvtCache.CreatePivotTable( _
        TableDestination:=StartPvt, _
        TableName:="PivotTable1")
     
     pvt.AddDataField pvt.PivotFields("Montant Final"), , xlSum
     pvt.AddDataField pvt.PivotFields("Montant Tarif"), , xlSum
      'Add item to the Column Labels
        pvt.PivotFields("M/Y").Orientation = xlColumnField
     
      'Add item to the Row Labels
        pvt.PivotFields("Compte").Orientation = xlRowField
     
      'Position Item in list
        pvt.PivotFields("M/Y").Position = 1
     
        sht.PivotTables("PivotTable1").PivotFields("Somme de Montant Final").Caption = ChrW(931) & "Mnt Final"
        sht.PivotTables("PivotTable1").PivotFields("Somme de Montant Tarif").Caption = ChrW(931) & "Tarif"
     
     
     'Group Date Field by Month and Year
     
    pvt.RowAxisLayout xlTabularRow
    Set df = pvt.PivotFields("M/Y")
    df.LabelRange.Group _
    'j'ai mis False car je veux pas la date automatique, mais comment choisir la date début :01/01/2017 et fin : 31/12/2017?
    Start:=False, End:=False, by:=3, Periods:=Array(False, False, False, False, False, True, False)
    df.Caption = "Trimestre"
     
    lastrow2 = y.Sheets("Compte").Range("A" & Rows.count).End(xlUp).Row
    y.Sheets("Compte").Range("B6:O" & lastrow2).Style = "Currency"
     
    Set sht = y.Sheets("Compte")
    sht.Range("B4:J4").replace What:="Trimestre", Replacement:="Q", _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
     
    y.Close savechanges:=True
    MsgBox ("Task Complete")
     
    End Sub
    merci d'avance pour vos aides!
    cheers!

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Je ne sais pas comment sont organisées tes données, mais si elles sont sous formes de listes tu peux carrément faire un TCD que tu filtre sur 2017 et où tu regroupes tes dates en trimestre (cela se fait tout seul et pas besoin de VBA)

    Dis nous comment sont organisées tes données et que contiennent-elles (c'est le type qui m'interesse car il faut respecter la confidentialité bien sûr).

    Eventuellement une capture d'écran par exemple si c'est possible

    A bientôt

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 49
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    Bonjour,

    Je ne sais pas comment sont organisées tes données, mais si elles sont sous formes de listes tu peux carrément faire un TCD que tu filtre sur 2017 et où tu regroupes tes dates en trimestre (cela se fait tout seul et pas besoin de VBA)

    Dis nous comment sont organisées tes données et que contiennent-elles (c'est le type qui m'interesse car il faut respecter la confidentialité bien sûr).

    Eventuellement une capture d'écran par exemple si c'est possible

    A bientôt
    Nom : Date.png
Affichages : 927
Taille : 28,9 Ko


    voila! date format dd/mm/yyyy et j'obtient automatiquement Q1 Q2 Q3 et Q4

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 49
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    Bonjour,

    Je ne sais pas comment sont organisées tes données, mais si elles sont sous formes de listes tu peux carrément faire un TCD que tu filtre sur 2017 et où tu regroupes tes dates en trimestre (cela se fait tout seul et pas besoin de VBA)

    Dis nous comment sont organisées tes données et que contiennent-elles (c'est le type qui m'interesse car il faut respecter la confidentialité bien sûr).

    Eventuellement une capture d'écran par exemple si c'est possible

    A bientôt
    et voici la date, j'utilise la colonne B: M/Y
    Nom : Date.png
Affichages : 901
Taille : 11,7 Ko

  5. #5
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Ok

    super !


    Questions subsidiaires :

    Est-ce que ta colonne B est une formule basée sur ta colonne A ?
    Et est-ce que ton deuxième tableau contient tes données sources ?

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 49
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    Ok

    super !


    Questions subsidiaires :

    Est-ce que ta colonne B est une formule basée sur ta colonne A ?
    Et est-ce que ton deuxième tableau contient tes données sources ?
    oui la colonne B est basé sur la colonne A:
    j'ai mis toutes les date de la colonne A en format mmm-yy mais sachant que la colonne B est initialisé au début du mois à chaque fois!
    par exemple si en A j'ai 23/01/2017 alors en B j'aurais Janv-17 (mais c'est 01/01/2017)
    j'étais obligé à faire ça pour grouper! sans ce changement rien ne se groupe automatiquement!

  7. #7
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    par exemple si en A j'ai 23/01/2017 alors en B j'aurais Janv-17 (mais c'est 01/01/2017)
    j'étais obligé à faire ça pour grouper! sans ce changement rien ne se groupe automatiquement!
    Je crois que la fonction standard de excel te permet de récupérer la date format mois/an : à insérer en colonne B
    =TEXTE(MOIS.DECALER(A2;0);"mmm aa")
    puis comme a recommandé Igloobel , un TCD avec des segments et tu aura le bonheur
    Bonne continuation

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 49
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    Bonjour


    Je crois que la fonction standard de excel te permet de récupérer la date format mois/an : à insérer en colonne B


    puis comme a recommandé Igloobel , un TCD avec des segments et tu aura le bonheur
    Bonne continuation
    merci, j’essaye de mettre cette formule dans les cellules de ma colonne: mais j'ai une erreur dans le code!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Dim y, lastrow, i, lastrow2
    Set y = Workbooks.Open("Z:\Base_de_données\Base_Para.xlsx")
    lastrow = y.Sheets("TbCrx").Range("C" & Rows.count).End(xlUp).Row
    For i = 2 To lastrow
    y.sheets("TbCrx").range("G" & i).formula= "=TEXTE(MOIS.DECALER(A2;0);"mmm-aa")"
    next i
    End Sub
    comment je peux faire pour insérer celle ci dans toute les cellule?
    il y a une erreur ici : y.sheets("TbCrx").range("G" & i).formula= "=TEXTE(MOIS.DECALER(A2;0);"mmm-aa")"

  9. #9
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Voici un exemple pour illustrer mes propos

    Groupement TCD.xlsx

    tu dis

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 49
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    Voici un exemple pour illustrer mes propos

    Groupement TCD.xlsx

    tu dis
    merci, mais déja j'arrive pas à inserer la fomule dans ma colonne!
    je ne comprends pas d'où vient l'erreur de syntax!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'y.sheets("TbCrx").Range("G" & i).Formula = "=TEXT(MONTH.OFFSET(A2,0),"mmm-aa")" 'marche pas
    'y.Sheets("RéfLbCopy").Range("M2:M" & lastrow).Formula = "=VLOOKUP($D2,Réf!A:D,4,FALSE)" 'celle la marche parfaitement
    y.sheets("TbCrx").Range("G" & i).Formula = "TEXTE(MOIS.DECALER(A2;0);"mmm-aa")"" marche pas

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 49
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    Bonjour


    Je crois que la fonction standard de excel te permet de récupérer la date format mois/an : à insérer en colonne B


    puis comme a recommandé Igloobel , un TCD avec des segments et tu aura le bonheur
    Bonne continuation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    y.sheets("TbCrx").Range("G" & i).Formula = "=TEXT(MONTH.OFFSET(A2,0),"mmm-aa")" 'erreur
    'y.Sheets("RéfLbCopy").Range("M2:M" & lastrow).Formula = "=VLOOKUP($D2,Réf!A:D,4,FALSE)" 'pas d'erreur
    y.sheets("TbCrx").Range("G" & i).Formula = "TEXTE(MOIS.DECALER(A2;0);"mmm-aa")" 'erreur
    c'est un peu bizarre! mdr pourquoi erreur de syntax? merci bien

  12. #12
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Dans une macro l'insertion d'une formule doit être en Anglais obligatoirement

    donc la ligne 3 ne peux fonctionner.

    je regarde ta ligne 1 et je reviens

  13. #13
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 49
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    Dans une macro l'insertion d'une formule doit être en Anglais obligatoirement

    donc la ligne 3 ne peux fonctionner.

    je regarde ta ligne 1 et je reviens
    d'accord merci bcp, j'ai traduit en anglais la formule et marche pas! bizarre!

  14. #14
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Je pense que tu te compliques la tâche inutilement

    ton "MOIS.DECALER(A2;0)" est la prise du mois encours donc "Mois(A2)" suffit

    de plus je ne vois pas l'interret car comme je te l'ai mis dans l'exemple que je t'ai posté le TCD regroupe par mois, Trimestre ... tout seul il lui suffit de la date que tu as en colonne A

    tu dis

  15. #15
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Si tu veux une date formater comme le propose BENNASR

    je te propose plutôt et tu peux même formater tes cellules directement : clic droit (Format de cellules - Personnalisée)

  16. #16
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonsoir
    Comme a indiqué Igloobel, =TEXTE(A2;"mmm aa") te suffit pour avoir le mois format date et tu peux comme ça faire le regroupement via TCD
    et pour avoir cette formule démarre l'enregistreur auto et tu aura ton code sur plateau
    Bonne continuation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/01/2010, 11h35
  2. [POO] Equivalent de getElementById mais pour une class ?
    Par boutmos dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 29/04/2008, 10h19
  3. Requete grouper par trimestre
    Par Beamish dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 05/10/2007, 09h48
  4. Réponses: 1
    Dernier message: 24/08/2006, 18h19
  5. grouper par trimestre
    Par lazzeroni dans le forum Oracle
    Réponses: 3
    Dernier message: 30/05/2006, 15h18

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