Traitement de données avec Tableau

Bonjour le forum,

Depuis 2 jours, je me prends la tête sur un calcul de cumul,et je viens vous demander de l'aide svp.

Je dispose d'un tableau rempli de données avec des colonnes d’entêtes sous la forme "Mois-Année" et une ligne d’entête sous la forme "S36/17":

  • "S36" ==> correspond à la semaine 36
  • "17" ==> correspond à l'année 2017

une fonction me permet de récupérer le premier lundi de la semaine en fonction de son N° et de l'année.

Je cherche par rapport à cette ligne d’entête de faire un cumul de toutes les données qui appartiennent au même mois et de récupérer le résultat sous forme de tableau car je souhaiterais par la suite lui refaire un autre traitement.

Je vous joint un fichier en pièce jointe, avec un onglet ou un exemple du résultat souhaité et affiché.

Merci à vous

16test.xlsm (27.77 Ko)

Bonjour,

Je viens de débarquer sur ton fichier et quelque chose m'échappe... C'est normal que tu aies une valeur en intersection avec septembre 2017 et août 2018? Je dois avouer que j'ai du mal à comprendre pourquoi tu as des dates en ligne et en colonne...

Bonjour Ausecour,

Ces datas sont des données de retour :

  • Ligne 1, ce sont les dates de fabrications ( S36/17; ....... )
  • En colonnes ("A:A") les mois ou les produits ont était retourné.

Donc pour l'exemple en Aout 2018, il y a eu 3 produits retourné qui ont était fabriqué en semaine 34 de 2017.

Je souhaiterais avoir un cumul de toutes ces semaines ramené par mois.

Je me suis rendu compte que le code livré avec le fichier ne fonctionnait pas, celui que je vous fais de nouveaux parvenir ne fonctionne pas mieux mais au moins n'a pas d’erreur d’exécution

Les cumuls se font bien lors de la 1ere boucle de la variable j mais lors de la seconde boucle, je n'arrives pas à lui indiquer de créer une nouvelle dimensions dans le tableau si DateDiff est différent de 0.

Sub Calcul_TN()
Dim Tablo_data, Tablo_cumul_temp
Dim i&, j&, e&
Dim c As Date, d As Date

    'Définition de la variable de type tableau
    Tablo_data = Sheets("Feuil1").Range("B2").CurrentRegion
    ReDim Tablo_cumul_temp(1 To UBound(Tablo_data, 1) - 1, 1 To 1)

        e = 0
        For j = 3 To UBound(Tablo_data, 2)

            'Affectation des dates aux variables
            c = lundiSemaine(CInt("20") & CInt(Mid(Tablo_data(1, 2), 5, 2)), CInt(Mid(Tablo_data(1, 2), 2, 2)))
            d = lundiSemaine(CInt("20") & CInt(Mid(Tablo_data(1, j), 5, 2)), CInt(Mid(Tablo_data(1, j), 2, 2)))

            ReDim Preserve Tablo_cumul_temp(1 To UBound(Tablo_data, 1) - 1, 1 To e + 2)

            If DateDiff("m", c, d) = e Then

                Tablo_cumul_temp(2 + e, 1) = Tablo_data(3 + e, 1)

                For i = 3 To UBound(Tablo_data, 1)
                     Tablo_cumul_temp(1, e + 2) = UCase(Format(c, "mmm-yy"))
                    If i = 3 Then
                        Tablo_cumul_temp(i - 1, e + 2) = Tablo_cumul_temp(i - 1, e + 2) + Tablo_data(i, j - 1) + Tablo_data(i, j)
                    Else
                        Tablo_cumul_temp(i - 1, e + 2) = Tablo_cumul_temp(i - 2, e + 2) + Tablo_data(i, j - 1) + Tablo_data(i, j)
                    End If

                Next i

                e = e + 1
            End If

        Next j

End Sub

Re,

Ah d'accord je comprends mieux, j'ai rajouté deux lignes qui permettent de faire mon calcul dans ton classeur, après j'ai utilisé un sommeprod en pensant à cumuler, je te laisse voir le résultat par toi même

7copie-de-test.xlsm (30.88 Ko)

EDIT:

ah tu utilisais une macro

Merci pour ta réponse mais oui j'ai oublié de préciser que je fonctionne en macro car ceci est un bout de code d'un programme assez long qui me créée des tableaux de synthèse en auto

