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 :

Mises à jour de champs suites aux changements dans un sous-formulaire


Sujet :

Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Mises à jour de champs suites aux changements dans un sous-formulaire
    Bonjour,

    J’ai développé un formulaire et un sous-formulaire.

    Afin de bien faire le suivi de la saisie des éléments dans le sous-formulaire, à la création de chacun de ceux-ci, j’ajoute le login Windows et la date de création au sous-formulaire. Jusque-là ça va bien…

    Voici donc mon problème, j’essaie maintenant d’ajouter dans 2 nouveaux champs le Login et la date du dernier qui a procédé aux changements des éléments dans le sous-formulaire et ceux-ci seraient automatiquement mises à jour aux changements

    (Access-2007)

  2. #2
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Jos1968,
    Une idée:
    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
    Private Sub Form_AfterUpdate()
     
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim strSQL As String
     
        strSQL = "SELECT TaTable.IDLigneFormulaie, TaTable.UserCreate, TaTable.DateCreate, TaTable.UserModif, TaTable.DateModif " _
        & "FROM TaTable WHERE (((TaTable.IDLigneFormulaie)=" & Me.IDLigneFormulaire & "));"
        Set db = CurrentDb
        Set rst = db.OpenRecordset(strSQL)
        If rst.EOF = True Then 'Il n'y a pas d'enregistrement
            rst.AddNew
                rst("IDLigneFormulaire") = Me.IDLigneFormulaire
                rst("UserCreate") = TaVariableUser
                rst("DateCreate") = Now
            rst.Update
        Else 'Il y a déjà un enregistrement
            rst.Edit
                rst("UserModif") = TaVariableUser
                rst("DateModif") = Now
            rst.Update
        End If
        rst.Close
        Set rst = Nothing
        Set db = Nothing
     
    End Sub
    Bonne journée

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci,

    j'obtiens un erreur (Erreur de compilation)à la ligne suivante :

    & "FROM TaTable WHERE (((TaTable.IDLigneFormulaire)=" & Me.IDLigneFormulaire & "));"

    Voici me informations :
    TaTable = Le nom de ma table
    IDLigneFormulaire = Le Id de la ligne de ma table
    UserCreate = Nom du user qui créé l'élément
    DateCreate = Date à laquelle l'élément a été créé
    UserModif = Nom du user qui modifie l'élément
    DateModif = Date à laquelle l'élément a été modifié
    TaVariableUser = Est-ce que c'est cette info : =Environ("UserName") ?

  4. #4
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Jos1968,
    & "FROM TaTable WHERE (((TaTable.IDLigneFormulaire)=" & Me.IDLigneFormulaire & "));"
    dans l'exemple que j'ai fait j'ai supposé que tu avais une table pour tes logs. Dans cette table un champ qui faisait le lien avec la ligne dans ton formulaire. La requête cherche un enregistrement qui est égal à l'enregistrement dans ton formulaire:Me.IDLigneFormulaire. Si elle ne le trouve pas on crée un nouvel enregistrement. Si ce n'est pas le même genre de structure faudrait que tu mettes un peu plus de détails pour que je puisse voir ce qui cloche.
    TaVariableUser = Est-ce que c'est cette info : =Environ("UserName")
    oui si c'est de cette façon que tu récupère le UserName.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Re Bonjour Robert,

    En passant merci pour ta rapidité...

    En fait pour des questions d'affaires, je dois mettre le nom de celui qui ajoute et qui modifie un élément de la table ainsi que les dates.

    Ma table contient l'équivalent de ceci :
    - IDLigneSous-Formulaire
    - Titre
    - UserCreate
    - DateCreate
    - UserModif
    - DateModif

    Pour les champs «UserCreate» et «DateCreate», ça va.

    Ce que mon code doit faire, c'est de mettre à jour les champs «UserModif» et «DateModif» avec le dernier user à avoir modifier la ligne de ma table.

    Merci encore

  6. #6
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Jos1968,
    Dans ce cas tu devrais lire quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strSQL = "SELECT TaTable.[IDLigneSous-Formulaire], TaTable.UserCreate, TaTable.DateCreate, TaTable.UserModif, TaTable.DateModif " _
        & "FROM TaTable WHERE (((TaTable.[IDLigneSous-Formulaire])=" & Me.[IDLigneSous-Formulaire] & "));"
    Le trait d'union n'est pas une bonne pratique pour des noms, il peut être interprété de différentes manières selon le contexte par Access. Je ne crois pas que ce soit le cas ici, mais c'est pour ça que j'ai ajouté [] juste au cas...

    Bonne journée

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    J'obtiens encore un message d'erreur... Erreur de compilation...

    En passant, j'ai retiré le trait d'union...

    J'ai ajusté ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strSQL = "SELECT TaTable.[IDLigneSousFormulaire], TaTable.UserCreate, TaTable.DateCreate, TaTable.UserModif, TaTable.DateModif " _
        & "FROM TaTable WHERE (((TaTable.[IDLigneSousFormulaire])=" & Me.[IDLigneSousFormulaire] & "));"
    Par contre, dans la suite, l'erreur de compilation souligne : IDLigneSousFormulaire

    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
        Set db = CurrentDb
        Set rst = db.OpenRecordset(strSQL)
        If rst.EOF = True Then 'Il n'y a pas d'enregistrement
            rst.AddNew
                rst("IDLigneSousFormulaire") = Me.IDLigneSousFormulaire
                rst("UserCreate") = Environ("UserName")
                rst("DateCreate") = Now
            rst.Update
        Else 'Il y a déjà un enregistrement
            rst.Edit
                rst("UserModif") = Environ("UserName")
                rst("DateModif") = Now
            rst.Update
        End If
        rst.Close
        Set rst = Nothing
        Set db = Nothing
     
    End Sub

  8. #8
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Jos1968,

    Le champ "IDLigneSousFormulaire" fait bien partie de la requête de ton sous-formulaire?

    Parce que le code est correct.

    Lorsque tu écris le code si tu tapes "me." Access va te donner la liste de ce qu'il y a dans le "me." et tu devrais voir "IDLigneSousFormulaire". Si tu ne le vois pas c'est ça le problème. Tu dois l'inclure dans le sous-formulaire.

    Bonne journée

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

Discussions similaires

  1. [XL-2010] Mise à jour de graphique suite au changement de valeur d'un filtre
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/09/2012, 12h39
  2. Réponses: 2
    Dernier message: 13/04/2011, 15h06
  3. Réponses: 1
    Dernier message: 12/08/2010, 09h32
  4. [AC-2003] Requête SQL pour Mise à jour de champs dans un formulaire suite à une saisie
    Par sunshine44 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/01/2010, 16h25
  5. Acces aux objets dans un sous-formulaire
    Par Destiny dans le forum Access
    Réponses: 3
    Dernier message: 13/02/2007, 08h28

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