From 978061211d9e7797163231d4cbd609ba269a3456 Mon Sep 17 00:00:00 2001 From: StillHammer Date: Sat, 3 Jan 2026 13:01:57 +0700 Subject: [PATCH] Fix forms and navigation - all buttons working MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Convert navigation Subs to Functions for button OnClick - Fix form builder to properly rename forms (sName variable) - Fix frm_Historique with continuous view and reduced row height - Update src/ with latest VBA code 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- db/TimeTrackPro.accdb | Bin 864256 -> 1032192 bytes src/mod_FormBuilder.bas | 165 ++++++++++++++++++---------------------- src/mod_Navigation.bas | 75 ++++++------------ 3 files changed, 96 insertions(+), 144 deletions(-) diff --git a/db/TimeTrackPro.accdb b/db/TimeTrackPro.accdb index 8872032b21d1d9034db07fedf8344545c413b60d..b61318a2f82429661bc56f7f98dfa8c94c82ae84 100644 GIT binary patch delta 84952 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 CS(&>4 diff --git a/src/mod_FormBuilder.bas b/src/mod_FormBuilder.bas index fcacc48..a9579db 100644 --- a/src/mod_FormBuilder.bas +++ b/src/mod_FormBuilder.bas @@ -2,211 +2,194 @@ Attribute VB_Name = "mod_FormBuilder" Option Compare Database Option Explicit -'=============================================================================== -' Module: mod_FormBuilder -' Description: Creation programmatique des formulaires -' Auteur: Alexis Trouve -' Date: 2025-12-30 -'=============================================================================== - Private Const acLabel As Integer = 100 Private Const acTextBox As Integer = 109 Private Const acComboBox As Integer = 111 Private Const acCommandButton As Integer = 104 Private Const acDetail As Integer = 0 -Private Const acHeader As Integer = 1 Public Sub BuildAllForms() + On Error Resume Next + DoCmd.Close acForm, "frm_Accueil" + DoCmd.Close acForm, "frm_Clients" + DoCmd.Close acForm, "frm_Projets" + DoCmd.Close acForm, "frm_SaisieTemps" + DoCmd.Close acForm, "frm_Historique" On Error GoTo ErrHandler BuildFormAccueil BuildFormClients BuildFormProjets BuildFormSaisieTemps BuildFormHistorique - MsgBox "Formulaires crees avec succes!", vbInformation + MsgBox "Formulaires crees!", vbInformation Exit Sub ErrHandler: MsgBox "Erreur: " & Err.Description, vbCritical End Sub Public Sub BuildFormAccueil() - On Error GoTo ErrHandler - Dim frm As Form, ctl As Control + Dim frm As Form, ctl As Control, sName As String On Error Resume Next DoCmd.DeleteObject acForm, "frm_Accueil" - On Error GoTo ErrHandler + On Error GoTo 0 Set frm = CreateForm() + sName = frm.Name frm.Caption = "TimeTrack Pro" frm.RecordSelectors = False frm.NavigationButtons = False - Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 500, 300, 5000, 500) + Set ctl = CreateControl(sName, acLabel, acDetail, , , 500, 300, 5000, 500) ctl.Caption = "TimeTrack Pro" ctl.FontSize = 20 ctl.FontBold = True - Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 500, 1200, 2200, 500) + Set ctl = CreateControl(sName, acCommandButton, acDetail, , , 500, 1200, 2200, 500) ctl.Caption = "Clients" ctl.OnClick = "=OpenFormClients()" - Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 500, 1900, 2200, 500) + Set ctl = CreateControl(sName, acCommandButton, acDetail, , , 500, 1900, 2200, 500) ctl.Caption = "Projets" ctl.OnClick = "=OpenFormProjets()" - Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 500, 2600, 2200, 500) + Set ctl = CreateControl(sName, acCommandButton, acDetail, , , 500, 2600, 2200, 500) ctl.Caption = "Saisie Temps" ctl.OnClick = "=OpenFormSaisieTemps()" - Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 500, 3300, 2200, 500) + Set ctl = CreateControl(sName, acCommandButton, acDetail, , , 500, 3300, 2200, 500) ctl.Caption = "Historique" ctl.OnClick = "=OpenFormHistorique()" - DoCmd.Close acForm, frm.Name, acSaveYes - DoCmd.Rename "frm_Accueil", acForm, frm.Name - Exit Sub -ErrHandler: - MsgBox "Erreur Accueil: " & Err.Description, vbCritical + DoCmd.Close acForm, sName, acSaveYes + DoCmd.Rename "frm_Accueil", acForm, sName End Sub Public Sub BuildFormClients() - On Error GoTo ErrHandler - Dim frm As Form, ctl As Control + Dim frm As Form, ctl As Control, sName As String On Error Resume Next DoCmd.DeleteObject acForm, "frm_Clients" - On Error GoTo ErrHandler + On Error GoTo 0 Set frm = CreateForm() + sName = frm.Name frm.RecordSource = "tbl_Clients" frm.Caption = "Clients" frm.NavigationButtons = True - Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 200, 1200, 250) + Set ctl = CreateControl(sName, acLabel, acDetail, , , 200, 200, 1200, 250) ctl.Caption = "Nom:" - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1500, 200, 3500, 250) + Set ctl = CreateControl(sName, acTextBox, acDetail, , , 1500, 200, 3500, 250) ctl.ControlSource = "Nom" - Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 550, 1200, 250) + Set ctl = CreateControl(sName, acLabel, acDetail, , , 200, 550, 1200, 250) ctl.Caption = "Email:" - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1500, 550, 3500, 250) + Set ctl = CreateControl(sName, acTextBox, acDetail, , , 1500, 550, 3500, 250) ctl.ControlSource = "Email" - Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 900, 1200, 250) + Set ctl = CreateControl(sName, acLabel, acDetail, , , 200, 900, 1200, 250) ctl.Caption = "Tel:" - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1500, 900, 2000, 250) + Set ctl = CreateControl(sName, acTextBox, acDetail, , , 1500, 900, 2000, 250) ctl.ControlSource = "Telephone" - Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 200, 1400, 1500, 400) + Set ctl = CreateControl(sName, acCommandButton, acDetail, , , 200, 1400, 1500, 400) ctl.Caption = "Nouveau" ctl.OnClick = "=GoToNewRecord()" - Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 1900, 1400, 1500, 400) + Set ctl = CreateControl(sName, acCommandButton, acDetail, , , 1900, 1400, 1500, 400) ctl.Caption = "Retour" ctl.OnClick = "=OpenFormAccueil()" - DoCmd.Close acForm, frm.Name, acSaveYes - DoCmd.Rename "frm_Clients", acForm, frm.Name - Exit Sub -ErrHandler: - MsgBox "Erreur Clients: " & Err.Description, vbCritical + DoCmd.Close acForm, sName, acSaveYes + DoCmd.Rename "frm_Clients", acForm, sName End Sub Public Sub BuildFormProjets() - On Error GoTo ErrHandler - Dim frm As Form, ctl As Control + Dim frm As Form, ctl As Control, sName As String On Error Resume Next DoCmd.DeleteObject acForm, "frm_Projets" - On Error GoTo ErrHandler + On Error GoTo 0 Set frm = CreateForm() + sName = frm.Name frm.RecordSource = "tbl_Projets" frm.Caption = "Projets" frm.NavigationButtons = True - Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 200, 1200, 250) + Set ctl = CreateControl(sName, acLabel, acDetail, , , 200, 200, 1200, 250) ctl.Caption = "Client:" - Set ctl = CreateControl(frm.Name, acComboBox, acDetail, , , 1500, 200, 3000, 250) + Set ctl = CreateControl(sName, acComboBox, acDetail, , , 1500, 200, 3000, 250) ctl.ControlSource = "ClientID" ctl.RowSource = "SELECT ClientID, Nom FROM tbl_Clients" ctl.ColumnCount = 2 ctl.ColumnWidths = "0;2500" ctl.BoundColumn = 1 - Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 550, 1200, 250) + Set ctl = CreateControl(sName, acLabel, acDetail, , , 200, 550, 1200, 250) ctl.Caption = "Nom:" - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1500, 550, 3000, 250) + Set ctl = CreateControl(sName, acTextBox, acDetail, , , 1500, 550, 3000, 250) ctl.ControlSource = "Nom" - Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 900, 1200, 250) + Set ctl = CreateControl(sName, acLabel, acDetail, , , 200, 900, 1200, 250) ctl.Caption = "Taux:" - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1500, 900, 1500, 250) + Set ctl = CreateControl(sName, acTextBox, acDetail, , , 1500, 900, 1500, 250) ctl.ControlSource = "TauxHoraire" - Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 200, 1400, 1500, 400) + Set ctl = CreateControl(sName, acCommandButton, acDetail, , , 200, 1400, 1500, 400) ctl.Caption = "Nouveau" ctl.OnClick = "=GoToNewRecord()" - Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 1900, 1400, 1500, 400) + Set ctl = CreateControl(sName, acCommandButton, acDetail, , , 1900, 1400, 1500, 400) ctl.Caption = "Retour" ctl.OnClick = "=OpenFormAccueil()" - DoCmd.Close acForm, frm.Name, acSaveYes - DoCmd.Rename "frm_Projets", acForm, frm.Name - Exit Sub -ErrHandler: - MsgBox "Erreur Projets: " & Err.Description, vbCritical + DoCmd.Close acForm, sName, acSaveYes + DoCmd.Rename "frm_Projets", acForm, sName End Sub Public Sub BuildFormSaisieTemps() - On Error GoTo ErrHandler - Dim frm As Form, ctl As Control + Dim frm As Form, ctl As Control, sName As String On Error Resume Next DoCmd.DeleteObject acForm, "frm_SaisieTemps" - On Error GoTo ErrHandler + On Error GoTo 0 Set frm = CreateForm() + sName = frm.Name frm.RecordSource = "tbl_Temps" frm.Caption = "Saisie Temps" frm.NavigationButtons = True frm.DataEntry = True - Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 200, 1200, 250) + Set ctl = CreateControl(sName, acLabel, acDetail, , , 200, 200, 1200, 250) ctl.Caption = "Projet:" - Set ctl = CreateControl(frm.Name, acComboBox, acDetail, , , 1500, 200, 4000, 250) + Set ctl = CreateControl(sName, acComboBox, acDetail, , , 1500, 200, 4000, 250) ctl.ControlSource = "ProjetID" ctl.RowSource = "SELECT ProjetID, Nom FROM tbl_Projets WHERE Actif=True" ctl.ColumnCount = 2 ctl.ColumnWidths = "0;3500" ctl.BoundColumn = 1 - Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 550, 1200, 250) + Set ctl = CreateControl(sName, acLabel, acDetail, , , 200, 550, 1200, 250) ctl.Caption = "Date:" - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1500, 550, 1800, 250) - ctl.ControlSource = "Date" + Set ctl = CreateControl(sName, acTextBox, acDetail, , , 1500, 550, 1800, 250) + ctl.ControlSource = "DateEntree" ctl.DefaultValue = "=Date()" - Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 900, 1200, 250) + Set ctl = CreateControl(sName, acLabel, acDetail, , , 200, 900, 1200, 250) ctl.Caption = "Duree:" - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1500, 900, 1000, 250) + Set ctl = CreateControl(sName, acTextBox, acDetail, , , 1500, 900, 1000, 250) ctl.ControlSource = "Duree" - Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 1250, 1200, 250) + Set ctl = CreateControl(sName, acLabel, acDetail, , , 200, 1250, 1200, 250) ctl.Caption = "Notes:" - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1500, 1250, 4000, 600) + Set ctl = CreateControl(sName, acTextBox, acDetail, , , 1500, 1250, 4000, 600) ctl.ControlSource = "Description" - Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 200, 2000, 1500, 400) + Set ctl = CreateControl(sName, acCommandButton, acDetail, , , 200, 2000, 1500, 400) ctl.Caption = "Enregistrer" ctl.OnClick = "=SaveAndNew()" - Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 1900, 2000, 1500, 400) + Set ctl = CreateControl(sName, acCommandButton, acDetail, , , 1900, 2000, 1500, 400) ctl.Caption = "Retour" ctl.OnClick = "=OpenFormAccueil()" - DoCmd.Close acForm, frm.Name, acSaveYes - DoCmd.Rename "frm_SaisieTemps", acForm, frm.Name - Exit Sub -ErrHandler: - MsgBox "Erreur Saisie: " & Err.Description, vbCritical + DoCmd.Close acForm, sName, acSaveYes + DoCmd.Rename "frm_SaisieTemps", acForm, sName End Sub Public Sub BuildFormHistorique() - On Error GoTo ErrHandler - Dim frm As Form, ctl As Control + Dim frm As Form, ctl As Control, sName As String On Error Resume Next DoCmd.DeleteObject acForm, "frm_Historique" - On Error GoTo ErrHandler + On Error GoTo 0 Set frm = CreateForm() - frm.RecordSource = "SELECT t.*, p.Nom AS Projet, c.Nom AS Client FROM (tbl_Temps t INNER JOIN tbl_Projets p ON t.ProjetID=p.ProjetID) INNER JOIN tbl_Clients c ON p.ClientID=c.ClientID" + sName = frm.Name + frm.RecordSource = "tbl_Temps" frm.Caption = "Historique" - frm.DefaultView = 2 + frm.DefaultView = 1 frm.AllowEdits = False frm.AllowAdditions = False - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 100, 100, 1500, 250) - ctl.ControlSource = "Client" - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 100, 1500, 250) - ctl.ControlSource = "Projet" - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 3300, 100, 1200, 250) - ctl.ControlSource = "Date" - Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 4600, 100, 800, 250) + frm.AllowDeletions = False + frm.Section(acDetail).Height = 300 + Set ctl = CreateControl(sName, acTextBox, acDetail, , , 100, 20, 1200, 250) + ctl.ControlSource = "DateEntree" + Set ctl = CreateControl(sName, acTextBox, acDetail, , , 1400, 20, 800, 250) ctl.ControlSource = "Duree" - Set ctl = CreateControl(frm.Name, acCommandButton, acHeader, , , 200, 200, 1500, 400) + Set ctl = CreateControl(sName, acTextBox, acDetail, , , 2300, 20, 3500, 250) + ctl.ControlSource = "Description" + Set ctl = CreateControl(sName, acCommandButton, acDetail, , , 6000, 20, 1000, 250) ctl.Caption = "Retour" ctl.OnClick = "=OpenFormAccueil()" - DoCmd.Close acForm, frm.Name, acSaveYes - DoCmd.Rename "frm_Historique", acForm, frm.Name - Exit Sub -ErrHandler: - MsgBox "Erreur Historique: " & Err.Description, vbCritical + DoCmd.Close acForm, sName, acSaveYes + DoCmd.Rename "frm_Historique", acForm, sName End Sub diff --git a/src/mod_Navigation.bas b/src/mod_Navigation.bas index 0fde99b..5c94c52 100644 --- a/src/mod_Navigation.bas +++ b/src/mod_Navigation.bas @@ -2,64 +2,41 @@ Attribute VB_Name = "mod_Navigation" Option Compare Database Option Explicit -'=============================================================================== -' Module: mod_Navigation -' Description: Fonctions de navigation entre formulaires -' Auteur: Alexis Trouve -' Date: 2025-12-30 -'=============================================================================== - -Public Sub OpenFormAccueil() +Public Function OpenFormAccueil() As Boolean DoCmd.OpenForm "frm_Accueil" -End Sub + OpenFormAccueil = True +End Function -Public Sub OpenFormClients(Optional ByVal clientID As Long = 0) +Public Function OpenFormClients() As Boolean DoCmd.OpenForm "frm_Clients" - If clientID > 0 Then - Forms!frm_Clients.Recordset.FindFirst "ClientID = " & clientID - End If -End Sub + OpenFormClients = True +End Function -Public Sub OpenFormProjets(Optional ByVal clientID As Long = 0) - Dim strFilter As String - If clientID > 0 Then - strFilter = "ClientID = " & clientID - DoCmd.OpenForm "frm_Projets", , , strFilter - Else - DoCmd.OpenForm "frm_Projets" - End If -End Sub +Public Function OpenFormProjets() As Boolean + DoCmd.OpenForm "frm_Projets" + OpenFormProjets = True +End Function -Public Sub OpenFormSaisieTemps(Optional ByVal projetID As Long = 0) +Public Function OpenFormSaisieTemps() As Boolean DoCmd.OpenForm "frm_SaisieTemps" - If projetID > 0 Then - Forms!frm_SaisieTemps!cboProjet = projetID - End If -End Sub + OpenFormSaisieTemps = True +End Function -Public Sub OpenFormHistorique() +Public Function OpenFormHistorique() As Boolean DoCmd.OpenForm "frm_Historique" -End Sub + OpenFormHistorique = True +End Function -Public Sub CloseCurrentForm() +Public Function CloseCurrentForm() As Boolean DoCmd.Close acForm, Screen.ActiveForm.Name -End Sub + CloseCurrentForm = True +End Function -Public Sub CloseAllForms() - Dim frm As Form - For Each frm In Forms - DoCmd.Close acForm, frm.Name - Next frm -End Sub - -Public Sub RefreshCurrentForm() +Public Function RefreshCurrentForm() As Boolean Screen.ActiveForm.Requery -End Sub + RefreshCurrentForm = True +End Function -'------------------------------------------------------------------------------- -' Function: GoToNewRecord -' Description: Navigue vers un nouvel enregistrement (pour boutons) -'------------------------------------------------------------------------------- Public Function GoToNewRecord() As Boolean On Error GoTo ErrHandler DoCmd.GoToRecord , , acNewRec @@ -70,10 +47,6 @@ ErrHandler: GoToNewRecord = False End Function -'------------------------------------------------------------------------------- -' Function: DeleteCurrentRecord -' Description: Supprime l'enregistrement courant avec confirmation -'------------------------------------------------------------------------------- Public Function DeleteCurrentRecord() As Boolean On Error GoTo ErrHandler If MsgBox("Voulez-vous supprimer?", vbYesNo + vbQuestion, "Confirmer") = vbYes Then @@ -88,10 +61,6 @@ ErrHandler: DeleteCurrentRecord = False End Function -'------------------------------------------------------------------------------- -' Function: SaveAndNew -' Description: Sauvegarde l'enregistrement et va vers nouveau -'------------------------------------------------------------------------------- Public Function SaveAndNew() As Boolean On Error GoTo ErrHandler DoCmd.RunCommand acCmdSaveRecord