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 !