Regrouper mois en semestres décalés dans TCD

Bonjour,

Je travaille depuis plusieurs mois sur une énorme macro sur Excel 2010. Cette macro crée tout d'abord des TCD depuis une extraction sur Excel d'un logiciel ERP. A partir de ces TCD je crée automatiquement un rapport de statistiques avec mise en page et tout le bazar. Tout allait bien jusqu'au dernier test final qui a fait apparaître un souci que je ne peux laisser passer. Alors tout d'abord, je précise que mon entreprise travaille en années décalées et non calendaires, donc les stats le sont également. Le 1er semestre couvre donc septembre-février et le 2e semestre mars-août. La macro, dans les TCD, regroupe les bons semestres grâce à union cells(blabla).select puis selection.group. Le hic, c'est qu'il peut arriver qu'en fonction des stats éditées, tous les mois ne soient pas représentés, auquel cas le regroupement ne fonctionne pas et la macro renvoie une erreur. La solution première envisagée fut de prendre tous les cas de figure dans des If imbriqués, mais l'ensemble des cas sur un semestre est de 64, ce qui est fastidieux, et je prends peur en pensant à une année entière... Je cherche donc une solution de secours... Il m'est difficile de vous envoyer un exemple car le fichier est lourd, il y a beaucoup de données confidentielles, et les macros sont nombreuses... Et comme elles sont toutes interdépendantes, un extrait ne permettrait pas de faire fonctionner le tout...

Mais je suis ouvert, là je tâtonne trop et a priori c'est la dernière chose qui coince sur mon programme...

Merci par avance pour votre aide avisée !

Dam's

Bonjour,

Je suis curieux de voir ton fichier et intéressé pour t'aider.

Il est nécessaire d'avoir une copiepartielle de ton fichier pour cela.

Tu peux me l'envoyer par MP (message privé).

Cdlt.

J'ai épuré la base de données, et je te joins le PERSO.XLS en supplément, par MP, merci


Est-ce que c'est ok pour le MP ?

Re,

oKay pour le Mp (reçu) mais pas de fichier

Voici le bout de code censé faire le tri par semestre sur les TCD. Il ne marche pas s'il manque au moins un mois dans un semestre...

Public Sub Tri_6mois_dans_TCD(ByRef m1, m2, m3, m4, m5, m6)

x = 0

Do While Cells(4, x + 1) <> ""
    x = x + 1
Loop

m1 = 0
m2 = 0
m3 = 0
m4 = 0
m5 = 0
m6 = 0

For y = x To 1 Step -1
    If Cells(4, y).Value = "septembre" Then
        m1 = y
    ElseIf Cells(4, y).Value = "octobre" Then
        m2 = y
    ElseIf Cells(4, y).Value = "novembre" Then
        m3 = y
    ElseIf Cells(4, y).Value = "décembre" Then
        m4 = y
    ElseIf Cells(4, y).Value = "janvier" Then
        m5 = y
    ElseIf Cells(4, y).Value = "février" Then
        m6 = y
    End If
Next y

End Sub

Public Sub Tri_12mois_dans_TCD(ByRef x, y, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12)

x = 0

Do While Cells(4, x + 1) <> ""
    x = x + 1
Loop

For y = x To 1 Step -1
    If Cells(4, y).Value = "septembre" Then
        m1 = y
    ElseIf Cells(4, y).Value = "octobre" Then
        m2 = y
    ElseIf Cells(4, y).Value = "novembre" Then
        m3 = y
    ElseIf Cells(4, y).Value = "décembre" Then
        m4 = y
    ElseIf Cells(4, y).Value = "janvier" Then
        m5 = y
    ElseIf Cells(4, y).Value = "février" Then
        m6 = y
    ElseIf Cells(4, y).Value = "mars" Then
        m7 = y
    ElseIf Cells(4, y).Value = "avril" Then
        m8 = y
    ElseIf Cells(4, y).Value = "mai" Then
        m9 = y
    ElseIf Cells(4, y).Value = "juin" Then
        m10 = y
    ElseIf Cells(4, y).Value = "juillet" Then
        m11 = y
    ElseIf Cells(4, y).Value = "août" Then
        m12 = y
    End If
