Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VBA]Savoir si un champ d'un formulaire Access est modifié?!

Si oui, modifier la date de modification...

Sujet résolu
    15 avril 2011 à 9:21:10

    Amis Zéros Bonjour ! :)

    Je reviens faire appel à votre savoir sur le VBA pour Access... :p

    En effet, j'ai un formulaire de consultation/saisie de données et si un champ est modifié, il faut que je mette à jour les champs "date de modification" et "modifié par". Pour récupérer la date et l'utilisateur courant, j'y arrive. La seule chose que je n'arrive pas à faire, c'est d'effectuer le test de savoir si un champ et modifié... :( Après, appliquer le test à l'ensemble des champs de mon formulaire ne serait pas le plus dur ^^
    Est-ce que quelqu'un aurait une idée pour réaliser cette fonction test pour savoir si un champ est modifié?

    Merci d'avance pour vos réponses ! :D

    Romain.
    • Partager sur Facebook
    • Partager sur Twitter
      15 avril 2011 à 9:26:58

      Salut
      Déjà sache qu'il y a un forum pour le VB (lorsqu'il ne s'agit pas de SQL pur)

      Sinon pour te répondre, tu n'as pas un bouton pour valider les modifications ? Si oui, à partir du moment ou on cliques dessus, tu peux considérer qu'il y a eu modif même si aucune information n'a été modifié.
      Sinon ça va être pénible de comparer toutes les valeurs du formulaire avec les valeurs présentes dans la BDD et ça t'apportera pas grand chose
      Enfin c'est mon avis !
      • Partager sur Facebook
      • Partager sur Twitter
        15 avril 2011 à 9:35:58

        Merci Angelo de ta réponse !
        Si un modo peut déplacer le sujet alors, ça sera plus simple, mais je me suis mis dans le forum BDD car mon formulaire est lié à une base de données... mais bon je pense que tu as raison, ce topic est plus ciblé sur du VB pur ! ^^
        Je voulais mettre un bouton, et ensuite demander une confirmation de modification, mais je ne sais pas faire ça non plus en VBA... ^^
        Mais je pense que tu as raison, en mettant un bouton qui considère qu'il y a modification directement.
        je vais essayer ça! :p
        • Partager sur Facebook
        • Partager sur Twitter
          15 avril 2011 à 9:44:32

          Si tu veux une confirmation, voici un lien qui pourra t'aider : http://www.excel-downloads.com/forum/7 [...] ur-macro.html
          • Partager sur Facebook
          • Partager sur Twitter
            15 avril 2011 à 10:18:38

            merci Angelo pour le lien, je vais voir ça après!! ^^
            par contre j'ai encore une erreur pour ma date, je fais un insert into dans mon champ date_modif_pgm, et j'ai l'erreur de compilation "Attendu : fin d'instruction"
            Je ne comprend pas pourquoi, j'ai regardé plusieurs tuto sur le net, pour insérer un champ date, c'est pour ça que j'ai mis des # autour de ma variable "dath".
            Voici mon code :
            Option Compare Database
            
            Public Sub Date_sys()
            
            
            Dim dat As Date
            Dim qdf As QueryDef
            Dim str As String
            Set db = DBEngine.Workspaces(0).OpenDatabase("C:\Temp\Module_V3.accdb")
            
            dat = Now
            str = "INSERT INTO pgm2([date_modif_pgm]) values (#"&dat&"#)"
            Set qdf = db.CreateQueryDef("", str)
            
            
            End Sub
            



            Merci de votre aide ! :)
            • Partager sur Facebook
            • Partager sur Twitter
              15 avril 2011 à 10:39:11

              Si tu veux enregistrer la date du jour, tu n'as pas besoin de variable intermédiaire :
              str = "INSERT INTO pgm2([date_modif_pgm]) values (NOW())"
              

              • Partager sur Facebook
              • Partager sur Twitter
                15 avril 2011 à 10:57:58

                Oui, sauf que lorsque je clique sur mon bouton qui exécute ce code, mon code s'exécute, mais ma date ne change pas... Il faudrait peut-être faire un update ?!
                Option Compare Database
                
                Private Sub Commande53_Click()
                
                
                Dim qdf As QueryDef
                Dim str As String
                Set db = DBEngine.Workspaces(0).OpenDatabase("C:\Temp\Module_V3.accdb")
                
                str = "INSERT INTO dbo_PROGRAMME([date_modif_pgm]) values (NOW())"
                Set qdf = db.CreateQueryDef("", str)
                qdf.Execute
                
                
                End Sub
                
                • Partager sur Facebook
                • Partager sur Twitter
                  15 avril 2011 à 10:59:36

                  Effectivement, ce n'est pas un insert mais un update qu'il faut faire (du coup, regarde si tu as pas inséré des lignes inutiles :lol: )
                  Par contre, il faut que tu ai l'information qui te permettra de cibler la ligne voulu
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 avril 2011 à 11:08:00

                    J'ai regardé direct justement voir si je n'avais pas ajouté des lignes ^^ j'ai fait un tri par date pour vérifier ça. :p

                    Citation : angelo

                    Par contre, il faut que tu ai l'information qui te permettra de cibler la ligne voulu


                    je ne suis pas sûr d'avoir compris, il faut que je récupère quelle info?
                    tu veux dire qu'il faut que je récupère le n° d'enregistrement où je suis?!
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 avril 2011 à 11:10:37

                      Oui c'est ça. Sinon tu auras du mal à savoir quelle est la ligne ou il faut modifier la date
                      Pour ça tu peux éventuellement mettre une zone de texte cachée qui prendra la valeur du numéro d'enregistrement en question
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 avril 2011 à 11:20:36

                        D'accord, sauf que j'ai absolument aucune idée pour faire une zone de texte caché... :euh:
                        Je suis Zéro de chez Zéro en VBA.... :/
                        Niveau algo, je comprend, y'a pas de problème, mais c'est le langage qui me bloque! :(
                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 avril 2011 à 11:32:05

                          Non c'est pas une histoire de vba mais plutôt l'outil graphique que tu ne connais pas
                          Il suffit dans ton formulaire de mettre une zone de texte et tu mets la propriété visible à Non

                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 avril 2011 à 11:42:40

                            oui, quand je disais VBA, je mettais aussi MS Access dedans ^^
                            car par exemple, je ne sais pas comment va être interprété un update en VBA, les conditions qu'il faut mettre etc... :p

                            Option Compare Database
                            
                            Private Sub Commande53_Click()
                            
                            
                            Dim qdf As QueryDef
                            Dim str As String
                            
                            Set db = DBEngine.Workspaces(0).OpenDatabase("C:\Temp\Module_V3.accdb")
                            
                            str = "Update dbo_PROGRAMME SET date_modif_pgm = (NOW())"
                            Set qdf = db.CreateQueryDef("", str)
                            qdf.Execute
                            
                            
                            End Sub
                            


                            J'ai l'erreur : "Erreur d'exécution '3416' : ODBC -- L'appel a échoué."

                            Il faudrait que je puisse ajouter la condition du n° d'enregistrement comme tu me l'a dit, mais je ne vois pas comment faire dans mon update...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 avril 2011 à 9:54:40

                              J'ai trouvé pourquoi ça ne fonctionnait pas. Mon update était bon en fait ;)
                              Le sujet est résolu. C'était un trigger qui empêchait les mises à jour de la BDD.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              [VBA]Savoir si un champ d'un formulaire Access est modifié?!

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown