1. #1
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 135
    Points : 58
    Points
    58

    Par défaut Procédure ne fonctionnant plus (ouverture de tables)

    Bonjour à tous et à toutes,

    Dans un formulaire gérant des adhérents d'une association, j'ai mis en place, avec l'aide de certains contributeurs de ce site, une procédure pour stocker, dans 2 tables différentes, certaines anciennes et nouvelles valeurs de l'enregistrement en cours.
    Le but est d'avoir un historique pour documenter un annuaire "des modifications de coordonnées" diffusé aux adhérents.
    La procédure suivante ne fonctionne plus.
    Il semblerait, et je l'écris avec les réserves d'usage, que c'est depuis que je suis passé de Access 2003 à Access 2007 (problème de références ?)

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    Private Sub Sauvegarde_Click()
     
        If Me.NewRecord Then
        MsgBox "S'il s'agit d'un nouvel adhérent, changer d'enregistrement par roulette souris ou le navigateur en bas à gauche" & Chr(13) & "et revenez sur la fiche du nouveau avant d'ouvrir le formulaire de ses cotisations", vbOKOnly
             Exit Sub
        End If
     
        If IsNull(Me.DateRadiation) Then
        '
        'Sauvegarde anciennes valeurs
        '
     
      Dim T_Anciennes_valeurs As Recordset
                Set T_Anciennes_valeurs = CurrentDb.OpenRecordset("T_Anciennes_valeurs", DB_OPEN_TABLE)
     
                T_Anciennes_valeurs.AddNew
     
                T_Anciennes_valeurs("N°Adherent") = Me.N°Adherent.OldValue
                T_Anciennes_valeurs("Titre") = Me.Titre.OldValue
                T_Anciennes_valeurs("NomAdherent") = Me.NomAdherent.OldValue
                T_Anciennes_valeurs("PrenomAdherent") = Me.Prénom.OldValue
                T_Anciennes_valeurs("Adherent") = Me.Adherent.OldValue
                T_Anciennes_valeurs("DateAdhesion") = Me.DateAdhesion.OldValue
                T_Anciennes_valeurs("TypeAdherent") = Me.TypeAdherent.OldValue
                T_Anciennes_valeurs("Fonction") = Me.Fonction.OldValue
                T_Anciennes_valeurs("Specialite") = Me.Spécialité.OldValue
                T_Anciennes_valeurs("Origine") = Me.NomOrigine.OldValue
                T_Anciennes_valeurs("DateOrigine") = Me.DateOrigine.OldValue
                T_Anciennes_valeurs("DateNaissance") = Me.DateNaissance.OldValue
                T_Anciennes_valeurs("DateRadiation") = Me.DateRadiation.OldValue
                T_Anciennes_valeurs("MotifRadiation") = Me.MotifRadiation.OldValue
                T_Anciennes_valeurs("DateDeces") = Me.DateDeces.OldValue
                T_Anciennes_valeurs("Adresse") = Me.Adresse.OldValue
                T_Anciennes_valeurs("Ville") = Me.NomVille.OldValue
                T_Anciennes_valeurs("CP") = Me.CP.OldValue
                T_Anciennes_valeurs("Region") = Me.Region.OldValue
                T_Anciennes_valeurs("Pays") = Me.Pays.OldValue
                T_Anciennes_valeurs("Telephone") = Me.Téléphone.OldValue
                T_Anciennes_valeurs("Mobile") = Me.Mobile.OldValue
                T_Anciennes_valeurs("Fax") = Me.Fax.OldValue
                T_Anciennes_valeurs("EMail") = Me.EMail.OldValue
                T_Anciennes_valeurs("Profession") = Me.Profession.OldValue
                T_Anciennes_valeurs("Retraite") = Me.Retraite.OldValue
                'T_Anciennes_valeurs("DerniereMAJ") = Me.DateMiseAJour.OldValue
                T_Anciennes_valeurs("Divers") = Me.Divers.OldValue
                T_Anciennes_valeurs("MiseAJour") = Now
                T_Anciennes_valeurs("Chemin") = Me.Chemin
                T_Anciennes_valeurs("MasquerDonnees") = Me.Masquer_Données
     
     
                T_Anciennes_valeurs.Update
     
        '
        'sauvegarde nouvelles valeurs
        '
      Dim T_Nouvelles_valeurs As Recordset
                Set T_Nouvelles_valeurs = CurrentDb.OpenRecordset("T_Nouvelles_valeurs", DB_OPEN_TABLE)
     
                T_Nouvelles_valeurs.AddNew
     
                T_Nouvelles_valeurs("N°Adherent") = Me.N°Adherent
                T_Nouvelles_valeurs("Titre") = Me.Titre
                T_Nouvelles_valeurs("NomAdherent") = Me.NomAdherent
                T_Nouvelles_valeurs("PrenomAdherent") = Me.Prénom
                T_Nouvelles_valeurs("Adherent") = Me.Adherent
                T_Nouvelles_valeurs("DateAdhesion") = Me.DateAdhesion
                T_Nouvelles_valeurs("TypeAdherent") = Me.TypeAdherent
                T_Nouvelles_valeurs("Fonction") = Me.Fonction
                T_Nouvelles_valeurs("Specialite") = Me.Spécialité
                T_Nouvelles_valeurs("Origine") = Me.NomOrigine
                T_Nouvelles_valeurs("DateOrigine") = Me.DateOrigine
                T_Nouvelles_valeurs("DateNaissance") = Me.DateNaissance
                T_Nouvelles_valeurs("DateRadiation") = Me.DateRadiation
                T_Nouvelles_valeurs("MotifRadiation") = Me.MotifRadiation
                T_Nouvelles_valeurs("DateDeces") = Me.DateDeces
                T_Nouvelles_valeurs("Adresse") = Me.Adresse
                T_Nouvelles_valeurs("Ville") = Me.NomVille
                T_Nouvelles_valeurs("CP") = Me.CP
                T_Nouvelles_valeurs("Region") = Me.Region
                T_Nouvelles_valeurs("Pays") = Me.Pays
                T_Nouvelles_valeurs("Telephone") = Me.Téléphone
                T_Nouvelles_valeurs("Mobile") = Me.Mobile
                T_Nouvelles_valeurs("Fax") = Me.Fax
                T_Nouvelles_valeurs("EMail") = Me.EMail
                T_Nouvelles_valeurs("Profession") = Me.Profession
                T_Nouvelles_valeurs("Retraite") = Me.Retraite
                T_Nouvelles_valeurs("MiseAjour") = Now
                T_Nouvelles_valeurs("Divers") = Me.Divers
                T_Nouvelles_valeurs("Chemin") = Me.Chemin
                'T_Nouvelles_valeurs("DerniereMAJ") = Me.DateMiseAJour.OldValue
                T_Nouvelles_valeurs("MasquerDonnees") = Me.Masquer_Données
     
     
                T_Nouvelles_valeurs.Update
     
        End If
     
    '
    ' test suppression enregistrement si coordonnées n'ont pas changé
    '
     
            If Me.Adresse.OldValue = Me.Adresse And Me.Fax.OldValue = Me.Fax And Me.NomVille.OldValue = Me.NomVille And Me.Téléphone.OldValue = Me.Téléphone _
                And Me.Mobile.OldValue = Me.Mobile And Me.EMail.OldValue = Me.EMail And Me.Masquer_Données.OldValue = Me.Masquer_Données Then
     
                DoCmd.SetWarnings False
                DoCmd.RunSQL "DELETE * FROM T_Anciennes_valeurs WHERE MiseAJour=DMax('MiseAJour', 'T_Anciennes_valeurs')"
                DoCmd.RunSQL "DELETE * FROM T_Nouvelles_valeurs WHERE MiseAJour=DMax('MiseAJour', 'T_Nouvelles_valeurs')"
     
                MsgBox "Ces modifications ne seront pas enregistrées dans les tables T_Anciennes_valeurs et T_Nouvelles_valeurs", vbOKOnly
            End If
     
      T_Anciennes_valeurs.Close
      T_Nouvelles_valeurs.Close
     
    DoCmd.SetWarnings True
     
        If Me.Dirty Then
            Me.Dirty = False
        End If
     
    Dim Ctl As Control
        For Each Ctl In Me.Détail.Controls
            If (Ctl.ControlType = acTextBox) Or (Ctl.ControlType = acComboBox) Or (Ctl.ControlType = acCheckBox) Then
        Ctl.Locked = True
            End If
        Next Ctl
     
    Exit_Sauvegarde_Click:
    Exit Sub
     
    Err_Sauvegarde_Click:
       MsgBox Err.Description
     
    End Sub
    Le débogeur bloque sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set T_Anciennes_valeurs = CurrentDb.OpenRecordset("T_Anciennes_valeurs", DB_OPEN_TABLE)
    Si je fais "Fin" à la boite de dialogue du débogueur, les modifs sont bien enregistrées mais les anciennes et nouvelles valeurs n'apparaissent pas dans les tables concernées.

    Merci de votre aide.
    A+
    c15

  2. #2
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 135
    Points : 58
    Points
    58

    Par défaut

    Rebonsoir,

    Une précision :
    le message d'erreur est "Erreur d'exécution 13 - incompatibilité de type"

    A+

    C15

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    10 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 10 524
    Points : 15 687
    Points
    15 687

    Par défaut

    Bonjour.

    que vaut DB_OPEN_TABLE ?

    aussi essaye en mettant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim T_Anciennes_valeurs As dao.Recordset
    Il y a 2 objets recordset dans Access un dans la librairie DAO et un dans la librairie ADO. Il se peut que Access se trompe d'objet.

    Si c'est objet DAO, la syntaxe peut être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set T_Anciennes_valeurs = CurrentDb.OpenRecordset("T_Anciennes_valeurs", dbOpenTable)
    et d'habitude on préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set T_Anciennes_valeurs = CurrentDb.OpenRecordset("T_Anciennes_valeurs", dbOpenDynaset)
    un peu plus lent mais tellement plus polyvalent.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 135
    Points : 58
    Points
    58

    Par défaut

    Bonjour,
    Désolé de répondre avec autant de retard, mais j'ai du laisser tomber pendant pas mal de temps, j'avais d'autres affaires sur le feu.

    J'ai corrigé selon ta proposition, cela ne marche pas mieux hélas, les enregistrements ne se font pas dans les 2 tables "anciennes" et "nouvelles" valeurs et j'ai le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "Ces modifications ne seront pas enregistrées dans les tables T_Anciennes_valeurs et T_Nouvelles_valeurs", vbOKOnly
    qui s'affiche.
    J'ai essayé de vérifier par rapport à d'ancienne base (en *.mdb) où cela fonctionnait, je n'arrive pas à voir où cela coince. Je suis un peu paumé...et le mot est faible

    A tout hasard, je te redonne ma procédure complète. Est-ce que j'aurais fait une fausse manip en voulant corriger ?

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    Private Sub Sauvegarde_Click()
     
    On Error GoTo Err_Sauvegarde_Click
    On Error Resume Next
     
      DoCmd.RunCommand acCmdSaveRecord
      Me.DateMiseAJour = Date
      Me.Refresh
     
        If Me.NewRecord Then
         MsgBox "S'il s'agit d'un nouvel adhérent, changer d'enregistrement par roulette souris ou le navigateur en bas à gauche" & Chr(13) & "et revenez sur la fiche du nouveau avant d'ouvrir le formulaire de ses cotisations", vbOKOnly
             Exit Sub
        End If
     
        If IsNull(Me.DateRadiation) Then
        '
        'Sauvegarde anciennes valeurs
        '
     
      Dim T_Anciennes_valeurs As DAO.Recordset
                Set T_Anciennes_valeurs = CurrentDb.OpenRecordset("T_Anciennes_valeurs", dbOpenDynaset)
     
                T_Anciennes_valeurs.AddNew
     
                T_Anciennes_valeurs("N°Adherent") = Me.N°Adherent.OldValue
                T_Anciennes_valeurs("Titre") = Me.Titre.OldValue
                T_Anciennes_valeurs("NomAdherent") = Me.NomAdherent.OldValue
                T_Anciennes_valeurs("PrenomAdherent") = Me.Prénom.OldValue
                T_Anciennes_valeurs("Adherent") = Me.Adherent.OldValue
                T_Anciennes_valeurs("DateAdhesion") = Me.DateAdhesion.OldValue
                T_Anciennes_valeurs("TypeAdherent") = Me.TypeAdherent.OldValue
                T_Anciennes_valeurs("Fonction") = Me.Fonction.OldValue
                T_Anciennes_valeurs("Specialite") = Me.Spécialité.OldValue
                T_Anciennes_valeurs("Origine") = Me.NomOrigine.OldValue
                T_Anciennes_valeurs("DateOrigine") = Me.DateOrigine.OldValue
                T_Anciennes_valeurs("DateNaissance") = Me.DateNaissance.OldValue
                T_Anciennes_valeurs("DateRadiation") = Me.DateRadiation.OldValue
                T_Anciennes_valeurs("MotifRadiation") = Me.MotifRadiation.OldValue
                T_Anciennes_valeurs("DateDeces") = Me.DateDeces.OldValue
                T_Anciennes_valeurs("Adresse") = Me.Adresse.OldValue
                T_Anciennes_valeurs("Ville") = Me.NomVille.OldValue
                T_Anciennes_valeurs("CP") = Me.CP.OldValue
                T_Anciennes_valeurs("Region") = Me.Region.OldValue
                T_Anciennes_valeurs("Pays") = Me.Pays.OldValue
                T_Anciennes_valeurs("Telephone") = Me.Téléphone.OldValue
                T_Anciennes_valeurs("Mobile") = Me.Mobile.OldValue
                T_Anciennes_valeurs("Fax") = Me.Fax.OldValue
                T_Anciennes_valeurs("EMail") = Me.EMail.OldValue
                T_Anciennes_valeurs("Profession") = Me.Profession.OldValue
                T_Anciennes_valeurs("Retraite") = Me.Retraite.OldValue
                'T_Anciennes_valeurs("DerniereMAJ") = Me.DateMiseAJour.OldValue
                T_Anciennes_valeurs("Divers") = Me.Divers.OldValue
                T_Anciennes_valeurs("MiseAJour") = Now
                T_Anciennes_valeurs("Chemin") = Me.Chemin
                T_Anciennes_valeurs("MasquerDonnees") = Me.Masquer_Données
     
     
                T_Anciennes_valeurs.Update
     
        '
        'sauvegarde nouvelles valeurs
        '
      Dim T_Nouvelles_valeurs As DAO.Recordset
                Set T_Nouvelles_valeurs = CurrentDb.OpenRecordset("T_Nouvelles_valeurs", dbOpenDynaset)
     
                T_Nouvelles_valeurs.AddNew
     
                T_Nouvelles_valeurs("N°Adherent") = Me.N°Adherent
                T_Nouvelles_valeurs("Titre") = Me.Titre
                T_Nouvelles_valeurs("NomAdherent") = Me.NomAdherent
                T_Nouvelles_valeurs("PrenomAdherent") = Me.Prénom
                T_Nouvelles_valeurs("Adherent") = Me.Adherent
                T_Nouvelles_valeurs("DateAdhesion") = Me.DateAdhesion
                T_Nouvelles_valeurs("TypeAdherent") = Me.TypeAdherent
                T_Nouvelles_valeurs("Fonction") = Me.Fonction
                T_Nouvelles_valeurs("Specialite") = Me.Spécialité
                T_Nouvelles_valeurs("Origine") = Me.NomOrigine
                T_Nouvelles_valeurs("DateOrigine") = Me.DateOrigine
                T_Nouvelles_valeurs("DateNaissance") = Me.DateNaissance
                T_Nouvelles_valeurs("DateRadiation") = Me.DateRadiation
                T_Nouvelles_valeurs("MotifRadiation") = Me.MotifRadiation
                T_Nouvelles_valeurs("DateDeces") = Me.DateDeces
                T_Nouvelles_valeurs("Adresse") = Me.Adresse
                T_Nouvelles_valeurs("Ville") = Me.NomVille
                T_Nouvelles_valeurs("CP") = Me.CP
                T_Nouvelles_valeurs("Region") = Me.Region
                T_Nouvelles_valeurs("Pays") = Me.Pays
                T_Nouvelles_valeurs("Telephone") = Me.Téléphone
                T_Nouvelles_valeurs("Mobile") = Me.Mobile
                T_Nouvelles_valeurs("Fax") = Me.Fax
                T_Nouvelles_valeurs("EMail") = Me.EMail
                T_Nouvelles_valeurs("Profession") = Me.Profession
                T_Nouvelles_valeurs("Retraite") = Me.Retraite
                T_Nouvelles_valeurs("MiseAjour") = Now
                T_Nouvelles_valeurs("Divers") = Me.Divers
                T_Nouvelles_valeurs("Chemin") = Me.Chemin
                'T_Nouvelles_valeurs("DerniereMAJ") = Me.DateMiseAJour.OldValue
                T_Nouvelles_valeurs("MasquerDonnees") = Me.Masquer_Données
     
     
                T_Nouvelles_valeurs.Update
     
        End If
     
    '
    ' test suppression enregistrement si coordonnées n'ont pas changé
    '
     
           If Me.Adresse.OldValue = Me.Adresse And Me.Fax.OldValue = Me.Fax And Me.NomVille.OldValue = Me.NomVille And Me.Téléphone.OldValue = Me.Téléphone _
                And Me.Mobile.OldValue = Me.Mobile And Me.EMail.OldValue = Me.EMail And Me.Masquer_Données.OldValue = Me.Masquer_Données _
                And Me.CP.OldValue = Me.CP And Me.Region.OldValue = Me.Region And Me.Pays.OldValue = Me.Pays Then
     
                DoCmd.SetWarnings False
                DoCmd.RunSQL "DELETE * FROM T_Anciennes_valeurs WHERE MiseAJour=DMax('MiseAJour', 'T_Anciennes_valeurs')"
                DoCmd.RunSQL "DELETE * FROM T_Nouvelles_valeurs WHERE MiseAJour=DMax('MiseAJour', 'T_Nouvelles_valeurs')"
     
                MsgBox "Ces modifications ne seront pas enregistrées dans les tables T_Anciennes_valeurs et T_Nouvelles_valeurs", vbOKOnly
           End If
     
      T_Anciennes_valeurs.Close
      T_Nouvelles_valeurs.Close
     
    DoCmd.SetWarnings True
     
       If Me.Dirty Then
           Me.Dirty = False
       End If
     
     
    Dim Ctl As Control
        For Each Ctl In Me.Détail.Controls
            If (Ctl.ControlType = acTextBox) Or (Ctl.ControlType = acComboBox) Or (Ctl.ControlType = acCheckBox) Then
        Ctl.Locked = True
            End If
        Next Ctl
     
    Exit_Sauvegarde_Click:
    Exit Sub
     
    Err_Sauvegarde_Click:
       MsgBox Err.Description
     
    End Sub
    Merci de ton aide.
    A+

    C15

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    10 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 10 524
    Points : 15 687
    Points
    15 687

    Par défaut

    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         If Me.Adresse.OldValue = Me.Adresse And Me.Fax.OldValue = Me.Fax And Me.NomVille.OldValue = Me.NomVille And Me.Téléphone.OldValue = Me.Téléphone _
                And Me.Mobile.OldValue = Me.Mobile And Me.EMail.OldValue = Me.EMail And Me.Masquer_Données.OldValue = Me.Masquer_Données _
                And Me.CP.OldValue = Me.CP And Me.Region.OldValue = Me.Region And Me.Pays.OldValue = Me.Pays Then
     
                DoCmd.SetWarnings False
                DoCmd.RunSQL "DELETE * FROM T_Anciennes_valeurs WHERE MiseAJour=DMax('MiseAJour', 'T_Anciennes_valeurs')"
                DoCmd.RunSQL "DELETE * FROM T_Nouvelles_valeurs WHERE MiseAJour=DMax('MiseAJour', 'T_Nouvelles_valeurs')"
     
                MsgBox "Ces modifications ne seront pas enregistrées dans les tables T_Anciennes_valeurs et T_Nouvelles_valeurs", vbOKOnly
           End If
    Si tu vois le message, il est normal que tes données ne soient plus là puisque les 2 lignes qui précèdent le message sont des suppressions.

    Il semblerai qu'à un moment données toutes tes anciennes valeurs deviennent égales aux nouvelles, ce qui expliquerai pourquoi tu vois le message.
    Je te suggère de mettre un point d'arrêt avant toutes manipulation des données et de valider les valeurs avant et après d'un champ que tu as modifié.
    Il se peut que ce soit déjà perdu à ce moment là.

    Sinon fil va falloir tracer le code pas à pas et voir à quel moment le remplacement survient et validant les données à chaque pas.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 135
    Points : 58
    Points
    58

    Par défaut

    Bonsoir,

    J'ai fait plusieurs essais.

    Pour être clair, j'édite un état faisant apparaitre les nouvelles coordonnées des adhérents (adresse, Cp, ville, pays, téléphone, mobile, fax, email) et je ne veux y faire apparaitre QUE cela.
    Cet état est diffusé aux adhérents en attendant l'édition d'un annuaire complet et à jour (tous les 2 ans)

    Ces coordonnées sont stockées, bien sur dans ma table principale (T_Adhérents) et dans la table T_Nouvelles_valeurs.
    Cela est fait par le début de ma procédure

    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
    Dim T_Nouvelles_valeurs As DAO.Recordset
                Set T_Nouvelles_valeurs = CurrentDb.OpenRecordset("T_Nouvelles_valeurs", dbOpenDynaset)
     
                T_Nouvelles_valeurs.AddNew
     
                T_Nouvelles_valeurs("N°Adherent") = Me.N°Adherent
                T_Nouvelles_valeurs("Titre") = Me.Titre
                T_Nouvelles_valeurs("NomAdherent") = Me.NomAdherent
                T_Nouvelles_valeurs("PrenomAdherent") = Me.Prénom
                T_Nouvelles_valeurs("Adherent") = Me.Adherent
                T_Nouvelles_valeurs("DateAdhesion") = Me.DateAdhesion
                T_Nouvelles_valeurs("TypeAdherent") = Me.TypeAdherent
                T_Nouvelles_valeurs("Fonction") = Me.Fonction
                T_Nouvelles_valeurs("Specialite") = Me.Spécialité
                T_Nouvelles_valeurs("Origine") = Me.NomOrigine
                T_Nouvelles_valeurs("DateOrigine") = Me.DateOrigine
                T_Nouvelles_valeurs("DateNaissance") = Me.DateNaissance
                T_Nouvelles_valeurs("DateRadiation") = Me.DateRadiation
                T_Nouvelles_valeurs("MotifRadiation") = Me.MotifRadiation
                T_Nouvelles_valeurs("DateDeces") = Me.DateDeces
                T_Nouvelles_valeurs("Adresse") = Me.Adresse
                T_Nouvelles_valeurs("Ville") = Me.NomVille
                T_Nouvelles_valeurs("CP") = Me.CP
                T_Nouvelles_valeurs("Region") = Me.Region
                T_Nouvelles_valeurs("Pays") = Me.Pays
                T_Nouvelles_valeurs("Telephone") = Me.Téléphone
                T_Nouvelles_valeurs("Mobile") = Me.Mobile
                T_Nouvelles_valeurs("Fax") = Me.Fax
                T_Nouvelles_valeurs("EMail") = Me.EMail
                T_Nouvelles_valeurs("Profession") = Me.Profession
                T_Nouvelles_valeurs("Retraite") = Me.Retraite
                T_Nouvelles_valeurs("MiseAjour") = Now
                T_Nouvelles_valeurs("Divers") = Me.Divers
                T_Nouvelles_valeurs("Chemin") = Me.Chemin
                'T_Nouvelles_valeurs("DerniereMAJ") = Me.DateMiseAJour.OldValue
                T_Nouvelles_valeurs("MasquerDonnees") = Me.Masquer_Données
     
     
                T_Nouvelles_valeurs.Update
    Or si par exemple je m'aperçois qu'il y a eu une erreur de saisie concernant la date de naissance d'un adhérent, je la corrige MAIS ne veut pas que cela apparaisse dans l'annuaire "intermédiaire"
    La procédure ci-dessus m'enregistre systématiquement toutes les modifs effectuées.

    C'est pour cela que j'ai créé la procédure suivante qui me supprime l'enregistrement si les modifs concernent une autre information que les coordonnées

    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
    '
    ' test suppression enregistrement si coordonnées n'ont pas changé
    '
     
           If Me.Adresse.OldValue = Me.Adresse And Me.Fax.OldValue = Me.Fax And Me.NomVille.OldValue = Me.NomVille And Me.Téléphone.OldValue = Me.Téléphone _
                And Me.Mobile.OldValue = Me.Mobile And Me.EMail.OldValue = Me.EMail And Me.Masquer_Données.OldValue = Me.Masquer_Données _
                And Me.CP.OldValue = Me.CP And Me.Region.OldValue = Me.Region And Me.Pays.OldValue = Me.Pays Then
     
                DoCmd.SetWarnings False
                DoCmd.RunSQL "DELETE * FROM T_Anciennes_valeurs WHERE MiseAJour=DMax('MiseAJour', 'T_Anciennes_valeurs')"
                DoCmd.RunSQL "DELETE * FROM T_Nouvelles_valeurs WHERE MiseAJour=DMax('MiseAJour', 'T_Nouvelles_valeurs')"
     
               MsgBox "Ces modifications ne seront pas enregistrées dans les tables T_Anciennes_valeurs et T_Nouvelles_valeurs", vbOKOnly
          End If
     
      T_Anciennes_valeurs.Close
      T_Nouvelles_valeurs.Close
    Il semblerait que c'est cette procédure qui coince (en la mettant en commentaire tout se passe bien, avec le fait hélas que s'il s'agit d'une modif de date de naissance, elle apparait dans les 2 tables T_Nouvelles_valeurs et T_Anciennes_valeurs).
    Peut-être que mon raisonnement n'est pas bon. Je n'ai trouvé, en l'état de mes connaissances, que cette méthode. Il y a sans doute mieux.

    Merci de ton aide.
    A+
    C15

  7. #7
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    février 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2011
    Messages : 135
    Points : 58
    Points
    58

    Par défaut

    Bonsoir,

    J'ai peut-être trouvé la solution (à confirmer)

    J'ai supprimé ma procédure qui se trouvait après l’enregistrement des modifs dans mes 2 tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    '
    ' test suppression enregistrement si coordonnées n'ont pas changé
    '
     
           If Me.Adresse.OldValue = Me.Adresse And Me.Fax.OldValue = Me.Fax And Me.NomVille.OldValue = Me.NomVille And Me.Téléphone.OldValue = Me.Téléphone _
                And Me.Mobile.OldValue = Me.Mobile And Me.EMail.OldValue = Me.EMail And Me.Masquer_Données.OldValue = Me.Masquer_Données _
                And Me.CP.OldValue = Me.CP And Me.Region.OldValue = Me.Region And Me.Pays.OldValue = Me.Pays Then
     
                DoCmd.SetWarnings False
                DoCmd.RunSQL "DELETE * FROM T_Anciennes_valeurs WHERE MiseAJour=DMax('MiseAJour', 'T_Anciennes_valeurs')"
                DoCmd.RunSQL "DELETE * FROM T_Nouvelles_valeurs WHERE MiseAJour=DMax('MiseAJour', 'T_Nouvelles_valeurs')"
     
               MsgBox "Ces modifications ne seront pas enregistrées dans les tables T_Anciennes_valeurs et T_Nouvelles_valeurs", vbOKOnly
          End If
    et l'ai remplacée, en tout début de procédure par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Sauvegarde_Click()
     
    On Error GoTo Err_Sauvegarde_Click
    On Error Resume Next
     
     If Me.Adresse.OldValue = Me.Adresse And Me.Fax.OldValue = Me.Fax And Me.NomVille.OldValue = Me.NomVille And Me.Téléphone.OldValue = Me.Téléphone _
               And Me.Mobile.OldValue = Me.Mobile And Me.EMail.OldValue = Me.EMail And Me.Masquer_Données.OldValue = Me.Masquer_Données _
               And Me.CP.OldValue = Me.CP And Me.Region.OldValue = Me.Region And Me.Pays.OldValue = Me.Pays Then
     DoCmd.RunCommand acCmdSaveRecord
     Me.DateMiseAJour = Date
     MsgBox "Ces modifications ne seront pas enregistrées dans les tables T_Anciennes_valeurs et T_Nouvelles_valeurs", vbOKOnly
     Exit Sub
     End If
    A bien réfléchir, mais je l'ai fait bien trop tard, il vaut mieux éviter de faire quelque chose que de le faire et de l'annuler après

    J'ai fait 2 ou 3 essais qui ont l'air d'être concluants, je vais encore tester cela.

    Merci de me confirmer que ma démarche va plutôt dans le bon sens.

    A+

    C15

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/04/2016, 10h50
  2. Réponses: 4
    Dernier message: 05/08/2010, 16h48
  3. Procédure qui ne fonctionne plus
    Par vaucluseimmo dans le forum VBA Word
    Réponses: 4
    Dernier message: 21/12/2009, 09h20
  4. Procédure qui ne fonctionne plus
    Par reynald_B dans le forum SQL
    Réponses: 0
    Dernier message: 24/11/2008, 11h30
  5. Réponses: 14
    Dernier message: 23/07/2007, 17h29

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