Extraire l'heure d'ouverture/de fermeture d'un fichier Excel

Bonjour,

Oui, je comprend, mais l'opérateur à le droit de fermer le dossier que 3 fois (pause 1, pause 2 et le soir) et il faudrait que lorsque il le rouvre le lendemain les heures soit décalées à la bonne date.

Merci

Aubin

Bonjour

remplacez le code ouverture par ceci

Private Sub Workbook_Open()
Dim lig As Integer, dlg As Integer
Dim Plage As Range, c As Range
With Sheets(1)
    lig = 5
    dlg = Range("C" & Rows.Count).End(xlUp).Row
    If dlg < 5 Then lig = 5 Else: lig = dlg + 1
    Set Plage = .Range(.Cells(1, 2), .Cells(1, .Cells(1, Columns.Count).End(xlToLeft).Column))
    For Each c In Plage
        If CDate(c.Value) = Format(Date, "short date") Then
            .Cells(lig, c.Column + 1) = Format(Now, "hh:mm:ss")
        End If
    Next c
End With
End Sub

et le code de fermeture par celui ci

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lig As Integer, dlg As Integer
Dim Plage As Range, c As Range
With Sheets(1)
    lig = 5
    dlg = Range("B" & Rows.Count).End(xlUp).Row
    If dlg < 5 Then lig = 5 Else: lig = dlg + 1
    Set Plage = .Range(.Cells(1, 2), .Cells(1, .Cells(1, Columns.Count).End(xlToLeft).Column))
    For Each c In Plage
        If CDate(c.Value) = Format(Date, "short date") Then
            .Cells(lig, c.Column) = Format(Now, "hh:mm:ss")
        End If
    Next c
End With
With ThisWorkbook
    Application.DisplayAlerts = False
    .Save
