Dates en entête de colonne et TCD

Bonjour

Je souhaiterais faire un TCD à partir d'un tableau ou l'entête de mes colonnes sont en fait des dates.

Je souhaiterais rependre ces dates pour mes colonnes de TCD, mon but étant de faire une synthèse de mon précédent tableau.

J'ai pu réussir mais cependant cela m'oblige à chaque fois à sélectionner ces dates dans l'outil gestionnaire du TCD et à les faire glisser. Sachant que les dates de mon premier tableau vont être supprimer et de nouvelles vont être créées, je souhaiterais que mon TCD puisse tenir compte de cela sans que je sois obliger de les resélectionner.

Est ce que c'est possible?

Merci pour votre aide et conseils

72classeur1.xlsx (24.54 Ko)

Bonjour,

Pour commencer tu dois uniformiser tes données. C'est à dire, les mettre sous forme de tableau, pour pouvoir entreprendre correctement la création de ton TCD.

Cdlt.

143dimlus70.xlsm (44.48 Ko)

Merci Jean Eric, le résultat est parfait!

Comment avez vous fait pour remettre en forme mon premier tableau sous forme de tableau en ligne?

RE,

Tu as 2 procédures VBA pour gérer le truc.

ALT F11, voir Module1.

Cdlt.

Option Explicit
Option Private Module

Public Sub CreateTable()
Dim wsData As Worksheet, wsPT As Worksheet
Dim tbl, Arr()
Dim rCell As Range
Dim I As Long, J As Long, k As Long
    Set wsData = Worksheets("Données")
    tbl = wsData.Cells(3, 1).CurrentRegion

    Set wsPT = Worksheets("TCD")
    With wsPT.ListObjects(1)
        If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
        Set rCell = .InsertRowRange.Cells(1)
    End With

    For I = 2 To UBound(tbl)
        For J = 5 To UBound(tbl, 2)
            If tbl(I, J) <> "" Then
                ReDim Preserve Arr(6, k + 1)
                Arr(0, k) = tbl(I, 1)
                Arr(1, k) = tbl(I, 2)
                Arr(2, k) = tbl(I, 3)
                Arr(3, k) = tbl(I, 4)
                Arr(4, k) = CLng(tbl(1, J))
                Arr(5, k) = tbl(I, J)
                k = k + 1
            End If
        Next J
    Next I
    rCell.Resize(UBound(Arr, 2), 6).Value = Application.Transpose(Arr)
    With wsPT.PivotTables(1).PivotCache
        .MissingItemsLimit = xlMissingItemsNone
        .Refresh
    End With
End Sub

Public Sub ClearData()
Dim wsPT As Worksheet

    Set wsPT = Worksheets("TCD")
    With wsPT.ListObjects(1)
        If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
    End With
    With wsPT.PivotTables(1).PivotCache
        .MissingItemsLimit = xlMissingItemsNone
        .Refresh
    End With

End Sub

Merci Jean-Eric, je les avais vu mais par contre je ne suis pas sur de tout comprendre, plutôt novice en la matière.

Donc c'est bien une macro qui remet en forme les données sous forme de ligne?

Je ne sais pas comment vous avez sélectionnez les données jusqu'au 29/01 mais ce que j'avais en tête c'était de pouvoir supprimer les dates dans le passée et de ce fait décaler toutes mes colonnes pour pouvoir prendre en compte les dates sur les premières semaines de février (une plage glissante) Est ce que cela est compatible avec la macro?

Je sais que c'est un peu trop demandé, pourriez vous m'expliquer la macro car je dois la remettre dans mon fichier source et sans comprendre je pense que ca risque d'être très compliqué pour moi? ca serait dommage.

Je vous remercie d'avance

Re,

On verra demain...

Cdlt.

merci, en attendant j'essaye de comprendre les différentes étapes

Bonjour,

Ton fichier avec la procédure principale commentée.

ALT F11 ; voir Module1.

Bonne lecture.

Cdlt.

66dimlus70-v1.xlsm (45.41 Ko)