Re,

Je te retourne ton fichier avec la macro que j'ai corrigé, il y avait quelques erreurs mais il fallait les trouver

Voici le fichier:

5copie-de-test.xlsm (28.38 Ko)

Nickel c'est exactement ça, j'ai plus qu'à analyser afin de voir ou était mon erreur , encore merci à toi.

Si ça peut te guider, la déclaration du premier tableau était erronnée car tu essayais de prendre la zone dont fait partie A1, qui renvoyait juste A1, je suis aller chercher la dernière ligne remplie colonne A, et la dernière colonne remplie ligne 1.

Pour la suite c'était surtout des erreurs au niveau du dimensionnement du second tableau et des erreurs avec les index de ligne et de colonne, regarde surtout ces parties là, parce que c'est là que j'ai mis du temps à corriger

Pour la déclaration du tableau c'est une erreur de frappe car je ne dispose pas du tableau en "dur" c'est aussi une variable de type "array" sur lequel je travaille, j'ai juste copié le tableau dans un classeur pour l'exemple.

La vrai erreur je pense comme toi est purement mathématique sur les index de lignes et de colonnes.

Encore merci de ton aide

De rien et bonne chance pour la suite

Bonjour

Une proposition PowerQuery (intégré à partir de 2016) + TCD

Il suffit d’utiliser Données, Actualiser tout pour mettre à jour

4pivotagepq3.xlsm (44.47 Ko)

Bonjour 78chris,

Super merci, power query est vraiment puissant il faut vraiment que je me documente plus sur son utilisation.

De rien et bonne chance pour la suite

Bonjour Ausecour,

je regarde le code que tu m'as donné hier mais je ne comprends pas cette partie :

            If i = 3 Then
                Tablo_cumul_temp(i - 1, moisDif + 2) = Tablo_cumul_temp(i - 1, moisDif + 2) + Tablo_data(i, j) + 0

            Else
                Tablo_cumul_temp(i - 1, moisDif + 2) = Tablo_cumul_temp(i - 1, moisDif + 2) + Tablo_data(i, j)
            End If

Je ne vois pas la différence entre les 2 lignes mise à part le "0", j'ai simplifié le code comme ci dessous mais le résultat n'est pas bon, le "0" a une influence sur les calculs ?

            
                Tablo_cumul_temp(i - 1, moisDif + 2) = Tablo_cumul_temp(i - 1, moisDif + 2) + Tablo_data(i, j)

Je repost le problème car je me suis aperçu que mon problème n'est pas résolu dans sa totalité car je souhaiterais voir apparaître un tableau avec toutes les mois de fabrications et compter le nombre de retours 1 mois après fab puis 2 mois etc... et ça pour tous les mois de fabrication.

Je me rends compte que ma 1er demande était fausse, le résultat obtenue n'est en faite celui que je souhaitais, je re transmet un fichier joint avec le BON résultat souhaité.

Je suis désolé de ne pas avoir étais clair dans mes explications.

Merci à vous, si quelqu'un peut me venir en aide.

Re,

Je réponds tout d'abord à ton premier message, c'est la même ligne, à la base j'avais mis le If parce que j'essayais de gérer le cumul ici, mais au final comme je le fais ailleurs les lignes ont finis par être identiques, tu peux simplement écrire:

        'Si premiere ligne une simple addition sinon effectuer un cumul
        Tablo_cumul_temp(i - 1, moisDif + 2) = Tablo_cumul_temp(i - 1, moisDif + 2) + Tablo_data(i, j) + 0

EDIT:

Je viens de regarder ta deuxième demande... du coup tu ne veux plus de cumul? et en clair tu veux savoir combien de retours tu as 1 mois après jusqu'à x mois après... c'est ça?

Oui c'est sa tout en gardant le cumul

Re,

Bon j'ai dû pas mal modifier le code mais voici le résultat:

5copie-de-test.xlsm (30.37 Ko)

Nickel merci à toi je l'ai adapté à mon projet et sa fonctionne parfaitement, je finis mon projet et je vais prendre le temps d'analyser et de comprendre ta logique car elle me semble très intéressante. Car ma logique à moi et à revoir .

Encore un grand merci à toi.

De rien

Si tu as des questions concernant le code à l'avenir, n'hésite pas

merci d'avoir passé le sujet en résolu

Rechercher des sujets similaires à "traitement donnees tableau"