Outlook temps tâches outlook

DJARNAUD

XLDnaute Occasionnel
Bonjour à tous,

Dans outlook j'ai une liste de tâche auxquels j'attribue un temps de travail (via la colonne travail total). Je souhaiterai savoir s'il y a un moyen rapide d'avoir la somme de tous ces temps de travail?

J'y arrive en faisant un copié collé dans excel et en déroulant une formule mais pas très pratique.

Merci d'avance

Cordialement
 
Solution
Rebonjour,

Voici le code mis à jour :
VB:
Sub AfficherTempsTotaux()
Dim l_l_i As Long
Dim l_l_nbItems As Long
Dim l_o_selection As Outlook.Selection
Dim l_l_totalWorkSum As Long
Dim l_l_actualWorkSum As Long
Dim l_l_totalWork As Long
Dim l_l_actualWork As Long
Dim l_s_text As String
Dim l_o_dicoTotalWorkValues As Object   'Scripting.Dictionary
Dim l_o_dicoActualWorkValues As Object  'Scripting.Dictionary

    Set l_o_selection = Application.ActiveExplorer.Selection
    If l_o_selection.Count >= 0 Then
        Set l_o_dicoTotalWorkValues = CreateObject("Scripting.Dictionary")
        Set l_o_dicoActualWorkValues = CreateObject("Scripting.Dictionary")
        For l_l_i = 1 To l_o_selection.Count
            l_l_totalWork = 0...

mromain

XLDnaute Barbatruc
Bonjour,

Je n'ai pas réussi à reproduire le problème.
Chez mois, lorsque je sélectionne une tâche qui a une durée de 2 semaines, cela m'affiche bien 4800 minutes : 60 minutes x 8 heures x 5 jours x 2 semaines.

Qu'est-ce qui ne marche pas chez toi ?

A+
 

mromain

XLDnaute Barbatruc
Rebonjour,

Voici le code mis à jour :
VB:
Sub AfficherTempsTotaux()
Dim l_l_i As Long
Dim l_l_nbItems As Long
Dim l_o_selection As Outlook.Selection
Dim l_l_totalWorkSum As Long
Dim l_l_actualWorkSum As Long
Dim l_l_totalWork As Long
Dim l_l_actualWork As Long
Dim l_s_text As String
Dim l_o_dicoTotalWorkValues As Object   'Scripting.Dictionary
Dim l_o_dicoActualWorkValues As Object  'Scripting.Dictionary

    Set l_o_selection = Application.ActiveExplorer.Selection
    If l_o_selection.Count >= 0 Then
        Set l_o_dicoTotalWorkValues = CreateObject("Scripting.Dictionary")
        Set l_o_dicoActualWorkValues = CreateObject("Scripting.Dictionary")
        For l_l_i = 1 To l_o_selection.Count
            l_l_totalWork = 0
            l_l_actualWork = 0
            On Error Resume Next
             l_l_totalWork = l_o_selection.Item(l_l_i).PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/id/{00062003-0000-0000-C000-000000000046}/81110003")
             l_l_actualWork = l_o_selection.Item(l_l_i).PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/id/{00062003-0000-0000-C000-000000000046}/81100003")
            On Error GoTo 0
            If (l_l_actualWork + l_l_totalWork) > 0 Then
                l_l_nbItems = l_l_nbItems + 1
                l_l_totalWorkSum = l_l_totalWorkSum + l_l_totalWork
                l_l_actualWorkSum = l_l_actualWorkSum + l_l_actualWork
                l_o_dicoTotalWorkValues.Add l_o_dicoTotalWorkValues.Count, l_l_totalWork
                l_o_dicoActualWorkValues.Add l_o_dicoActualWorkValues.Count, l_l_actualWork
            End If
        Next l_l_i
        If l_l_nbItems = 0 Then
            MsgBox "Aucun élément sélectionné n'a de temps de travail défini."
        Else
            l_s_text = l_l_nbItems & " élément(s) sélectionné(s) a/ont des temps de travail définis :"
            l_s_text = l_s_text & vbNewLine & "  - Temps total : " & l_l_totalWorkSum & "  - médiane = " & CalculateMedian(l_o_dicoTotalWorkValues.Items())
            l_s_text = l_s_text & vbNewLine & "  - Temps réel : " & l_l_actualWorkSum & "  - médiane = " & CalculateMedian(l_o_dicoActualWorkValues.Items())
            MsgBox l_s_text
        End If
    Else
        MsgBox "Aucun élément sélectionné."
    End If
    Set l_o_selection = Nothing
End Sub