Merci Jean-Eric pour ces détails d'explication

Mon niveau reste très limité (enregistreur de macro) et j'ai un peu du mal à comprendre toute la macro. Je vous ai donnée une partie de mon tableau final donc je cherche à comprendre votre macro pour pouvoir la retranscrire.

J'ai quelques questions ou j'ai passé pas mal de temps à chercher hier soir sans succès:

Comment modifier la plage de sélection de départ pour l'étendre par exemple jusqu'au 9 février?

J'ai compris comment on choisi les colonnes que je veux retranscrire dans mon tableau "Arr(3, k) = tbl(I, 4)" par contre je n'ai pas réussi à saisir comment cela fonctionnait pour les dates en ligne? "Arr(4, k) = CLng(tbl(1, J))" je pense qu'il me manque la logique du I, J =.... to Ubound

merci pour votre aide

Après une après midi entière passé à essayer de déchiffrer la macro, je n'ai pas pu avancer

J'ai mis en copie le modèle de mon fichier avec la mise en forme réelle et ce que j'aurais voulais analyser dans le tcd, si jamais vous pouvez m'aider avec ca, je vous en serai plus que reconnaissant.

Merci

Merci

14exemple.xlsx (83.34 Ko)

RE,

1 - La plage variable prend bien en l'intégralité de la plage (donc le 9/2).

'Transfert plage variable (dans l'exemple $A$3:$AJ$21) dans un tableau (Array)
    tbl = wsData.Cells(3, 1).CurrentRegion

2 - Lors de la création du tableau (Arr), on ne travaille que les cellules [tbl(I,J)] non vides. Ceci pour éviter d'avoir un tableau avec des valeurs à zéro. Si tu veux toutes les dates, il suffit d’inhiber 2 lignes de la procédure (If tbl(I,J)<>"" et End If), soit :

'Création Array (Arr) 6 lignes x k colonnes (variable)
    For I = 2 To UBound(tbl)
        For J = 5 To UBound(tbl, 2)
            'If tbl(I, J) <> "" Then
                'Array 6 lignes x k colonnes
                ReDim Preserve Arr(6, k + 1)
                'Code 1
                Arr(0, k) = tbl(I, 1)
                'Lib 1
                Arr(1, k) = tbl(I, 2)
                'CHAMPS
                Arr(2, k) = tbl(I, 3)
                'Ne pas supp
                Arr(3, k) = tbl(I, 4)
                'Date (entier long)
                Arr(4, k) = CLng(tbl(1, J))https://forum.excel-pratique.com/posting.php?mode=reply&f=2&t=104334#
                'Valeur
                Arr(5, k) = tbl(I, J)
                k = k + 1
            'End If
        Next J
    Next I