Next y

End sub

Bonjour,

Je n'ai pas réussi à travailler avec tes données MP.

Pas assez de données dans le 1er. fichier et des bugs importants dans le second.

Je te joints un fichier exemple, à adapter, qui je pense corrige ton problème.

Si le mois max >=6 regroupement 1er. semestre

Si le mois max <=12 (ou >7) regroupement 2ème. semestre

Cdlt.

Extrait du code pour les semestres :

If moisMax >= 6 Then
                Range(Cells(2, 2), Cells(2, 7)).Select
                Selection.Group
                ActiveSheet.PivotTables("TCD_1").PivotFields("Mois 1_2").PivotItems("Groupe1"). _
                    Caption = "S1"

            End If

            If moisMax <= 12 Then
                derColonne = Cells(2, Cells.Columns.Count).End(xlToLeft).Column - 1
                Range(Cells(2, 8), Cells(2, derColonne)).Select
                Selection.Group
                ActiveSheet.PivotTables("TCD_1").PivotFields("Mois 1_2").PivotItems("Groupe2"). _
                    Caption = "S2"
            End If

nb : seuls les mois répertoriés dans la base sont affichés. Si tu veux voir tous les mois, il faudra modifier le code en fonction du mois max et le nombre de mois total (soit 12) / J'ai aussi allégé le code Vba pour + de rapidité.

Salut et merci pour ta réponse. Je n'ai pas essayé ton code mais je détecte déjà deux soucis. 1) mes mois sont exprimés en toutes lettres ; 2) nos semestres sont décalés (septembre-février et mars-août). De plus je ne repère pas dans ton code la possibilité de faire abstraction des cas où tous les mois ne seraient pas représentés, car c'est là mon problème et la raison de ma demande.

Re,

Heureux de te lire, mais il me semble que tu n'as pas lu mon message dans sa globalité..

De plus, tu n'as pas essayé le code. Tu n'as donc pas vu le résultat

J'ai travaillé avec les éléments que tu m'as fourni : c'est à dire rien et j'ai dû interpréter.

Relis le nb en fin de message.

Cdlt.

J'ai mis ton code dans le module 'TCD_6mois_1", à la place du bout de conditions que j'avais commencé à faire au niveau du regroupement par mois, et ça me renvoie une erreu d'exécution 1004 "Erreur définie par l'application ou par l'objet" sur la ligne

Range(Cells(2, 8), Cells(2, derColonne)).Select

Re,

Peux-tu me communiquer un fichier comportant ta base de données, avec un nombre suffisant d'éléments pour la construction d'un TCD et ta procédure "TCD_6mois_1"?

Un exemple du résultat attendu serait un plus, pour mieux te comprendre..

Cdlt.

Voici une base avec plus de données....

Bonjour,

Pas de solution ?

Up

S'il vous plait, j'ai vraiment besoin d'une solution...

Bonjour,

Petit rappel

Peux-tu me communiquer un fichier comportant ta base de données, avec un nombre suffisant d'éléments pour la construction d'un TCD et ta procédure "TCD_6mois_1"?

Un exemple du résultat attendu serait un plus, pour mieux te comprendre..

J'ai effectivement reçu un fichier comportant plus d'infos. Cependant pas assez conséquent!

J'attends toujours le résultat escompté (en exemple). Fais une synthèse du résultat manuellement...

Ci-joint fichier mis à jour avec la correction des bugs que j'ai rencontré.

De plus, comme j'ai dû interpréter : voir colonnes BG & BH ; Lignes 132 à 142.

Pour le code, je pense que tu comprendras.

Cdlt

Salut, je te remercie pour ta réponse.

J'ai commencé à regarder ton code, certaines choses me semblent compliquées, je n'ai pas encore eu le temps de creuser... Je suis un peu surchargé en ce moment, donc je prendrai le temps un de ces quatre et te ferai un retour.

Merci, à bientôt !

Rechercher des sujets similaires à "regrouper mois semestres decales tcd"