'https://www.piger-lesmaths.fr/comment-calculer-la-mediane/
Private Function CalculateMedian(l_av_numValues) As Double
Dim l_l_i As Long
Dim l_l_j As Long
Dim l_l_nbValues As Long
Dim l_ad_sortedValues() As Double
Dim l_d_tmpVal As Double
   
    'copier les valeurs
    ReDim sortedValues(LBound(l_av_numValues) To UBound(l_av_numValues))
    For l_l_i = LBound(l_av_numValues) To UBound(l_av_numValues)
        l_ad_sortedValues(l_l_i) = CDbl(l_av_numValues(l_l_i))
    Next l_l_i
   
    'trier les valeurs
    For l_l_i = LBound(l_ad_sortedValues) To UBound(l_ad_sortedValues) - 1: For l_l_j = l_l_i + 1 To UBound(l_ad_sortedValues)
        If l_ad_sortedValues(l_l_j) < l_ad_sortedValues(l_l_i) Then
            l_d_tmpVal = l_ad_sortedValues(l_l_j)
            l_ad_sortedValues(l_l_j) = l_ad_sortedValues(l_l_i)
            l_ad_sortedValues(l_l_i) = l_d_tmpVal
        End If
    Next l_l_j, l_l_i
   
    'calculer la médiane
    l_l_nbValues = UBound(l_ad_sortedValues) - LBound(l_ad_sortedValues) + 1
    If (l_l_nbValues Mod 2) = 0 Then
        CalculateMedian = (l_ad_sortedValues(LBound(l_ad_sortedValues) + l_l_nbValues / 2 - 1) + l_ad_sortedValues(LBound(l_ad_sortedValues) + l_l_nbValues / 2)) / 2
    Else
        CalculateMedian = l_ad_sortedValues(LBound(l_ad_sortedValues) + (l_l_nbValues - 1) / 2)
    End If
End Function

La procedure AfficherTempsTotaux a été mise à jour. Je ne l'ai par contre pas testée.
La fonction CalculateMedian a été ajoutée (et testée, elle). C'est un essai d'implémentation de la méthode décrite dans cette page.

A+
 

mromain

XLDnaute Barbatruc
Bonjour DJARNAUD, le forum,

J'ai bien réussi à reproduire le bug. C'était une petite coquille...
Ci-dessous le code corrigé :
Code:
Sub AfficherTempsTotaux()
Dim l_l_i As Long
Dim l_l_nbItems As Long
Dim l_o_selection As Outlook.Selection
Dim l_l_totalWorkSum As Long
Dim l_l_actualWorkSum As Long
Dim l_l_totalWork As Long
Dim l_l_actualWork As Long
Dim l_s_text As String
Dim l_o_dicoTotalWorkValues As Object   'Scripting.Dictionary
Dim l_o_dicoActualWorkValues As Object  'Scripting.Dictionary

    Set l_o_selection = Application.ActiveExplorer.Selection
    If l_o_selection.Count >= 0 Then
        Set l_o_dicoTotalWorkValues = CreateObject("Scripting.Dictionary")
        Set l_o_dicoActualWorkValues = CreateObject("Scripting.Dictionary")
        For l_l_i = 1 To l_o_selection.Count
            l_l_totalWork = 0
            l_l_actualWork = 0
            On Error Resume Next
             l_l_totalWork = l_o_selection.Item(l_l_i).PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/id/{00062003-0000-0000-C000-000000000046}/81110003")
             l_l_actualWork = l_o_selection.Item(l_l_i).PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/id/{00062003-0000-0000-C000-000000000046}/81100003")
            On Error GoTo 0
            If (l_l_actualWork + l_l_totalWork) > 0 Then
                l_l_nbItems = l_l_nbItems + 1
                l_l_totalWorkSum = l_l_totalWorkSum + l_l_totalWork
                l_l_actualWorkSum = l_l_actualWorkSum + l_l_actualWork
                l_o_dicoTotalWorkValues.Add l_o_dicoTotalWorkValues.Count, l_l_totalWork
                l_o_dicoActualWorkValues.Add l_o_dicoActualWorkValues.Count, l_l_actualWork
            End If
        Next l_l_i
        If l_l_nbItems = 0 Then
            MsgBox "Aucun élément sélectionné n'a de temps de travail défini.", vbInformation, "Détail des tâches"
        Else
            l_s_text = l_l_nbItems & " élément(s) sélectionné(s) a/ont des temps de travail définis :"
            l_s_text = l_s_text & vbNewLine & "  - Temps total : " & l_l_totalWorkSum & "  - médiane = " & CalculateMedian(l_o_dicoTotalWorkValues.Items())
            l_s_text = l_s_text & vbNewLine & "  - Temps réel : " & l_l_actualWorkSum & "  - médiane = " & CalculateMedian(l_o_dicoActualWorkValues.Items())
            MsgBox l_s_text, vbInformation, "Détail des tâches"
        End If
    Else
        MsgBox "Aucun élément sélectionné.", vbExclamation, "Détail des tâches"
    End If
    Set l_o_selection = Nothing
End Sub

'https://www.piger-lesmaths.fr/comment-calculer-la-mediane/
Private Function CalculateMedian(l_av_numValues) As Double
Dim l_l_i As Long
Dim l_l_j As Long
Dim l_l_nbValues As Long
Dim l_ad_sortedValues() As Double
Dim l_d_tmpVal As Double
    
    'copier les valeurs
    ReDim l_ad_sortedValues(LBound(l_av_numValues) To UBound(l_av_numValues))
    For l_l_i = LBound(l_av_numValues) To UBound(l_av_numValues)
        l_ad_sortedValues(l_l_i) = CDbl(l_av_numValues(l_l_i))
    Next l_l_i
    
    'trier les valeurs
    For l_l_i = LBound(l_ad_sortedValues) To UBound(l_ad_sortedValues) - 1: For l_l_j = l_l_i + 1 To UBound(l_ad_sortedValues)
        If l_ad_sortedValues(l_l_j) < l_ad_sortedValues(l_l_i) Then
            l_d_tmpVal = l_ad_sortedValues(l_l_j)
            l_ad_sortedValues(l_l_j) = l_ad_sortedValues(l_l_i)
            l_ad_sortedValues(l_l_i) = l_d_tmpVal
        End If
    Next l_l_j, l_l_i
    
    'calculer la médiane
    l_l_nbValues = UBound(l_ad_sortedValues) - LBound(l_ad_sortedValues) + 1
    If (l_l_nbValues Mod 2) = 0 Then
        CalculateMedian = (l_ad_sortedValues(LBound(l_ad_sortedValues) + l_l_nbValues / 2 - 1) + l_ad_sortedValues(LBound(l_ad_sortedValues) + l_l_nbValues / 2)) / 2
    Else
        CalculateMedian = l_ad_sortedValues(LBound(l_ad_sortedValues) + (l_l_nbValues - 1) / 2)
    End If
End Function

A+
 

DJARNAUD

XLDnaute Occasionnel
Bonjour DJARNAUD, le forum,

J'ai bien réussi à reproduire le bug. C'était une petite coquille...
Ci-dessous le code corrigé :
Code:
Sub AfficherTempsTotaux()
Dim l_l_i As Long
Dim l_l_nbItems As Long
Dim l_o_selection As Outlook.Selection
Dim l_l_totalWorkSum As Long
Dim l_l_actualWorkSum As Long
Dim l_l_totalWork As Long
Dim l_l_actualWork As Long
Dim l_s_text As String
Dim l_o_dicoTotalWorkValues As Object   'Scripting.Dictionary
Dim l_o_dicoActualWorkValues As Object  'Scripting.Dictionary

    Set l_o_selection = Application.ActiveExplorer.Selection
    If l_o_selection.Count >= 0 Then
        Set l_o_dicoTotalWorkValues = CreateObject("Scripting.Dictionary")
        Set l_o_dicoActualWorkValues = CreateObject("Scripting.Dictionary")
        For l_l_i = 1 To l_o_selection.Count
            l_l_totalWork = 0
            l_l_actualWork = 0
            On Error Resume Next
             l_l_totalWork = l_o_selection.Item(l_l_i).PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/id/{00062003-0000-0000-C000-000000000046}/81110003")
             l_l_actualWork = l_o_selection.Item(l_l_i).PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/id/{00062003-0000-0000-C000-000000000046}/81100003")
            On Error GoTo 0
            If (l_l_actualWork + l_l_totalWork) > 0 Then
                l_l_nbItems = l_l_nbItems + 1
                l_l_totalWorkSum = l_l_totalWorkSum + l_l_totalWork
                l_l_actualWorkSum = l_l_actualWorkSum + l_l_actualWork
                l_o_dicoTotalWorkValues.Add l_o_dicoTotalWorkValues.Count, l_l_totalWork
                l_o_dicoActualWorkValues.Add l_o_dicoActualWorkValues.Count, l_l_actualWork
            End If
        Next l_l_i
        If l_l_nbItems = 0 Then
            MsgBox "Aucun élément sélectionné n'a de temps de travail défini.", vbInformation, "Détail des tâches"
        Else
            l_s_text = l_l_nbItems & " élément(s) sélectionné(s) a/ont des temps de travail définis :"
            l_s_text = l_s_text & vbNewLine & "  - Temps total : " & l_l_totalWorkSum & "  - médiane = " & CalculateMedian(l_o_dicoTotalWorkValues.Items())
            l_s_text = l_s_text & vbNewLine & "  - Temps réel : " & l_l_actualWorkSum & "  - médiane = " & CalculateMedian(l_o_dicoActualWorkValues.Items())
            MsgBox l_s_text, vbInformation, "Détail des tâches"
        End If
    Else
        MsgBox "Aucun élément sélectionné.", vbExclamation, "Détail des tâches"
    End If
    Set l_o_selection = Nothing
End Sub

'https://www.piger-lesmaths.fr/comment-calculer-la-mediane/
Private Function CalculateMedian(l_av_numValues) As Double
Dim l_l_i As Long
Dim l_l_j As Long
Dim l_l_nbValues As Long
Dim l_ad_sortedValues() As Double
Dim l_d_tmpVal As Double
   
    'copier les valeurs
    ReDim l_ad_sortedValues(LBound(l_av_numValues) To UBound(l_av_numValues))
    For l_l_i = LBound(l_av_numValues) To UBound(l_av_numValues)
        l_ad_sortedValues(l_l_i) = CDbl(l_av_numValues(l_l_i))
    Next l_l_i
   
    'trier les valeurs
    For l_l_i = LBound(l_ad_sortedValues) To UBound(l_ad_sortedValues) - 1: For l_l_j = l_l_i + 1 To UBound(l_ad_sortedValues)
        If l_ad_sortedValues(l_l_j) < l_ad_sortedValues(l_l_i) Then
            l_d_tmpVal = l_ad_sortedValues(l_l_j)
            l_ad_sortedValues(l_l_j) = l_ad_sortedValues(l_l_i)
            l_ad_sortedValues(l_l_i) = l_d_tmpVal
        End If
    Next l_l_j, l_l_i
   
    'calculer la médiane
    l_l_nbValues = UBound(l_ad_sortedValues) - LBound(l_ad_sortedValues) + 1
    If (l_l_nbValues Mod 2) = 0 Then
        CalculateMedian = (l_ad_sortedValues(LBound(l_ad_sortedValues) + l_l_nbValues / 2 - 1) + l_ad_sortedValues(LBound(l_ad_sortedValues) + l_l_nbValues / 2)) / 2
    Else
        CalculateMedian = l_ad_sortedValues(LBound(l_ad_sortedValues) + (l_l_nbValues - 1) / 2)
    End If
End Function

A+
ça marche parfaitement!!! merci beaucoup!!!!
 

DJARNAUD

XLDnaute Occasionnel
Bonjour à tous,
Je rencontre un petit soucis avec cette macro. Lorsque je mets un critére, par exemple, tache dont la date de fin est le ou avant le "aujourd'hui", la macro me donne un nombre. Si je termine une tache avec récurrence, donc avec une nouvelle date d'échéance future, la macro continue de la comptabiliser, alors que, selon mon critére, elle n'apparait plus dans mon affichage.
D'avance merci
 

DJARNAUD

XLDnaute Occasionnel
Bonjour mromain,

Alors ce que j'appelle critère sont des filtres (cf capture ci-dessous).
J'ai l'impression que ce sont ces filtres qui posent probléme pour les tâches avec récurrence. J'ai l'impression que la macro compte le nombre de tâche indépendamment du nombre de filtre. Ce n'est pas donc la nombre de tâche que j'ai visuellement, aprés filtre, qui est compté, mais un nombre supérieur.
MErci
1725463147616.png
 

mromain

XLDnaute Barbatruc
Rebonjour,

Je t'avoue ne pas trop connaitre la gestion des tâches sur Outlook et ne sais même pas afficher la fenêtre Filtrer que tu montres sur ton message précédent...

Normalement, la macro AfficherTempsTotaux n'est sensée comptabiliser que les tâches sélectionnées dans la liste des tâches.

Du coup, je t'avoue ne pas trop comprendre ni savoir comment reproduire ton cas d'erreur...

A+
 

DJARNAUD

XLDnaute Occasionnel
Bonjour mromain,

Merci pour ta réponse. Pas de soucis, tes compétences m'ont déja largement aidées ;)
SI toutefois tu souhaites creuser le sujet, voici un petit test que j'ai fait et qui me laisse croire que la macro a une faille.
J'ai une liste de tache, avec un temps affecté pour chacune des taches.
J'ai créé des taches périodique avec un temps à 0 pour chacune. Quand je fais la somme du temps total des taches, sans filtre, et la somme du temps total des taches, en excluant les taches périodiques, je n'ai même le même montant. Pour vérification, j'ai filtré pour n'avoir que les taches périodiques, et là il me dit que aucun temps n'étant indiqué, la somme est nulle.

1725956821200.png

Voila voila :)

bonne journée
 

Discussions similaires

Réponses
11
Affichages
506

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette