[VBA] Problème groupement de date

  • Initiateur de la discussion Initiateur de la discussion Jarzet
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Jarzet

XLDnaute Nouveau
Salut à tous,

Je suis en ce moment entrain de créer des Tableaux Croisés Dynamiques avec des macros, tous se passe au début mais vers la fin du macro il bloque. Cette étape qui bloque permet au tableau de grouper des dates par années puis par mois en montrant le nombre de formulaires remplies par mois.

Voila l'erreur et le code.
Macro1.PNG

Code:
Sub Test2()
    Dim PTcache As PivotCache
    Dim PT1 As PivotTable
    'Dim ptField As PivotField
    'Dim rPTRange As Range
    
    
    Set PTcache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Réponses")
    
    Set PT1 = ActiveSheet.PivotTables.Add(PivotCache:=PTcache, TableDestination:="Tableaux!R6C8", TableName:="TCD_NbFormulairesRempliesMois")
    
    With PT1
        .PivotFields("Horodateur").Orientation = xlRowField
    End With
    
    With PT1
        .PivotFields("Horodateur").Orientation = xlDataField
    End With
    
    PT1.CompactLayoutRowHeader = "Horodateur"
    
    PT1.DataPivotField.PivotItems("Nombre de Horodateur").Caption = "Nombre de formulaires remplies par années puis par mois"
    
    With PT1
        .ColumnGrand = False
        .RowGrand = False
    End With
    
    PT1.PivotFields("Horodateur").PivotFilters.Add Type:=xlValueDoesNotEqual, DataField:=PT1.PivotFields("Nombre de formulaires remplies par années puis par mois"), Value1:=0
    
    With PT1.PivotFields("Horodateur")
        .DataRange.Cells(6, 8).Group Start:=True, End:=True, Periods:=Array(False, False, False, False, True, False, True)
    End With
    
    'Set ptField = PT1.RowFields("Horodateur")
    'Set rPTRange = ptField.DataRange.Cells(6, 8)
    
    'rPTRange.Group Start:=True, End:=True, By:=False, Periods:=Array(False, False, False, False, True, False, True)
    
    PT1.TableStyle2 = "PivotStyleMedium3"
    
    PT1.ShowTableStyleRowStripes = True
    
    PT1.ShowTableStyleColumnStripes = True
    
End Sub

Vous pouvez remarquer que j'ai fait plusieurs tentatives mais j'en ai laissé peu.

Merci d'avance
 
Re : [VBA] Problème groupement de date

Bonjour.
Il ne faut pas escamoter par flemme inconsciente le conseil de la charte de joindre un fichier, parce qu'en fait ce n'est pas un conseil mais une nécessité absolue et incontournable.
Cela dit, personnellement, quitte à utiliser VBA, je préfère carrément sortir le rapport avec, et pas un TCD qui le produit un peu différemment de ce qu'on voudrait réellement.
Mais il me faudrait un fichier pour tester ça.
 
Re : [VBA] Problème groupement de date

Salut,

Désolé Dranreb pour ne pas avoir inclus le fichier mais c'est la première fois que j'utilise ce site et aussi je suis en stage et je ne peux pas fournir le excel avec toute les données qui sont enregistrées dedans, elles sont confidentielles.

Chris, oui le groupement manuel fonctionne très bien.

Merci de votre réponse 🙂
 
Re : [VBA] Problème groupement de date

Bonjour

Cela confirme que le code VBA est en cause.

Il est très facile d'anonymiser des données : remplacer par cherche et remplace telle lettre par telle autre,et limiter à une dizaine de ligne, suffit à vérifier ce qui pose problème.
 
Re : [VBA] Problème groupement de date

Bonjour.
Il ne s'agit pas de fournir le classeur réel. D'ailleurs souvent il est trop gros et de plus c'est même légalement interdit. Juste un modèle de quelques lignes dans les feuilles impliquées, reproduisant toutefois la vraie structure des données et des résultats souhaités.
 
Re : [VBA] Problème groupement de date

Comme dit au poste #2:
personnellement, quitte à utiliser VBA, je préfère carrément sortir le rapport avec, et pas un TCD qui le produit un peu différemment de ce qu'on voudrait réellement.
Je n'utilise pas pour ma part les TCD. Il s'en suit que je ne les connais pour ainsi dire pas, voire que les dialogues pour en mettre m'agacent fortement. Vous aussi un peu je suppose puis que vous voudriez passer par VBA pour ne plus avoir à vous en occuper. Vous comprendrez que je peux encore moins déduire le résultat que vous attendez d'un TCD qu'un code qui ne marche pas tente d'installer !
 
Dernière édition:
Re : [VBA] Problème groupement de date

Personnellement je VEUX et DOIS utiliser du TCD et là n'est pas le problème dans le premier poste que j'ai mit.
Non le seul problème qu'il y a c'est qu'une partie du code pour automatiser une partie de la création du TCD (c'est à dire trier par années puis par mois) ne fonctionne pas et m'afficher un message d'erreur quand je l'essais.
Le macro où se trouve ce bout de code se nomme "TCD_NbFormulairesRempliesMois()" et les partie du code sont en commentaire (vert) pour le moment.
Je n'ai aucun problème pour créer des TCD et je n'utilise VBA en aucun cas pour ne plus avoir a m'en occuper mais pour rendre plus accessible les différents TCD que je dois créer avec des systèmes de boutons.
 
Re : [VBA] Problème groupement de date

Bonjour


Pour groupe sur horodateur il faudrait que le champ existe dans le TCD, ce qui n'est pas le cas.

Si on le place sous le champ centrale en gardant le TCD en disposition compactée, la première date occupe la ligne 2 et la colonne 1 du DataRange (ton cells(6,8) donne l'angle du TCD pas une cellule du DataRange)

Code:
        With PT1.PivotFields("Horodateur")
        .DataRange.Cells(2, 1).Group Start:=True, End:=True, Periods:=Array(False, False, False, False, True, False, True)
        End With

devrait marcher.
 
Re : [VBA] Problème groupement de date

Re

Quand tu indiques une adresse, dans le datarange il faut considérer que celui-ci a des lignes et colonnes, comme toute plage mais que celles-ci n'ont pas les coordonnées de la feuille Excel : l'ange démarre à cells(1,1) indépendamment de la place du TCD sur la feuille.

Donc si tu as Centrale et Horodateur dans le même colonne (dispo compactée) ils partagent la même plage datarange (entre le titre de la colonne du TCD et la ligne de total) : la cells(1,1) est donc la 1ère valeur de centrale et la cells(2,1) la seconde ligne donc la 1ère date qu'il faut donc grouper.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
371
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
280
Réponses
3
Affichages
546
Réponses
3
Affichages
251
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
517
Retour