IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Impact heure d'été sur heure dernière modification d'un fichier pdf [AC-2019]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 123
    Par défaut Impact heure d'été sur heure dernière modification d'un fichier pdf
    Bonjour à tous,

    Cela fait un bon moment que je n'ai pas fait appel à votre aide.

    J'ai élaboré depuis plusieurs années un programme pour enregistrer les contrôles dimensionnels sur des fabrications de pièces, en archivant des fichiers pdf dans un dossier qui sont des gammes de contrôles.

    Je viens de m'apercevoir que lorsqu'on bascule à l'heure d'été, l'heure de dernière modification d'un fichier pdf est différente avec le code VBA que j'ai créé.

    Je m'explique, à l'aide du code qui est ci-dessous, je récupère la date et heure de la dernière modification du document pdf, que je met dans un champ d'un formulaire, qu'ensuite j'enregistre dans une table.

    J'ai un document pdf dont la date de dernière modification lorsqu'on regarde dans l'explorateur Windows ou que l'on fait propriété est le 21/09/2023 07:40:16.

    Après le passage à l'heure d'été, le code VBA me donne 21/09/2023 08:40:16 alors que dans l'explorateur Windows ou dans propriété la dernière modification est du 21/09/2023 07:40:16.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Function OuvertureDoc(StrCheminDossier As String, StrNameFichier As String, StrDocName As String, StrControlName As String, StrFichier As String, InTGestErr As Integer, Optional StrTypeDoc As String) As Boolean
     
    On Error GoTo GestionErr
     
    Dim Msg, style, Title, Response
     
    'Instanciation du FSO
    Set oFSO = New Scripting.FileSystemObject
    'Instanciation du dossier
    Set oFld = oFSO.GetFolder(StrCheminDossier)
    'Instanciation de l'objet File
    Set oFl = oFld.Files(StrNameFichier)
     
    If StrDocName = "F_Carte_Validation_Demarrage_Serie" Then GCDateModif = oFl.DateLastModified
    GCDateModif est une variable Public déclarée dans un autre module que celui dont le code ci-dessus est issu.

    Les variables ci-dessous sont déclarées plus haut dans mon module.

    Dim oFSO As Scripting.FileSystemObject
    Dim oFld As Scripting.Folder
    Dim oFl As Scripting.File

    Quelqu'un a une petite idée de ce qu'il faut que je modifie dans le code pour que le passage à l'heure d'été n'ajoute pas 1h00 à mon résultat via le code VBA ?

    Merci par avance de votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 438
    Par défaut
    Bonjour,

    Avec l'aide de Mistral, ce code permet de tenir compte de l'heure d'été telle que fixée en Europe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Option Explicit
     
    '--- version VBA --- donne les heures telles qu'affichées dans l'explorateur de fichiers
    '--- uniquement valable pour emploi en Europe
    '--- les heures d'été/hiver n'étant pas fixées de la même façon partout dans le monde
     
    Sub GetFileLastModifiedDate()
        Dim fso As Object
        Dim file As Object
        Dim filePath As String
        Dim lastModifiedDate As Date
        Dim isDST As Boolean
     
        ' Chemin du fichier
        filePath = "C:\Dossier\...\Fichier.xyz"     '--- adresse fichier
     
        ' Créer l'objet FileSystemObject
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set file = fso.GetFile(filePath)
     
        ' Obtenir la date de dernière modification
        lastModifiedDate = file.DateLastModified
     
        ' Vérifier si l'heure d'été est active
        isDST = IsDaylightSavingTime(lastModifiedDate)
     
        ' Ajuster l'heure si nécessaire
        If isDST Then
            lastModifiedDate = DateAdd("h", 1, lastModifiedDate)
        End If
     
        ' Afficher la date corrigée
        Debug.Print "Date de dernière modification : " & lastModifiedDate
    End Sub
     
    Function IsDaylightSavingTime(dt As Date) As Boolean
        ' Vérifie si la date donnée est pendant l'heure d'été
        ' Cette fonction est une simplification et peut nécessiter des ajustements
        ' en fonction des règles spécifiques de l'heure d'été dans votre région.
        Dim startDST As Date
        Dim endDST As Date
     
        ' Dates de début et de fin de l'heure d'été pour l'année donnée
        startDST = DateSerial(Year(dt), 3, 31)
        endDST = DateSerial(Year(dt), 10, 31)
     
        ' Ajuster pour le dernier dimanche de mars et octobre --- par l'Europe (pas les USA)
        startDST = startDST - Weekday(startDST) + 1
        endDST = endDST - Weekday(endDST) + 1
     
        IsDaylightSavingTime = (dt >= startDST And dt < endDST)
    End Function
    Cordialement.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 123
    Par défaut
    Bonjour EricDgn,

    Cela correspond à mon besoin.

    J'avais demandé à Mistral de me trouver une solution mais celle-ci ne fonctionnait pas ( les dates heure d'été et d'hiver n'étaient pas bonnes ), le code ressemble à celui que tu as proposé mais il diffère dans la fonction "IsDaylightSavingTime" ( voir code ci-dessous )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub GetFileLastModifiedDate()
        Dim filePath As String
        Dim lastModified As Date
        Dim adjustedTime As Date
     
        ' Remplacez par le chemin de votre fichier PDF
        filePath = "C:\chemin\vers\votre\fichier.pdf"
     
        ' Obtenir la date et l'heure de la dernière modification
        lastModified = FileDateTime(filePath)
     
        ' Ajuster le fuseau horaire si nécessaire
        ' Par exemple, si vous êtes en heure d'été et que vous devez ajuster l'heure
        If IsDaylightSavingTime(lastModified) Then
            adjustedTime = DateAdd("h", -1, lastModified)
        Else
            adjustedTime = lastModified
        End If
     
        ' Afficher la date et l'heure ajustées
        MsgBox "Date et heure de la dernière modification (ajustée) : " & adjustedTime
    End Sub
     
    Function IsDaylightSavingTime(dt As Date) As Boolean
        ' Vérifie si la date donnée est en heure d'été
        ' Cette fonction doit être adaptée à votre fuseau horaire et règles locales
        ' Exemple pour l'Europe (dernier dimanche de mars au dernier dimanche d'octobre)
        Dim startDST As Date
        Dim endDST As Date
     
        startDST = DateSerial(Year(dt), 3, 31 - (Day(DateSerial(Year(dt), 3, 31)) + Weekday(DateSerial(Year(dt), 3, 31))) Mod 7)
        endDST = DateSerial(Year(dt), 10, 31 - (Day(DateSerial(Year(dt), 10, 31)) + Weekday(DateSerial(Year(dt), 10, 31))) Mod 7)
     
        IsDaylightSavingTime = (dt >= startDST And dt < endDST)
    End Function
    De ce fait, j'avais trouvé sur le forum un code VBA de "kedmard" du 28/10/2012, qui trouvait la date du passage d'été et d'hiver avec 2 fonctions différentes, que j'ai fusionné et qui parvient au même résultat que toi ( voir code ci-dessous si ça intéresse quelqu'un ), il me restait juste à l'implémenter dans mon code existant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Function VerifDateEte() As Boolean
     
    Dim debutete As Date
    Dim debuthiver As Date
    Dim refdate As Variant
    Dim jour As Integer
    Dim dt As Date
    Dim Dtchghivete As Date
    Dim Dtchgetehiv As Date
     
    dt = Date
     
    refdate = "25/03/" & Year(dt) & " 02:00:00"
    'on se place au le 25 mars de l'année de dt
    debutete = CDate(refdate)
    jour = Weekday(debutete, vbMonday)
    'Le passage à l'heure d'été intervient à l'instant:
    refdate = (32 - jour) & "/03/" & Year(dt) & " 02:00:00"
    Dtchghivete = CDate(refdate)
     
    'on se place au 25 Octobre
    refdate = "25/10/" & Year(dt) & " 03:00:00"
    debuthiver = CDate(refdate)
    jour = Weekday(debuthiver, vbMonday)
    'Le passage à l'heure d'hiver intervient à l'instant:
    refdate = (32 - jour) & "/10/" & Year(dt) & " 03:00:00"
    Dtchgetehiv = CDate(refdate)
     
    'Vérification si la date du jour est dans la plage heure d'été
    VerifDateEte = (dt >= Dtchghivete And dt < Dtchgetehiv)
     
    End Function
    Je vais utiliser ta solution.

    Un grand merci à toi pour avoir passer du temps à apporter une solution à mon problème.

    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modification d'un fichier PDF
    Par miss_socrates dans le forum Utilitaires et Sécurités
    Réponses: 2
    Dernier message: 03/01/2016, 18h55
  2. Réponses: 9
    Dernier message: 16/06/2013, 04h31
  3. Récupérer l'heure de modification d'un fichier
    Par qmike dans le forum VBScript
    Réponses: 2
    Dernier message: 31/01/2012, 14h45
  4. Modification d'un fichier PDF
    Par amika dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 19/12/2005, 21h47
  5. Réponses: 11
    Dernier message: 23/07/2002, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo