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

241donnees-brutes.zip (4.80 Ko)
356resultat-souhaite.zip (11.10 Ko)

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.

307donnees-brutes-v1.zip (10.00 Ko)

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

157donnees-brutes-v2.zip (13.58 Ko)

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+

20exemple-a.zip (10.25 Ko)

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

Rechercher des sujets similaires à "comptabiliser heures passees projet chaque semaine"