Problème champ calculé heure

Bonjour,

Depuis hier, je me casse surement bêtement la tête sur un problème, je cherche à calculer le temps de travail des robots de mon entreprise. Grace à une extraction, j'obtient leurs différents mouvements avec les heures, je reporte cela dans un TCD et je faits 2 colonnes, une les heures maxi et l'autre les heures mini. Je n'arrive pas à faire un champ calculé des deux colonnes pour obtenir le temps total de la journée. Je vous joints un fichier pour que ce soit plus clair.

Cordialement,

Merci d'avance pour votre aide.

33test-heure.xlsx (16.33 Ko)

Bonjour,

avec et sans TCD

T'es obligé de garder la forme de ton tableau ??

32test-heure.xlsx (25.04 Ko)

Bonjour

TCD avec la somme des heures avec format spécial de la zone (voir nombre, heures ==>37:30:55

Cordialement

FINDRH

23test-heure-v01.xlsx (21.11 Ko)

Bonjour à vous et merci pour vos réponses.

Dans mon extraction je n'ai pas la possibilité d'ajouter la colonne temps car mon tableau est amené à être modifier.

Est-il possible de passer par un champ calculer pour obtenir cette colonne sans intervention sur le tableau d'extraction.

Cordialement

Bonjour

la colonne temps fait partie du TCD , rajout d'une valeur dans les valeurs calculées, puis propriété et choisir somme

Qu'est ce que je n'ai pas bien compris ?

A ta dispo

FINDRH

re bonjour Findrh

La colonne temps, c'est moi qui l'ai rajoutée !

C'est le problème avec des fichiers soi-disant test et qui ne sont pas exhaustifs !

Et l'exhaustif, il ressemble à quoi, en termes de "toutes les colonnes" avec 10 lignes anonymisées si nécessaire , cela suffirait pour mieux te répondre

Cordialement

FINDRH

Si joints un fichier avec plus de lignes si je peux mieux me faire comprendre.

Merci pour votre aide

23test-heure2.xlsx (85.84 Ko)

Bonjour

Impossible d'insérer un "élément calculé" !

J'ai contourné la difficulté en automatisant le TCD, puis en le figeant, et finalement en rajoutant par VBA une formule calculant la différence entre max et minimum d'une journée par matricule.

Voir onglet BaseBis où tu peux reporter tes données ( sans toucher aux entetes de colonne) et tester

On peut reprendre cette méthode pour réaliser le tableau que tu souhaites.

Si je n'ai pas tout compris, merci de m'envoyer ta maquette finale ( rubriques en entête et colonne, ainsi que le mode de calcul d'heures

Cordialement

FINDRH

17test-heure3.xlsm (86.84 Ko)

Bonjour,

Bonjour FINDRH,

La même mais différente.

ALT F8 et exécuter la procédure.

Cdlt.

23test-heure3.xlsm (68.61 Ko)
Option Explicit

Public Sub ProcessData()
Dim wb As Workbook
Dim wsData As Worksheet, wsResult As Worksheet
Dim rngData As Range
Dim lRow As Long
Dim PTCache As PivotCache
Dim pt As PivotTable

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Base")

    On Error Resume Next
    wb.Worksheets("Résultat").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True

    Set rngData = wsData.Cells(1).CurrentRegion
    Set PTCache = wb.PivotCaches.Create(xlDatabase, rngData)
    wb.Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "Résultat"
    Set pt = PTCache.CreatePivotTable(Cells(3, 1), "PT_1")
    With pt
        .ManualUpdate = True
        .AddFields RowFields:=Array("Matricule dans reflex", "Date validation mouvement")
        With .PivotFields("Heure validation h:m2")
            .Orientation = xlDataField
            .Position = 1
            .Function = xlMax
            .Caption = "Max "
            .NumberFormat = "h:mm;@"
        End With
        With .PivotFields("Heure validation h:m")
            .Orientation = xlDataField
            .Position = 2
            .Function = xlMin
            .Caption = "Min "
            .NumberFormat = "h:mm;@"
        End With
        .RowAxisLayout xlTabularRow
        .RepeatAllLabels xlRepeatLabels
        .ColumnGrand = False
        .PivotFields("Matricule dans reflex").Subtotals(1) = False
        .PivotFields("Matricule dans reflex").Caption = "Matricule"
        .PivotFields("Date validation mouvement").Caption = "Date validation"
        .ManualUpdate = False
        .TableRange1.Offset(1, 0).Resize(.TableRange1.Rows.Count - 1).Copy
    End With

    [F4].PasteSpecial xlPasteValuesAndNumberFormats
    Application.CutCopyMode = False
    [J4] = "Durée"
    lRow = Cells(Rows.Count, "F").End(xlUp).Row
    Range(Cells(5, "J"), Cells(lRow, "J")).FormulaR1C1 = "=MOD(RC[-2]-RC[-1],1)"
    Range(Cells(5, "J"), Cells(lRow, "J")).Value = Range(Cells(5, "J"), Cells(lRow, "J")).Value
    [A1:D1].EntireColumn.Delete
    ActiveSheet.ListObjects.Add xlSrcRange, [B4].CurrentRegion, , xlYes
    [B4].Select

    Set pt = Nothing: Set PTCache = Nothing
    Set rngData = Nothing
    Set wsData = Nothing
    Set wb = Nothing

End Sub

Bonjour Jean Eric

Encore appris des choses sur les sélections dans ton code !

Merci

Cordialement

FINDRH

Bonjour à vous,

SUPER! C'est vraiment super merci beaucoup! J'ai beaucoup à apprendre tout court pour ma part

Merci à tous pour votre aide précieuse!

Cordialement

Bonjour à tous,

Je reviens vers vous pour savoir comment faire pour ajouter le nombre de palette. Dans la feuille "Base" il y a la colonne "Numéro du support", j'aimerais retrouver le résultat dans la feuille "Résultat" dans la colonne "Nb de pal".

Voici le fichier,

Cordialement


Avec le fichier c'est mieux

19test-heure3-7.xlsm (67.88 Ko)

Bonjour,

Ci-dessous la procédure modifiée en conséquence.

Cdlt

Option Explicit

Public Sub ProcessData()
Dim wb As Workbook
Dim wsData As Worksheet, wsResult As Worksheet
Dim rngData As Range
Dim lRow As Long
Dim PTCache As PivotCache
Dim pt As PivotTable

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Base")

    On Error Resume Next
    wb.Worksheets("Résultat").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True

    Set rngData = wsData.Cells(1).CurrentRegion
    Set PTCache = wb.PivotCaches.Create(xlDatabase, rngData)
    wb.Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "Résultat"
    Set pt = PTCache.CreatePivotTable(Cells(3, 1), "PT_1")
    With pt
        .ManualUpdate = True
        .AddFields RowFields:=Array("Matricule dans reflex", "Date validation mouvement")
        With .PivotFields("Numéro du support")
            .Orientation = xlDataField
            .Position = 1
            .Function = xlSum
            .Caption = "NB pal"
            .NumberFormat = "#,##0"
        End With
        With .PivotFields("Heure validation h:m2")
            .Orientation = xlDataField
            .Position = 2
            .Function = xlMax
            .Caption = "Max "
            .NumberFormat = "h:mm;@"
        End With
        With .PivotFields("Heure validation h:m")
            .Orientation = xlDataField
            .Position = 3
            .Function = xlMin
            .Caption = "Min "
            .NumberFormat = "h:mm;@"
        End With
        .RowAxisLayout xlTabularRow
        .RepeatAllLabels xlRepeatLabels
        .ColumnGrand = False
        .PivotFields("Matricule dans reflex").Subtotals(1) = False
        .PivotFields("Matricule dans reflex").Caption = "Matricule"
        .PivotFields("Date validation mouvement").Caption = "Date validation"
        .ManualUpdate = False
        .TableRange1.Offset(1, 0).Resize(.TableRange1.Rows.Count - 1).Copy
    End With

    [G4].PasteSpecial xlPasteValuesAndNumberFormats
    Application.CutCopyMode = False
    [L4] = "Durée"
    lRow = Cells(Rows.Count, "G").End(xlUp).Row
    With Range(Cells(5, "L"), Cells(lRow, "L"))
        .FormulaR1C1 = "=MOD(RC[-2]-RC[-1],1)"
        .Value = Range(Cells(5, "L"), Cells(lRow, "L")).Value
    End With
    [A1:E1].EntireColumn.Delete
    ActiveSheet.ListObjects.Add xlSrcRange, [B4].CurrentRegion, , xlYes
    [B4].Select

    Set pt = Nothing: Set PTCache = Nothing
    Set rngData = Nothing
    Set wsData = Nothing
    Set wb = Nothing

End Sub

Bonjour à tous,

Je cherche à améliorer de nouveau mon tableau, nous avons réussi à extraire de notre système la durée total des missions (dernière colonne du tableau). Je cherche donc à ajouter cette colonne à mon tableau résultat.

Grâce à cette colonne, j'obtiendrai le résultat du travail réel sur la journée en le comparant à la colonne "Durée" dans la feuille "Résultat".

J'ai essayé d'ajouter cette colonne moi même, mais le tableau ne ressemble plus à rien .. Voici le texte que j'ai essayé d'ajouter

With .PivotFields("durée mission")

.Orientation = xlDataField

.Position = 4

.Function = xlSum

.Caption = "Total réel "

.NumberFormat = "h:mm;@"

Si je ne suis pas assez clair, faite le moi savoir!

Merci beaucoup pour votre aide!

9excel-pratique.xlsm (102.84 Ko)

Bonjour,

En retour, le fichier modifié.

Peux tu expliquer la raison des colonnes C et D identiques ?

A te relire.

Cdlt.

Bonjour Jean-Eric,

Merci encore pour votre aide!

Avant de solliciter votre aide, je n'avais pas d'autre moyen avec mes connaissances pour afficher les valeurs maxi et mini avec le TCD.

Je suppose que la VBA contourne le problème, donc une des deux colonnes n'est plus utile si c'est le cas.

Merci encore

Re,

Reviens vers moi quand tu auras réfléchis.

Mais, supprimer une colonne ne devrait pas modifier la procédure VBA et les résultats.

Cdlt.

Re,

J'ai supprimé une colonne et ça ne perturbe pas le résultat!

Est-il possible de donner un nom fixe au tableau dans la feuille "résultat"?

Car à chaque fois que je rafraîchis, le nom de celui-ci évolue ( Tableau1, Tableau2 etc...), je dois donc modifier le nom dans mes TCD

Merci

Re,

Modifie la procédure ainsi :

With ActiveSheet
        .ListObjects.Add xlSrcRange, [B4].CurrentRegion, , xlYes
        .ListObjects(1).DisplayName = "TOTO"
        [B4].Select
    End With
Rechercher des sujets similaires à "probleme champ calcule heure"