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

Access Discussion :

Mise à jour d'un champ date uniquement si l'enregistrement a été modifié


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Villiers-sur-Marne
    Inscrit en
    Novembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Villiers-sur-Marne

    Informations forums :
    Inscription : Novembre 2019
    Messages : 43
    Points : 29
    Points
    29
    Par défaut Mise à jour d'un champ date uniquement si l'enregistrement a été modifié
    Bonjour,
    J'ai un formulaire basé sur une table contenant un champ date Date_Maj_record
    Je souhaiterais mettre à Now() ce champ uniquement si j'ai modifié n'importe quel autre champs et ne pas mettre à jour ce champs Date_Maj_record si je ne modifie rien et que je passe directement à l'enregistrement suivant.

    J'ai fait deux tests
    Dans l'évènement Après MAJ du formulaire j'ai écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Me.Dirty Then
        Me.Date_Maj_record = Now()
    End If.
    Le problème est que Me.Dirty est toujours à True même quand je passe à l'enregistrement suivant sans rien modifier

    J'ai écrit la même chose dans l'évènement Si modification mais il n'est jamais déclenché même quand je modifie un champ du formulaire.

    Pouvez-vous m'aider ?
    Cordialement.

  2. #2
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Salut
    Passez ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim rstModifie As Boolean
     
    If Not rstModifie Then
        rstModifie = True
        Me.Date_Maj_record = Date
    End If
        rstModifie = False
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Villiers-sur-Marne
    Inscrit en
    Novembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Villiers-sur-Marne

    Informations forums :
    Inscription : Novembre 2019
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Salut
    Passez ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim rstModifie As Boolean
     
    If Not rstModifie Then
        rstModifie = True
        Me.Date_Maj_record = Date
    End If
        rstModifie = False
    End Sub
    Bonjour,
    La date est mise à jour même quand je passe à l'enregistrement suivant sans rien modifier
    Cordialement

  4. #4
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    La blague !
    Images attachées Images attachées  

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Villiers-sur-Marne
    Inscrit en
    Novembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Villiers-sur-Marne

    Informations forums :
    Inscription : Novembre 2019
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    La blague !
    J'ai remplacé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim rstModifie As Boolean
    If Not rstModifie Then
        rstModifie = True
        Me.Date_maj_enreg_vente = Date
    End If
        rstModifie = False
    End Sub
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim rstModifie As Boolean
    If Not rstModifie Then
        rstModifie = True
        Me.Date_maj_enreg_vente = Now()
    End If
        rstModifie = False
    End Sub

    car j'ai l'erreur "valeur non valide pour ce champ" avec Date

    Je confirme que Me.Date_maj_enreg_vente est mis à jour systématiquement même quand je passe à l'enregistrement suivant ou précédent avec le sélecteur d'enregistrement sans rien modifier d'autre

  6. #6
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Date() c'est uniquement la date, Now() c'est date & heure et n'affecte en rien la sub(). C'est une simple question d'affichage dans la textbox.
    N'auriez-vous pas un évènement sur l'un des objets (textbox, combobox, etc.) de votre form qui pourrait affecter le résultat de la sub() ?
    Éventuellement déposer votre bdd avec seulement la tbl et le frm concerné.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    If MsgBox("Des modifications ont été apportées à cet enregistrement." _
        & vbCrLf & "Voulez-vous les enregistrer ?" _
        , vbExclamation + vbYesNo, "Modification !") = vbYes Then
        Me.Date_maj_enreg_vente = Date
        DoCmd.Save
    Else
        DoCmd.RunCommand acCmdUndo
    End If
    End Sub

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Villiers-sur-Marne
    Inscrit en
    Novembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Villiers-sur-Marne

    Informations forums :
    Inscription : Novembre 2019
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Date() c'est uniquement la date, Now() c'est date & heure et n'affecte en rien la sub(). C'est une simple question d'affichage dans la textbox.
    N'auriez-vous pas un évènement sur l'un des objets (textbox, combobox, etc.) de votre form qui pourrait affecter le résultat de la sub() ?
    Éventuellement déposer votre bdd avec seulement la tbl et le frm concerné.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    If MsgBox("Des modifications ont été apportées à cet enregistrement." _
        & vbCrLf & "Voulez-vous les enregistrer ?" _
        , vbExclamation + vbYesNo, "Modification !") = vbYes Then
        Me.Date_maj_enreg_vente = Date
        DoCmd.Save
    Else
        DoCmd.RunCommand acCmdUndo
    End If
    End Sub
    Voilà le message quand je met date au lieu de now() en pièce jointe
    Images attachées Images attachées  

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    bonjour,
    étrange que Date ne soit pas reconnu ...
    est-ce que VBA.Date donne la même erreur ?

  9. #9
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Essayez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim rstModifie As Boolean
     
    If Not rstModifie Then
        rstModifie = True
        Me.Date_Maj_record = VBA.Date
    End If
        rstModifie = False
    End Sub
    Quelles sont les références cochées dans votre environnement VBA ?
    A minima Microsoft Visual Basic for Applications / Microsoft Access xx.x Object Library

  10. #10
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 912
    Points : 4 811
    Points
    4 811
    Par défaut
    Salut à tous et à hyperion13

    Citation Envoyé par hyperion13 Voir le message
    Salut
    Passez ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim rstModifie As Boolean
     
    If Not rstModifie Then
        rstModifie = True
        Me.Date_Maj_record = Date
    End If
        rstModifie = False
    End Sub
    lUn problème dans ce code est que rstModifie est inutilisé car toujours initialisé à False alors ne reste que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Date_Maj_record = Date
    De plus n'aurais tu pas un champ ou une colonne nommée Date dans ta base ?

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Villiers-sur-Marne
    Inscrit en
    Novembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Villiers-sur-Marne

    Informations forums :
    Inscription : Novembre 2019
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Essayez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim rstModifie As Boolean
     
    If Not rstModifie Then
        rstModifie = True
        Me.Date_Maj_record = VBA.Date
    End If
        rstModifie = False
    End Sub
    Quelles sont les références cochées dans votre environnement VBA ?
    A minima Microsoft Visual Basic for Applications / Microsoft Access xx.x Object Library
    VBA.Date passe sans erreur mais le champs Date_Maj_record est mis à jour tout le temps
    J'ai bien les deux références voir pièce jointe
    Images attachées Images attachées  

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Citation Envoyé par micniv Voir le message
    Salut à tous et à hyperion13


    lUn problème dans ce code est que rstModifie est inutilisé car toujours initialisé à False alors ne reste que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Date_Maj_record = Date
    effectivement, je n'ai pas vu: micniv a raison, c'est ce code qui met systématiquement à jour Me.Date_Maj_record puisque rstModifie est toujours Faux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim rstModifie As Boolean  ' <==== déclaré, donc Faux
     
    If Not rstModifie Then       ' <==== puisqu'il est Faux, met à jour la date
        rstModifie = True
        Me.Date_Maj_record = Date    ' ici
    End If
        rstModifie = False
    End Sub
    il faut enlever ce code

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Villiers-sur-Marne
    Inscrit en
    Novembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Villiers-sur-Marne

    Informations forums :
    Inscription : Novembre 2019
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    effectivement, je n'ai pas vu: micniv a raison, c'est ce code qui met systématiquement à jour Me.Date_Maj_record puisque rstModifie est toujours Faux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim rstModifie As Boolean  ' <==== déclaré, donc Faux
     
    If Not rstModifie Then       ' <==== puisqu'il est Faux, met à jour la date
        rstModifie = True
        Me.Date_Maj_record = Date    ' ici
    End If
        rstModifie = False
    End Sub
    il faut enlever ce code
    si vous avez une autre idée 💡 je suis preneur

  14. #14
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim rstModifie As Boolean
     
    If Not rstModifie Then
        rstModifie = True
        Me.Date_Maj_record = VBA.Date
    Else
        rstModifie = False
    End If
    End Sub

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Villiers-sur-Marne
    Inscrit en
    Novembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Villiers-sur-Marne

    Informations forums :
    Inscription : Novembre 2019
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par hyperion13 Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim rstModifie As Boolean
     
    If Not rstModifie Then
        rstModifie = True
        Me.Date_Maj_record = VBA.Date
    Else
        rstModifie = False
    End If
    End Sub
    Je vais faire autrement sans avoir besoin de ce champs.
    En tout cas merci et à +

  16. #16
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Je veux bien me faire moine si ...
    4 méthodes différentes qui fonctionnent !
    Un tuto ici.
    Fichiers attachés Fichiers attachés

  17. #17
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 912
    Points : 4 811
    Points
    4 811
    Par défaut
    Je propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Dirty(Cancel As Integer)
    ' se déclenche s'il y a eu une modif dans le formulaire
           Me.dtModif = Date
    End Sub

Discussions similaires

  1. [AC-2019] Mise à jour d'un champ par rapport à un changement de date
    Par Icamstudent dans le forum Access
    Réponses: 4
    Dernier message: 15/04/2020, 19h29
  2. Erreur Mise à jour d'un champs date
    Par obydissonn dans le forum Oracle
    Réponses: 2
    Dernier message: 19/07/2013, 10h55
  3. [AC-2003] Mise à jour d'un champ Date
    Par Thotho-Maxime dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 27/07/2009, 16h44
  4. Problème de mise à jour d'un champ date
    Par aloha dans le forum JDBC
    Réponses: 2
    Dernier message: 17/04/2008, 12h09
  5. mise à jour d'un champ date
    Par Flagny dans le forum Access
    Réponses: 11
    Dernier message: 14/11/2005, 07h30

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