End With
End Sub
Cela suppose que vous avez bien adapté les modifications dans le fichier (fusion etc...

Cordialement

Bonjour DAN,

J'étais en congé, je m'excuse de l'attente

Cependant, votre dernier code ne fonctionne pas, ça ne m'affiche rien du tout sur la feuille

Merci

Aubin

Bonjour

J'ai tout de même tester avant...
Avez-vous testé sur le fichier posté ici ?

Bonjour,

Non je n'ai pas testé car je ne vois aucun fichier à télécharger

Désolé

Aubin

Non je n'ai pas testé car je ne vois aucun fichier à télécharger

Reprenez votre fichier que vous avez posté --> https://forum.excel-pratique.com/s/goto/1025927 et relisez ce que j'ai écrit dans ce post -> https://forum.excel-pratique.com/s/goto/1026311

Bonjour Dan,

C'est bon j'ai trouvé l'erreur, c'est que dans mon fichier actuel que j'ai remodifier depuis, la première date commence forcement le Lundi ensuite le Mardi, etc

Ce n'est pas forcément la date d'aujourd'hui

Et lorsque que je mets pas la date d'aujourd'hui le code ne marche pas

Mon problème est donc que le code marche avec une date donnée

Merci

Aubin

Bonjour

Et lorsque que je mets pas la date d'aujourd'hui le code ne marche pas

Je ne sais pas ce que vous faites avec votre fichier mais en B1 vous avez bien le 04/01/2022 ?

Le code recherche la date du jour

Edit : j'ai modifié les deux codes en fonction du fait que vous commencez le lundi en B1 (donc ici comme janvier B1 = 04/01/2022

Code ouverture

Private Sub Workbook_Open()
Dim lig As Integer, dlg As Integer
Dim Plage As Range, c As Range
With Sheets(1)
    lig = 5
    Set Plage = .Range(.Cells(1, 2), .Cells(1, .Cells(1, Columns.Count).End(xlToLeft).Column))
    For Each c In Plage
        If CDate(c.Value) = Format(Date, "short date") Then
            dlg = Cells(Rows.Count, c.Column + 1).End(xlUp).Row
            If dlg < 5 Then lig = 5 Else: lig = dlg + 1
            .Cells(lig, c.Column + 1) = Format(Now, "hh:mm:ss")
        End If
    Next c
End With
End Sub

code de fermeture

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lig As Integer, dlg As Integer
Dim Plage As Range, c As Range
With Sheets(1)
    lig = 5
    'dlg = Range("B" & Rows.Count).End(xlUp).Row
    'If dlg < 5 Then lig = 5 Else: lig = dlg + 1
    Set Plage = .Range(.Cells(1, 2), .Cells(1, .Cells(1, Columns.Count).End(xlToLeft).Column))
    For Each c In Plage
        If CDate(c.Value) = Format(Date, "short date") Then
            dlg = Cells(Rows.Count, c.Column).End(xlUp).Row
            If dlg < 5 Then lig = 5 Else: lig = dlg + 1
            .Cells(lig, c.Column) = Format(Now, "hh:mm:ss")
        End If
    Next c
End With
With ThisWorkbook
    Application.DisplayAlerts = False
    .Save
End With
End Sub

Bonjour,

je vous remercie pour tous ce que vous m'avez apporté mais j'ai encore un problème sur mon fichier :

Sur mon fichier actuel, j'ai une case qui compte toutes les heures totales de l'opérateur par semaines (cette case se trouve en D21)

Je voudrais qu'à la fin de chaque semaines (le dimanche soir à minuit), les heures totales s'affiche sur une autre feuille (feuil7) afin de récapituler toutes les heures de toutes les semaines de l'année

J'espère que voue pourrez m'aider sur ce problème

Merci

Bonne journée

Bonjour

Je voudrais qu'à la fin de chaque semaines (le dimanche soir à minuit), les heures totales s'affiche sur une autre feuille (feuil7) afin de récapituler toutes les heures de toutes les semaines de l'année

Pourquoi ne faites-vous pas une simple formule qui vous donne le total des heures quelque soit le nombre de jours de la semaine.

en D21 de votre feuil7, mettez cette formule --> =D12+G12+J12+M12
ensuite, mettez la cellule D21 au format personnalisé --> [HH]:MM:SS

Cordialement

Oui, j'ai déjà fais cette formule justement en D21 mais lors de la semaine prochaine, les heures vont changer en fonction de la date et donc les heures totales de la semaine précédente vont être modifiées.

Je voudrait donc que les heures totales de chaque semaines soit inscrites dans un tableau (feuil7)

Merci

Aubin

Votre fichier est fait comment ? Une feuille par semaine ??? et le total uniquement sur la feuil7 ?

Bonjour,

Je vous transmets un fichier pour mieux comprendre

Dites-le moi si vous voulez des renseignements

Bonne journée

Aubin

8classeur1-4.xlsm (26.89 Ko)

Bonjour

Déjà il y a un souci puisque d'un coté vous avez les dates et que de l'autre vous avez S1, S2....

Autre souci, je vous ai dit de ne pas fusionner les cellules en vous donnant la méthode idéale dans un post précédent (https://forum.excel-pratique.com/s/goto/1025931) Là toutes vos dates sont fusionnées...

Pourquoi fusionner aussi lignes 1 et 2 ???

Bonjour Dan,

Oui, j'avais modifier mon fichier de base pour les cellules mais pas celui en exemple

De plus dans la feuil2 j'aimerais que les heures y soit inscrite en fonction de la date de la Feuil1

Par exemple : Feuil2 : Dans la ligne de S1 mettre l'heure du 1er janvier, du 2 janvier, du 3 janvier, etc...

J'espère que vous comprendrez

Bonne journée

Aubin

Bonjour

Oui, j'avais modifier mon fichier de base pour les cellules mais pas celui en exemple

Ben repostez votre fichier sans les cellules fusionnées. Je n'arrive jamais à comprendre pourquoi les utilisateurs font cela. On sait tout de même agrandir une ligne plutot que de fusionner avec une autre

Dans la ligne de S1 mettre l'heure du 1er janvier, du 2 janvier, du 3 janvier, etc...

je ne suis pas sûr que vous avez lu mon message précédent...

Crdlt

Bonjour,

je vous renvoie mon nouveau fichier modifié

J'espère que vos comprendrez mon problème

Merci

Aubin

12classeur1-4.xlsm (28.06 Ko)

J'espère que vos comprendrez mon problème

Dingue tout de même... mon message ici -->https://forum.excel-pratique.com/s/goto/1029670 --> d'un coté vous avez les dates et que de l'autre vous avez S1, S2....

Vous voulez gérer comment ?

Puis vous refusionnez de nouveau en feuille 2

EDIT :

Bon essayez ceci :

- En feuil1 en A1, mettez cette formule --> ="S" & NO.SEMAINE.ISO(B1)
- en feuil2 colonne A, défusionnez toutes les cellules où vous avez renseigné le num de Semaine. Ensuite mettez cette colonne A au format comme je vous ai expliqué plus haut dans le fil (Alignement --> centré sur plusieurs cellules)
- en feuil2, mettez la colonne H au format --> [h]:mm:ss et ajoutez la formule pour additionner les heures
- Dans un module, mettez ce code dans un module pour tester

Sub test()
Dim Lig As Byte
Dim i As Byte, j As Byte

On Error Resume Next
Lig = Sheets("Feuil2").Range("A:A").Find(CStr(Sheets("Feuil1").Range("A1").Value), LookIn:=xlValues, lookat:=xlWhole).Row
If Lig = 0 Then Exit Sub
On Error GoTo 0
j = 3
For i = 4 To 19 Step 3
    With Sheets("Feuil2")
        .Cells(Lig, j).Value = Sheets("Feuil1").Cells(12, i).Value
        .Cells(Lig, j).NumberFormat = "[h]:mm:ss"
    End With
    j = j + 1
Next i
End Sub

Crdlt

Bonjour Dan,

Oui effectivement j'ai refusionner en feuil2 car je voulais faire ce type de case avec une droite qui divise la case en deux et je n'ai que trouver ce système de fusionner

image

Autrement concernant les semaines, cette case ci-dessous permet de savoir dans quelle semaine nous sommes (Feuil1)

image

Et je n'ai pas d'un coté les dates et de l'autre les semaines, car sur les 2 feuilles les données communes sont les semaines

Cordialement

Aubin

Bonjour

Oui effectivement j'ai refusionner en feuil2 car je voulais faire ce type de case avec une droite qui divise la case en deux et je n'ai que trouver ce système de fusionner

Oui j'avais compris. Je vous ai expliqué comment faire dans mon post précédent pour éviter la fusion

Autrement concernant les semaines, cette case ci-dessous permet de savoir dans quelle semaine nous sommes (Feuil1)

Votre formule en D17 n'est pas correcte. Aujourd'hui on est en semaine 2 et non 3
Si vous voulez utilisez la cellule D17 au lieu de la cellule A1 :
- en D17, mettez la formule que je vous ai proposée dans mon post d'hier
- Modifiez cette ligne dans le code

Lig = Sheets("Feuil2").Range("A:A").Find(CStr(Sheets("Feuil1").Range("D17").Value), LookIn:=xlValues, lookat:=xlWhole).Row
Rechercher des sujets similaires à "extraire heure ouverture fermeture fichier"