Réorganiser des données avec une macro

Bonjour,

Je vous explique mon problème.

Je suis actuellement en stage, et mon tuteur m'a demandé de réaliser une macro sur Excel, or j'en ai juste réalisé une seul fois dans ma vie et elle était ultra simpliste et la je suis complètement bloqué et je perd énormément de temps inutilement (ça fait 2 jours que je suis dessus).

Le problème est le suivant :

J'ai sur un document Excel plusieurs feuilles correspondant à des années "2011" "2012", ...

Dans chacune de ces feuilles est présent plusieurs colonnes avec : l'année, le projet, le code du projet, et les nombres d'heures pour chaque personne ayant travaillé sur les projets et classée par service.

Or, pour exploiter les données de la façon dont ma demandé mon tuteur, je devrais avoir sur une même feuilles toutes les données c'est à dire une feuille que l'on appellerai par exemple "synthèse" et comprenant uniquement 6 colonnes :

Année / Projet / Code produit / Heure travaillé / Service / Nom de la personne

Pour bien comprendre le principe j'ai mis un fichier excel avec mon exemple en pièce jointe.

Les 6 colonnes uniquement sont importantes car cela me permettra de faire un tableau croisé dynamique permettant d'exploiter les données comme je l'entend (classement par projet, par service, ... )

J'ai en tête la trame que devrais réaliser la macro mais ne m'y connaissant pas du tout en VBA je suis incapable de le formaliser.

Pour moi la macro devrait faire cela :

1- Aller sur la feuille "2011"

2- En commençant par la personne X :

*Copier les 3 premières colonnes (sur la feuille synthèse)

*Copier la colonnes des heures correspondant à X

*Ajouté une colonne ou sera repris systématiquement le nom de son service

*Ajouté une autre colonnes ou sera repris le nom de la personne systématiquement

3- Faire la même chose pour Y

et ainsi de suite pour chaque personne de la feuille

4- Puis faire la même chose pour la feuille "2012"

Le but est qu'au final on obtiennent sur la feuille "Synthèse" un très long tableau avec les 6 colonnes suivantes :

Année / Projet / Code produit / Heure travaillé / Service / Nom de la personne

Merci d'avance aux âmes charitables qui me viendront en aide

Bonsoir,

une proposition de solution

Sub creesynthese()
    Set wss = Worksheets("synthese")
    Application.ScreenUpdating = False
    wss.Rows("2:" & wss.Cells(Rows.Count, 1).End(xlUp).Row).Delete 'on efface la feuille synthèse
    l = 1 ' l numéro de ligne dans synthèse
    For Each wsn In Array("2011", "2012") 'on parcourt la liste des noms de feuille à prendre en compte pour la synthèse
        Set ws = Worksheets(wsn)
        dc = ws.Cells(5, Columns.Count).End(xlToLeft).Column
        dl = ws.Cells(Rows.Count, 1).End(xlUp).Row
        For i = 6 To dl 'on parcourt les lignes de la feuille
            For j = 4 To dc 'on parcourt les colonnes de chaque ligne
               If ws.cells(i,j)>0 then 'on ne prend que les cellules avec des heures non nulles
                l = l + 1
                wss.Cells(l, 1) = ws.Cells(i, 1) 'année
                wss.Cells(l, 2) = ws.Cells(i, 2) 'projet
                wss.Cells(l, 3) = ws.Cells(i, 3) 'produit
                wss.Cells(l, 4) = ws.Cells(i, j) 'heures
                wss.Cells(l, 5) = ws.Cells(4, j) 'service
                If wss.Cells(l, 5) = "" Then wss.Cells(l, 5) = wss.Cells(l - 1, 5) 'copie service ligne précédente si service non présent
                wss.Cells(l, 6) = ws.Cells(5, j) 'personne
              end if
            Next j
        Next i
    Next
    Application.ScreenUpdating = True
End Sub

Je viens de tester la macro et celle-ci marche parfaitement sur mon fichier, et s'étend à merveille aux années 2013 et 2014.

J'ai juste ajoutée au début du programme les lignes suivantes :

Cells(1, 1) = "Année"

Cells(1, 2) = "Projet"

Cells(1, 3) = "Code produit"

Cells(1, 4) = "Nombre d'heure"

Cells(1, 5) = "Service"

Cells(1, 6) = "Personne"

Cela permet d'avoir un titre aux colonnes.

Encore une fois merci énormément pour ton aide !

Rechercher des sujets similaires à "reorganiser donnees macro"