3 - Arr(4,k) = Clng(tbl(1,J)) : On récupère la 1ère. ligne et le numéro de colonne pour la date (que 'on convertit en un nombre entier)

4 - Je viens de voir ton nouveau message. Je reviens rapidement.

Re,

Je suis un peu perdu avec ton nouveau fichier.

Quels sont les champs (feuille "Fichiers de base") à rapatrier dans le tableau source du TCD?

Cdlt.

Bonjour

On n'arrête pas dire et redire que l'exemple doit être représentatif : là ton tableau est assez différent de l'exemple...

D'une part tu n'a pas créé de tableau sur l'onglet TCD (à faire manuellement) comme indiqué par Jean-Eric, d'autre part tes titres étant différents des titre de colonnes de la source, on ne sait même pas ce que tu veux récupérer... de toute évidence des colonnes non mitoyennes à la partie correspondant à ton exemple initial.

Soit plus précis...

Merci pour votre retour Jean-Eric et pour ne pas m'abandonner dans mon calvaire

Avant tout je suis désolé pour mon deuxième fichier. En effet il est différent par rapport au premier fichier car Je voulais présenter un exemple simple et adapter la solution par moi même mais à vrai dire je me sens quelque peu dépassé.

Concernant la prise en compte de toutes les dates, je ne comprenais pas pourquoi je n'avais pas celle de février. mais si cela est volontaire à cause des cellules vides pas de problème. J'ai retesté et effectivement avec des nouvelles valeurs elles sont bien intégrées, ouff .

J'ai refais mon exemple pour que ca soit cohérent (vraiment désolé), je vais m'améliorer promis

Merci encore pour votre aide

8exemple.xlsx (85.72 Ko)

Bonjour,

Ton fichier revu avec tes nouvelles indications.

Il y a matière à réfléchir.

A te relire.

Cdlt.

36dimlus70-v2.xlsm (188.13 Ko)

Wooow Merci Jean-Eric, c'est exactement ca!!!

Je vais m'y remettre, encore un peu de travail pour comprendre

Petite question, quand on duplique les ligne dans l'onglet TCD, est ce qu'il existe un moyen de copier uniquement les lignes correspondant à Atelier 1, Atelier, ....3, ......4 dans la colonne "CHAMPS" et d'omettre les autres qui ne me sont pas utiles. Je demande comme ca car cela fait déjà beaucoup de lignes pour quelques articles et vue que j'en ai un peu plus de 1000.

En tout cas vraiment merci pour ton aide

Bonjour,

Et une nouvelle proposition, une!...

Tu vas devoir copier la procédure principale 100 fois pour l'assimiler et la mémoriser.

A te relire.

Cdlt.

19dimlus70-v3.xlsm (80.98 Ko)

Merci Jean-Eric

J'ai recopier la macro mais j'ai un soucis avec la colonne date et quantités.

Les dates sont en 01/01/1900 et en colone quantité je retrouve les dates et les quantités. Mon fichier "exemple" a exactement la même disposition que celui que j'utilise. J'ai bien la même dénomination des plages et tableau. Par contre j'ai une ligne au dessus de mes colonnes d'entêtes date avec des 1 ou 0 (en fonction du jours ouvré ou non), est ce que ca peut faire varier la sélection de départ?

Je vais remettre la copie complète du fichier sur lequel je travail, je pense que ca sera plus clair et peut être q'un détail pour moi est quelque chose d'important dans la conception.... parce que là je ne vois pas ce qui change et fait planter la macro

Merci pour la rajout

If UCase(Left(tbl(I, 18), 7)) = "ATELIER" Then

Si je souhaite dénommer mes ateliers différemment par le nom, est il possible de créer une macro avec une fonction Si +ou (Si cellule ="aaaaa"; cellule="bbbbbb";cellule="ccccccc";cellule="ddddddd")?

désolé

Merci

Merci Jean-Eric

J'ai recopier la macro mais j'ai un soucis avec la colonne date et quantités.

Les dates sont en 01/01/1900 et en colone quantité je retrouve les dates et les quantités. Mon fichier "exemple" a exactement la même disposition que celui que j'utilise. J'ai bien la même dénomination des plages et tableau. Par contre j'ai une ligne au dessus de mes colonnes d'entêtes date avec des 1 ou 0 (en fonction du jours ouvré ou non), est ce que ca peut faire varier la sélection de départ?

Je vais remettre la copie complète du fichier sur lequel je travail, je pense que ca sera plus clair et peut être q'un détail pour moi est quelque chose d'important dans la conception ou sélection des plages.... parce que là je ne vois pas ce qui change et fait planter la macro

Merci pour la rajout

If UCase(Left(tbl(I, 18), 7)) = "ATELIER" Then

Si je souhaite dénommer mes ateliers différemment par le nom, est il possible de créer une macro avec une fonction Si +ou (Si cellule ="aaaaa"; cellule="bbbbbb";cellule="ccccccc";cellule="ddddddd")?

désolé

Merci

9exe-3.xlsx (35.39 Ko)

J'ai fais le test, j'ai décaler d'une cellule plus haut ma ligne de calcul de jour ouvrés et maintenant le résultat est bien similaire au votre

On avance doucement mais surement ...........attention derrière

Rechercher des sujets similaires à "dates entete colonne tcd"