Heures / jours / équipe de production

Bonjour à tous,

D'habitude je trouve la solution sur le forum mais là je suis bloquée. ..

voilà mon problème, j'extrais d'un logiciel des données de production en choisissant l'intervalle de date par exemple du 23/07 au 24/07. nous avons une production en 3 x 8 05:00 à 13:00

13:00 à 21:00

21:00 à 5:00

j'ai de cartons déclarés sur une production

Date Production / Quantité/ Motif/ Utilisateur Article

23/07/2013 03:34 / 1000 / personne 1 / carton de produit A

23/07/2013 03:46 / 200 / personne 1 / carton de produit b

23/07/2013 21:50 / 3000 / personne 1 / carton de produit c

23/07/2013 23:46 / 200 / personne 1 / carton de produit b

24/07/2013 03:46 / 1000 / personne 1 / carton de produit a

j'ai fais un tableau avec macro pour les mise en forme et convertir certaines données pour les calculs sur les quantités, puis toujours en macro j'ai inséré un tableau croisé dynamique pour calculer par moyen de filtre par la suite sur les 3 poste de production quelles quantités on été produites pour chaque article.

cela marche sur les équipe en journée mais sur l'équipe de nuit je suis obligée de sélectionner 2 jours le 23 et le 24 et de décocher tous les heures du 23 de 00:00 à 21:00 et toutes celles du 24 de 21:00 à 00:00

je voudrai savoir quelle type de formule je peux insérer dans ma macro pour que le poste de nuit du 23/07 à 21:00 au 24/07 à 05:00 du matin me dise = poste de nuit du 23/07 au 24/07

je ne sais pas si je suis assez clair, si la cellule est comprise entre le 23/07/2013 de 21:00 à 00:00 et du 24/07/2013 de 00:00 à 05:00 alors = poste nuit du 23 au 24

sachant que je fais une extraction des données tous les jours il faut que ma macro marche et que je n'ai pas le besoin de changer la formule à chaque fois

voilà

merci à ceux qui me viendrons en aide

très sincèrement

Sylvie

Bonjour. Bienvenue sur le Forum

il faut que ma macro marche et que je n'ai pas le besoin de changer la formule à chaque fois

Si c'est une macro, il n'y aura pas de formules, si c'est avec une formule, pas besoin de macro.

Peux-tu joindre un fichier Excel?

Cordialement

d'abord merci de m'aider

ci-joint le fichier avec l'ongle bilan (c'est les données brutes)

sur l'onglet feuille 1 c'est ma macro

pour gagner du temps (puisque je dois faire l'opération d'extraction tous les jours) j'ai fais une macro (résultat tableau croisé dynamique + lus quelque retouches sur les formats)

le problème c'est l'analyse des données sur des poste en 3 x 8

ci dessous ma macro

Sub bilan_prod()

'

' bilan_prod Macro

'

' Touche de raccourci du clavier: Ctrl+b

'

Columns("C:C").Select

Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Columns("B:B").Select

Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _

TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _

Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _

:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True

Columns("C:C").Select

Selection.Delete Shift:=xlToLeft

Columns("B:B").Select

Selection.NumberFormat = "#,##0"

Columns("A:A").Select

Selection.NumberFormat = "m/d/yyyy h:mm"

Columns("A:A").Select

Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _

TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _

Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _

:=Array(1, 4), TrailingMinusNumbers:=True

Selection.ColumnWidth = 12.86

Range("A3").Select

Columns("A:A").EntireColumn.AutoFit

Sheets.Add

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _

"Bilan_de_production!R1C1:R10031C6", Version:=xlPivotTableVersion10). _

CreatePivotTable TableDestination:="Feuil1!R3C1", TableName:= _

"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10

Sheets("Feuil1").Select

Cells(3, 1).Select

With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _

"Utilisateur")

.Orientation = xlPageField

.Position = 1

End With

With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _

"Date Production")

.Orientation = xlPageField

.Position = 1

End With

ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _

PivotTables("Tableau croisé dynamique1").PivotFields("Quantité"), _

"Nombre de Quantité", xlCount

With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Article" _

)

.Orientation = xlRowField

.Position = 1

End With

With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _

"Nombre de Quantité")

.Caption = "Somme de Quantité"

.Function = xlSum

End With

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Article"). _

AutoSort xlAscending, "Article"

End Sub

ps j'ai compressé le fichier (trop gros)

merci encore de ton aide

très sincèrement

Sylvie

Bonjour,

Un début de réponse avec une fonction personnalisée.

Voir fichier.

A te relire

Option Explicit
Public Function Essai(Cellule As Date)
Dim D As Date, D1 As Date, H As Date
Dim J As Integer

    D = Int(Cellule)
    D1 = D + 1
    J = Day(D)
    H = (Cellule - Int(Cellule)) * 24

    If H > 5 And H <= 13 Then
        Essai = D
        Exit Function
    End If
    If H > 13 And H <= 21 Then
        Essai = D
        Exit Function
    End If
    If H <= 5 Then
        Essai = "nuit du " & J - 1 & " au " & J
    Else
        Essai = "nuit du " & J & " au " & J + 1
    End If

End Function

bonjour,

J'ai essayer d'incorporer ta formule à la suite de à ma macro mais rien ne marche, désolé pour mon incompétence mais où dois je mettre cette formule (avant ou après dans ma macro)

merci

Re,

Tu auras certainement constaté que j'ai modifié les valeurs texte de la Colonne A en valeurs numériques

Cdlt

bonjour

La fonction marche mais juste lorsque je l'inserts dans une macro pour ce classeur ci, et encore il faut que je ferme puis re-ouvre le fichier une fois que j'ai copié ta solution dans ma macro.

inseré dans le dossier des macros (où j'ai toutes mes macros) cela ne marche plus.

je pense que je ne fais pas les choses correctement, depuis hier je tente et retente mais sans résultat.

donc si tu as des conseils je suis preneuse !!

merci de ton aide.

Sylvie

Bonjour,

Peux-tu envoyer le fichier initial (avant exécution de ta macro, donc sans TCD)?

A te relire

Edit : sinon testes ce code pour la première partie de la macro

Option Explicit
Public Sub bilan_prod()
' Touche de raccourci du clavier: Ctrl+b
'
Dim Ws_source As Worksheet, Ws_résultat As Worksheet
Dim Plage As Range
Dim Derligne As Long, i As Long

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    Set Ws_source = Worksheets("Bilan_de_production")
    Derligne = Ws_source.Range("A" & Rows.Count).End(xlUp).Row

    With Ws_source
            With .Columns("C:C")
                .Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
                .TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
                    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
                    Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
                    :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
                .EntireColumn.AutoFit
                .Delete Shift:=xlToLeft
            End With

            With .Columns("B:B")
                .NumberFormat = "#,##0"
            End With

            With .Columns("A:A")
                .TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
                    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
                    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
                    :=Array(1, 4), TrailingMinusNumbers:=True
                .EntireColumn.AutoFit
            End With

            .[G1] = "DateProduction 1"
            For i = 2 To Derligne
                .Cells(i, "G") = Essai(i, 1)
            Next

    End With

    Application.DisplayAlerts = False

End Sub

Re,

En attendant ton fichier, procédures à copier et à tester...

A te relire

Option Explicit
Public Ws_source As Worksheet
Public Ws_résultat As Worksheet
Public Plage As Range
Public Derligne As Long
Public i As Long
Public Sub Bilan_production()
' Touche de raccourci du clavier: Ctrl+b
    Traitement_Feuille
    Création_TCD
End Sub
Public Sub Traitement_Feuille()

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    Set Ws_source = Worksheets("Bilan_de_production")
    Derligne = Ws_source.Range("A" & Rows.Count).End(xlUp).Row

    With Ws_source

            With .Columns("C:C")
                .Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
                .TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
                    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
                    Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
                    :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
                .EntireColumn.AutoFit
                .Delete Shift:=xlToLeft
            End With

            With .Columns("B:B")
                .NumberFormat = "#,##0"
            End With

            With .Columns("A:A")
                .TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
                    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
                    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
                    :=Array(1, 4), TrailingMinusNumbers:=True
                .EntireColumn.AutoFit
            End With

            .[G1] = "Date Production 1"
            For i = 2 To Derligne
                .Cells(i, "G") = Essai(i, 1)
            Next

    End With

    Set Ws_source = Nothing
    Application.DisplayAlerts = False

End Sub
Public Sub Création_TCD()
Dim PTCache As PivotCache
Dim PT As PivotTable

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    Set Ws_source = Worksheets("Bilan_de_production")

    On Error Resume Next
        Worksheets("TCD 1").Delete
    On Error GoTo 0

    Set Plage = Range("A1").CurrentRegion

    Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
        SourceData:=Plage)

    Worksheets.Add after:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = "TCD"
    Set Ws_résultat = ActiveSheet

    Set PT = PTCache.CreatePivotTable(TableDestination:=Ws_résultat.Range("A1"), _
        TableName:="TCD_1")

    With PT

        With .PivotFields("Utilisateur")
            .Orientation = xlPageField
            .Position = 1
        End With

        With .PivotFields("Date Production 1")
            .Orientation = xlPageField
            .Position = 2
        End With

        .PivotFields("Article").Orientation = xlRowField
        With .PivotFields("Quantité")
            .Orientation = xlDataField
            .Caption = "Qté totale"
            .Function = xlSum
            .NumberFormat = "0.000"
        End With

        .ColumnGrand = True
        .FieldListSortAscending = True
        .ShowDrillIndicators = False

    End With

    Set Ws_source = Nothing: Set Ws_résultat = Nothing: Set Plage = Nothing
    Application.DisplayAlerts = True

End Sub

bonjour

ci-joint le fichier brut

je test tes macros cet après midi.

merci 1000 fois de me consacrer de ton temps.

sylvie

Bonjour,

Pas de nouvelles...

Les tests ont-ils été satisfaisants. Dans l'affirmative, penses à clore le sujet.

Cdlt.

Rechercher des sujets similaires à "heures jours equipe production"