Comptabiliser les heures passées par projet, chaque semaine
Bonjour à tous,
J'essaie de comptabiliser les heures passées sur chaque projet...
Pour ça, j'ai une feuille "Données brutes" qui me donne mon planning pour chaque jour. Maintenant, j'aimerais synthétiser ces données et déterminer le nombre d'heure passée sur chaque projet.
J'ai créé un classeur "Résulat souhaité" avec en feuil1 des explications (n'hésitez surtout pa à me dire si ce n'est pas clair !!) et en feuil2, le résultat souhaité d'après les données du classeur "Données Brutes".
À terme, j'aurais aimé si possible que la feuille de résulat soit dans le claseur "Données Brutes", à la suite de la feuil1.
Merci beaucoup de votre aide et de vos remarques
Bonne journée,
Amicalement
Salut,
Parmi les gros problèmes avec un tableau tel que celui que tu nous présentes ce sont que tu mélanges dans les mêmes colonnes des données qui n'ont rien à faire ensemble ("Activité du xx.xx.xxxx" avec "Projet x"), que tu indiques des informations dans les cellules qui empêchent certains calculs ("De 07:00" et "à 08:00"), que tu indiques deux informations à séparer dans ton récapitulatif dans la même cellule ("Projet 1" et "NV21576487545"), que tu as des lignes vides (regarde comment j'ai évité une ligne vide à la ligne '8) et que tu as des cellules fusionnées. Aie !
Regarde le tableau que j'ai créé sur la feuille 2 : Chaque colonne a un titre explicite, 1 seule information par colonne (tu peux ainsi repérer facilement les "Projets" et tes deuxièmes références du genre "NP456112"), tu peux effectuer des calculs sur les heures (formules dans la colonne G), tu peux créer des formules pour rechercher le numéro de semaine (formule dans la colonne A), etc., etc.
Ensuite c'est bien plus facile de récapituler tes données par semaine, comme tu le désires.
Alors est-ce qu'un nouveau tableau de saisies brutes te paraît envisageable ? Si oui, réfléchis à quelles colonnes manquent encore ou sont en trop en fonction des récapitulatifs désirés et on verra par la suite comment créer ces récapitulatifs.
A propos, quand voudrais-tu créer ces récapitulatifs ? Une fois par semaine ? A l'aide d'un bouton ? En finale, il y aura combien de récapitulatifs sur la même feuille ? 52 soit une année ?
A te relire.
Bonjour Yvouille,
Merci beaucoup de tes remarques !! J'ai essayé d'en tenir compte et j'ai crée le fichier en pj. Je ne peux malheureusement pas
* séparer en 2 colonnes distinctes l'info 1 (le projet) et l'info 2
* remplacer le "Divers" par "Arrivée" ou "Départ" qui sont pour moi l'info 3...
Ces données sont récupérées directement de mon calendrier outlook sans retraitement de ma part (contrairement au fichier précédent)
Le travail que tu as fait (merci !) correspond bien à mon besoin ! Je vais maintenant tâcher de répondre à tes questions:
A propos, quand voudrais-tu créer ces récapitulatifs ? Une fois par semaine ?
Ce serait l'idéal, oui...
A l'aide d'un bouton
j'avais envisagé la possibilité d'un usf qui me demanderait
* la ou les semaines à traiter
* me donnerait la possibilité de faire les récap. depuis le début d'année (sem. 1) jusqu'à la semaine en cours
je ne sais pas si c'est envisageable ou pas...
En finale, il y aura combien de récapitulatifs sur le même feuille
Je pensais faire les récapitulatifs à la demande à l'aide l'userform ! Je pensais tout mettre sur la même feuille... je sais que le nombre de ligne est "limité", mais je pense que ça suffira...
N'hésite pas à me dire si j'ai oublié de répondre à une de tes questions,
Merci beaucoup de ton aide,
Bonne journée,
Amicalement
Bonjour
Je me suis juste amusé ( à partir de ton premier fichier de données brutes) à faire ce programme
Le programme ne fonctionnera qu'avec cette disposition et cette syntaxe, en aucun cas avec ton 2ème fichier de données brutes
(Re-)bonjour Banzai64,
Tu es un génie !! Je ne sais pas comment tu as réussi à faire ça
Merci beaucoup,
Je teste et je te dis !
En tous cas, MERCI à vous 2 !!!
Bonjour à vous deux,
Je suis bien content que Banzai t'aie proposé une solution qui te convient car j'ai commencé hier soir et ce matin un fichier sur la base de ton deuxième tableau, mais je rame un peu
Bonne fin de journée
Bonjour Yvouille,
Je te remercie beaucoup de ton aide et de tes remarques mais aussi du temps que tu as passé sur mon soucis !
Le résultat est important, c'est sûr, mais j'attache autant d'importance à toute l'aide (remarques, explications...) que l'on me donne par ailleurs !!
Tu m'as déjà aidée plusieurs fois (et sans doute que tu viendras à mon secours encore à l'avenir...) et je t'en remercie !!!
Bonne journée
À bientôt
Bien amicalement
La macro fonctionne très très bien !
Pour éviter une étape, j'aurais aimé l’intégrer au code qui me donne le fichier de données brutes... Ce fichier brute est obtenu à partir d'outlook. Voici le code qui me permet de choisir les dates de début et de fin de l'extraction des données à partir d'outlook :
Sub test()
Dim dteStart As Date
Dim dteEnd As Date
dteStart = UserForm3.MonthView1.Value
dteEnd = UserForm3.MonthView2.Value
Call GetCalData(dteStart, dteEnd)
End Sub
j'essaie de l'adapter pour que :
* la date de début corresponde à la 1ère semaine cochée dans l'userform1 du fichier de Banzai64
* la date de fin corresponde à la dernière semaine cochée dans l'userform1 du fichier de Banzai64
Une idée ? Si ce n'est pas possible, ce n'est pas grave, je le ferai par étape !
Merci !
Bonjour
Je n'ai pas Outlook donc pas facile à tester
A voir le code dans la macro CommandButton1_Click
Penses à enlever la remarque devant le Call
Merci Banzai64 ! Je regarde tout ça et je te dis si ça marche !
A+
Bonsoir Banzai64, le Forum,
J'ai un soucis avec le fichier "walden Résultat souhaité v001.xls", je te mets en pj le résultat que j'obtiens lorsque je lance le programme ! Peux-tu stp me dire que j'ai mal fait ??
Merci beaucoup !
EDIT : excel a planté tout simplement...
Bonsoir
Oui je vois le résultat
Mais comme je ne sais pas si tu avais choisis la bonne année
Parce que je l'ai essayé et j'obtiens un résultat "normal"
Si tu m'expliques comment tu as fait cela,que j'essaie de le refaire
Edit : Ok j'ai vu ta correction
As tu essayé la version 2 ?
Oui et j'ai pu adapter la macro CommandButton1_Click à mon fichier !
Par contre, j'ai un (dernier) soucis : le code qui rapatrie les données à partir d'outlook et comptabilise les heures passées est dans un classeur "A".
Ce code me permet d'obtenir le fichier "Données brutes" dans un nouveau classeur ("B") en feuil1. Le code (qui je le répète, fonctionne très bien !) est donc dans le classeur "A". Du coup, le programme considère la feuil1 du classeur "A" et non celle du classeur "B"...
Je pensais simplement modifier le code en nommant clairement le classeur "B". Mais malheureusement ce classeur n'a pas de nom clairement identifié ("Classeur 1", puis "Classeur 2"...). Je vais aller chercher sur le net comment identifier le classeur nouvellement créé.
Je te tiens au courant !
A+
Re-,
J'ai pu renommer mon nouveau classeur :
Set MyBook = Excel.Workbooks.Add
With MyBook
.SaveAs filename:="Exemple A.xls"
End With
et j'ai modifié la macro "Comptabilise" comme suit :
Dim J As Long, LgDep As Long
Dim Cel As Range
Dim NomProjet As String, RefProjet As String
Dim LundiSem As Date, Ladate As Date
Dim Duree As Double ', Duree As Date
Dim Indice As Integer, Jour As Integer, ClDep As Integer
Dim Sem As Integer, Annee As Integer
Dim I As Integer, K As Integer
Dim Ws As Worksheet
Dim Ko As Boolean
Dim Tablo
Application.ScreenUpdating = False
Workbooks("Exemple A.xls").Sheets(2).Activate
Set Ws = Workbooks("Exemple A.xls").Sheets(2)
ClDep = 2
LgDep = 4
Ws.Columns("B:F").Clear
Annee = UserForm4.ComboBox1
For K = 0 To UserForm4.ListBox1.ListCount - 1
If UserForm4.ListBox1.Selected(K) = True Then
Ko = False
Sem = K + 1
LundiSem = 7 * Sem + DateSerial(Annee, 1, 1) - Weekday(DateSerial(Annee, 1, 3)) - 3
ReDim Tablo(1 To 5, 1 To 1)
Tablo(1, 1) = "Semaine"
Tablo(2, 1) = "Projet"
Tablo(3, 1) = "Ligne"
Tablo(4, 1) = "Nombre d'heure réel"
Tablo(5, 1) = "Nombre d'heure rapporté à 39H/Sem."
Indice = 1
With Workbooks("Exemple A.xls").Sheets(1)
For Ladate = LundiSem To LundiSem + 4
Jour = 0
Set Cel = .Cells.Find(what:="Activités du " & Format(Ladate, "dd mmmm yyyy"), _
LookIn:=xlValues, lookat:=xlPart)
If Not Cel Is Nothing Then
J = Cel.Row + 1
While .Range("B" & J) <> ""
If InStr(1, .Range("B" & J), "Divers") > 0 Then
If InStr(1, .Range("C" & J), "Arrivée") > 0 Then
Jour = 1
ElseIf InStr(.Range("C" & J), "Départ") > 0 Then
Jour = Jour + 1
End If
ElseIf InStr(1, .Range("B" & J), "(") > 0 Then
NomProjet = Left(.Range("B" & J), InStr(.Range("B" & J), "(") - 1)
RefProjet = Mid(.Range("B" & J), Len(NomProjet) + 2)
RefProjet = Left(RefProjet, Len(RefProjet) - 1)
'Duree = CDate(Split(.Range("E" & J), " ")(2)) - CDate(Split(.Range("D" & J), " ")(2))
Duree = 24 * (CDate(Split(.Range("E" & J), " ")(2)) - CDate(Split(.Range("D" & J), " ")(2)))
If RefProjet = "Absence" Then
Jour = 2
If Duree > 3.8 Then
Duree = 7.8
ElseIf Duree < 3.8 Then
Duree = 3.9
End If
' If Duree > CDate("3:47") Then
' Duree = CDate("7:47")
' ElseIf Duree < CDate("3:47") Then
' Duree = CDate("3:53")
' End If
End If
For I = 2 To Indice
If Tablo(3, I) = RefProjet Then
Tablo(4, I) = Tablo(4, I) + Duree
Exit For
End If
Next I
If I > Indice Then
Indice = Indice + 1
ReDim Preserve Tablo(1 To 5, 1 To Indice)
Tablo(2, Indice) = NomProjet
Tablo(3, Indice) = RefProjet
Tablo(4, Indice) = Duree
End If
End If
J = J + 1
Wend
If Jour < 2 Then ' La journée incomplète
MsgBox "Journée du " & Format(Ladate, "dddd dd mmmm yyyy") & " incomplète"
Ko = True
End If
Else
' Le jour non trouvé
Indice = Indice + 1
ReDim Preserve Tablo(1 To 5, 1 To Indice)
Tablo(2, Indice) = "Manque"
Tablo(3, Indice) = Format(Ladate, "dddd")
Tablo(4, Indice) = 7.8
End If
Next Ladate
End With
Ws.Cells(LgDep, ClDep).Resize(UBound(Tablo, 2), 5) = Application.Transpose(Tablo)
If Indice > 1 Then
' Recherche la ligne Absence
Indice = 0
For I = 2 To UBound(Tablo, 2)
If Tablo(3, I) = "Absence" Then Indice = I: Exit For
Next I
Ws.Range(Ws.Cells(1, ClDep), Ws.Cells(1, ClDep + 5)).EntireColumn.ColumnWidth = 11
Ws.Columns(ClDep + 2).AutoFit
With Ws.Cells(LgDep, ClDep).Resize(1, 5)
.WrapText = True
.Font.Bold = True
.Borders.Weight = xlThin
End With
Ws.Rows(LgDep).AutoFit
With Ws.Cells(LgDep + 1, ClDep).Resize(UBound(Tablo, 2), 1)
.Merge
.Value = Sem
.Font.Bold = True
If Ko = True Then
.Interior.ColorIndex = 3
End If
End With
With Ws.Cells(LgDep, ClDep).Resize(UBound(Tablo, 2) + 1, 5)
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
.BorderAround Weight:=xlThin
End With
Ws.Cells(LgDep + 1, ClDep + 3).Resize(UBound(Tablo, 2) - 1, 2).NumberFormat = "0.00"
With Ws.Cells(LgDep, ClDep + 3).Offset(UBound(Tablo, 2)).Resize(1, 2)
.Font.Bold = True
.Formula = "=SUM(R" & LgDep + 1 & "C:R[-1]C)"
End With
With Ws.Cells(LgDep + 1, ClDep + 4).Resize(UBound(Tablo, 2) - 1, 1)
.Font.ColorIndex = 3
If Indice = 0 Then
.Formula = "=(RC[-1]*39)/R" & LgDep + UBound(Tablo, 2) & "C[-1]"
Else
.Formula = "=(RC[-1]*(39-R" & LgDep + Indice - 1 & "C[-1]))/(R" & LgDep + UBound(Tablo, 2) & "C[-1]-R" & LgDep + Indice - 1 & "C[-1])"
Ws.Cells(LgDep + Indice - 1, ClDep + 4) = Ws.Cells(LgDep + Indice - 1, ClDep + 3)
End If
End With
End If
LgDep = LgDep + UBound(Tablo, 2) + 2
End If
Next K
End Sub
Je pensais que tout serait ok, mais la macro "Comptabilise" ne parvient pas à trouver le(s) jours à partir de la feuil1.
En pj, voici ce que j'obtiens !
Je continue à chercher !!
A+
Bonsoir
Pas de problème
Regardes ce que je récupère
Une question : Pourquoi tu passes par un fichier, tu ne peux pas récupérer directement la période de ton agenda dans ton classeur principal ?
Re-,
C'est pas vrai !! En utilisant la macro originale ou celle que j'ai modifié ?
Parce moi, ça ne fonctionne pas
Une question : Pourquoi tu passes par un fichier, tu ne peux pas récupérer directement la période de ton agenda dans ton classeur principal ?
Il y a d'autres data dans le classeur principal et je ne voulais pas qu'il soit "surchargé" à force !
Bonsoir
Avec la macro que tu as modifiée bien sur (j'ai juste renommer Userform4 en Userform1)
Je ne sais pas si cela surchargerait beaucoup le classeur, ce sont juste des infos, et rien ne t'empêches de supprimer ces données lors de la fermeture du fichier
Mais bon tu connais mieux ton programme que moi
C'est incroyable ça... Ça ne fonctionne pas chez moi...
Je ne sais pas si cela surchargerait beaucoup le classeur, ce sont juste des infos, et rien ne t'empêches de supprimer ces données lors de la fermeture du fichier
C'est à envisager effectivement... Pas bête !
Dès que j'aurais trouver pourquoi ça plante chez moi, je regarderai tout ça !
Mais bon tu connais mieux ton programme que moi
Oui, mais tu es toujours de bon conseil ! Je commence à le savoir
Bonjour (
une idée sans doute stupide... est-il possible que je perde l'info sur la sélection des semaines, étant donné que je passe à un autre classeur ?
Bonjour
Comment j'ai utilisé ta macro
J'ai ouvert le classeur "Exemple A" et j'ai lancé la macro
Ouverture Userform ---> Coche 49 --> Valider
Et résultat dans le fichier Exemple A en feuille 2
Mais je n'ai pas l'appel à la macro Call ........
C'est tout