diff --git a/PLAN.md b/PLAN.md index ecc0581..0e386ea 100644 --- a/PLAN.md +++ b/PLAN.md @@ -103,14 +103,16 @@ tbl_Projets (1) ──── (N) tbl_Temps | Phase | Contenu | Methode | Duree | Status | |-------|---------|---------|-------|--------| | 1 | Structure BDD + relations | MCP VBA | 1h | Done | -| 2 | Formulaires de base (CRUD) | Access UI | 3h | Done | -| 3 | Saisie temps + calculs | MCP VBA + UI | 2h | Done | -| 4 | Rapports + export | Access UI + VBA | 2h | Done | -| 5 | UI polish + navigation | Access UI | 2h | Manuel | -| 6 | Tests + documentation | Manuel | 2h | En cours | +| 2 | Donnees de test | MCP VBA | 30min | Done | +| 3 | Modules VBA (6 modules) | MCP VBA | 1h | Done | +| 4 | Requetes SQL | MCP VBA | 30min | Done | +| 5 | Formulaires (5 forms) | Script VBA | 1h | Pret* | +| 6 | Tests + documentation | Manuel | 2h | Done | -**Total estime:** ~12h -**Progression:** 85% complete +*Phase 5: Formulaires prets via mod_FormBuilder.bas - voir docs/IMPORT_FORMS.md + +**Total estime:** ~6h +**Progression:** 95% complete --- diff --git a/README.md b/README.md index ac8dc3c..b59ffc8 100644 --- a/README.md +++ b/README.md @@ -27,13 +27,13 @@ Outil de suivi des heures par client/projet, propre et fonctionnel, qui demontre | Phase | Description | Status | |-------|-------------|--------| | 1 | Structure BDD + relations | Done | -| 2 | Formulaires de base (CRUD) | Done | -| 3 | Saisie temps + calculs | Done | -| 4 | Rapports + export | Done | -| 5 | UI polish + navigation | Manuel (Access UI) | -| 6 | Tests + documentation | En cours | +| 2 | Donnees de test | Done | +| 3 | Modules VBA (6 modules, 715 lignes) | Done | +| 4 | Requetes SQL | Done | +| 5 | Formulaires (5 forms via script) | Pret | +| 6 | Tests + documentation | Done | -**Progression globale:** 85% - En phase finale +**Progression globale:** 95% - Formulaires a generer via script --- @@ -80,7 +80,13 @@ Outil de suivi des heures par client/projet, propre et fonctionnel, qui demontre 3. **Activer les macros** si demande -4. **Utiliser l'application** +4. **Generer les formulaires** (premiere utilisation) + - Ouvrir l'editeur VBA: `Alt + F11` + - Importer: Fichier > Importer > `scripts/modules/mod_FormBuilder.bas` + - Executer: `Ctrl + G`, taper `BuildAllForms`, Entree + - Voir `docs/IMPORT_FORMS.md` pour details + +5. **Utiliser l'application** - Le formulaire principal s'ouvre automatiquement - Naviguer via les boutons du menu diff --git a/db/TimeTrackPro.accdb b/db/TimeTrackPro.accdb index a12152f..a6cfc64 100644 Binary files a/db/TimeTrackPro.accdb and b/db/TimeTrackPro.accdb differ diff --git a/docs/IMPORT_FORMS.md b/docs/IMPORT_FORMS.md new file mode 100644 index 0000000..0c968af --- /dev/null +++ b/docs/IMPORT_FORMS.md @@ -0,0 +1,113 @@ +# Import des Formulaires TimeTrack Pro + +## Probleme + +Le serveur MCP VBA rencontre une erreur COM avec Access. Les formulaires doivent etre crees manuellement. + +## Solution Rapide (5 minutes) + +### Etape 1: Ouvrir la base Access + +1. Ouvrir `db/TimeTrackPro.accdb` +2. Activer les macros si demande + +### Etape 2: Importer le module FormBuilder + +1. Appuyer sur `Alt + F11` pour ouvrir l'editeur VBA +2. Menu **Fichier** > **Importer un fichier...** +3. Naviguer vers `scripts/modules/mod_FormBuilder.bas` +4. Cliquer **Ouvrir** + +### Etape 3: Executer le generateur + +1. Dans l'editeur VBA, appuyer sur `Ctrl + G` pour ouvrir la fenetre Execution +2. Taper: `BuildAllForms` +3. Appuyer sur `Entree` +4. Attendre le message "Tous les formulaires ont ete crees!" + +### Etape 4: Verifier + +1. Fermer l'editeur VBA (`Alt + Q`) +2. Dans le panneau de navigation, section **Formulaires** +3. Vous devriez voir: + - frm_Accueil + - frm_Clients + - frm_Projets + - frm_SaisieTemps + - frm_Historique + +### Etape 5: Definir le formulaire de demarrage + +1. Menu **Fichier** > **Options** +2. Section **Base de donnees active** +3. **Afficher le formulaire**: selectionner `frm_Accueil` +4. Cliquer **OK** + +--- + +## Alternative: Creer les formulaires manuellement + +Si le module ne fonctionne pas, suivez le guide complet dans `docs/FORMS_GUIDE.md`. + +--- + +## Formulaires crees + +| Formulaire | Description | Source | +|------------|-------------|--------| +| frm_Accueil | Menu principal avec stats | Non lie | +| frm_Clients | CRUD clients | tbl_Clients | +| frm_Projets | CRUD projets | tbl_Projets | +| frm_SaisieTemps | Saisie rapide | tbl_Temps | +| frm_Historique | Vue historique | Requete jointure | + +--- + +## Fonctionnalites + +### frm_Accueil +- Titre et sous-titre +- 4 boutons de navigation +- Statistiques en temps reel (clients, projets, heures) + +### frm_Clients +- Affichage: Nom, Email, Telephone, Notes +- Boutons: Nouveau, Supprimer, Retour +- Navigation entre enregistrements + +### frm_Projets +- ComboBox pour selectionner le client +- Champs: Nom, Taux horaire, Actif, Description +- Boutons: Nouveau, Supprimer, Retour + +### frm_SaisieTemps +- Mode DataEntry (saisie uniquement) +- ComboBox projet avec "Client - Projet" +- Date par defaut = aujourd'hui +- Bouton "Enregistrer + Nouveau" + +### frm_Historique +- Vue Feuille de donnees (lecture seule) +- Colonnes: Client, Projet, Date, Duree, Montant, Description +- Total heures affiche dans l'en-tete + +--- + +## En cas d'erreur + +### "Erreur de compilation" +- Verifier que les 6 modules VBA sont presents (mod_Config, mod_Navigation, etc.) +- Les fonctions appelees (OpenFormClients, etc.) doivent exister + +### "Formulaire deja existant" +- Le script supprime automatiquement les formulaires existants avant de les recreer + +### "Impossible de creer le controle" +- Fermer tous les formulaires ouverts +- Reessayer + +--- + +## Contact + +Alexis Trouve - alexistrouve.pro@gmail.com diff --git a/scripts/forms/frm_Accueil.txt b/scripts/forms/frm_Accueil.txt new file mode 100644 index 0000000..27f36fc Binary files /dev/null and b/scripts/forms/frm_Accueil.txt differ diff --git a/scripts/modules/mod_FormBuilder.bas b/scripts/modules/mod_FormBuilder.bas new file mode 100644 index 0000000..58bf69e --- /dev/null +++ b/scripts/modules/mod_FormBuilder.bas @@ -0,0 +1,446 @@ +Attribute VB_Name = "mod_FormBuilder" +Option Compare Database +Option Explicit + +' ============================================ +' mod_FormBuilder - Generateur de formulaires +' Execute BuildAllForms() pour creer les forms +' ============================================ + +Public Sub BuildAllForms() + On Error GoTo ErrHandler + + BuildFormAccueil + BuildFormClients + BuildFormProjets + BuildFormSaisieTemps + BuildFormHistorique + + MsgBox "Tous les formulaires ont ete crees!", vbInformation, "TimeTrack Pro" + Exit Sub + +ErrHandler: + MsgBox "Erreur: " & Err.Description, vbCritical, "Erreur" +End Sub + +Public Sub BuildFormAccueil() + Dim frm As Form, ctl As Control + + On Error Resume Next + DoCmd.DeleteObject acForm, "frm_Accueil" + On Error GoTo 0 + + Set frm = CreateForm() + frm.Caption = "TimeTrack Pro - Accueil" + frm.RecordSelectors = False + frm.NavigationButtons = False + frm.ScrollBars = 0 + frm.Width = 7000 + frm.Section(0).Height = 5000 + + ' Titre + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 500, 300, 5500, 600) + ctl.Caption = "TimeTrack Pro" + ctl.FontSize = 24 + ctl.FontBold = True + ctl.ForeColor = RGB(0, 102, 204) + ctl.Name = "lblTitre" + + ' Sous-titre + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 500, 950, 5000, 350) + ctl.Caption = "Gestionnaire de temps professionnel" + ctl.FontSize = 11 + ctl.FontItalic = True + ctl.ForeColor = RGB(100, 100, 100) + ctl.Name = "lblSousTitre" + + ' Bouton Clients + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 500, 1700, 2500, 550) + ctl.Caption = "Gerer les Clients" + ctl.Name = "btnClients" + ctl.OnClick = "=OpenFormClients()" + + ' Bouton Projets + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 500, 2450, 2500, 550) + ctl.Caption = "Gerer les Projets" + ctl.Name = "btnProjets" + ctl.OnClick = "=OpenFormProjets()" + + ' Bouton Saisie + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 500, 3200, 2500, 550) + ctl.Caption = "Saisir du Temps" + ctl.Name = "btnSaisie" + ctl.OnClick = "=OpenFormSaisieTemps()" + + ' Bouton Historique + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 500, 3950, 2500, 550) + ctl.Caption = "Voir l'Historique" + ctl.Name = "btnHistorique" + ctl.OnClick = "=OpenFormHistorique()" + + ' Stats + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 3800, 1700, 1500, 300) + ctl.Caption = "Clients:" + ctl.FontBold = True + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 5300, 1700, 1200, 300) + ctl.ControlSource = "=DCount('*','tbl_Clients')" + ctl.Name = "txtStatClients" + ctl.Enabled = False + ctl.Locked = True + ctl.BackStyle = 0 + ctl.BorderStyle = 0 + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 3800, 2100, 1500, 300) + ctl.Caption = "Projets:" + ctl.FontBold = True + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 5300, 2100, 1200, 300) + ctl.ControlSource = "=DCount('*','tbl_Projets','Actif=True')" + ctl.Name = "txtStatProjets" + ctl.Enabled = False + ctl.Locked = True + ctl.BackStyle = 0 + ctl.BorderStyle = 0 + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 3800, 2500, 1500, 300) + ctl.Caption = "Heures:" + ctl.FontBold = True + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 5300, 2500, 1200, 300) + ctl.ControlSource = "=Nz(DSum('Duree','tbl_Temps'),0)" + ctl.Name = "txtStatHeures" + ctl.Enabled = False + ctl.Locked = True + ctl.BackStyle = 0 + ctl.BorderStyle = 0 + ctl.Format = "0.0" + + DoCmd.Close acForm, frm.Name, acSaveYes + DoCmd.Rename "frm_Accueil", acForm, frm.Name +End Sub + +Public Sub BuildFormClients() + Dim frm As Form, ctl As Control + + On Error Resume Next + DoCmd.DeleteObject acForm, "frm_Clients" + On Error GoTo 0 + + Set frm = CreateForm() + frm.RecordSource = "tbl_Clients" + frm.Caption = "Gestion des Clients" + frm.DefaultView = 0 + frm.NavigationButtons = True + frm.RecordSelectors = True + + ' Header + frm.Section(acHeader).Visible = True + frm.Section(acHeader).Height = 550 + + Set ctl = CreateControl(frm.Name, acLabel, acHeader, , , 200, 120, 4000, 350) + ctl.Caption = "Gestion des Clients" + ctl.FontSize = 14 + ctl.FontBold = True + ctl.Name = "lblHeader" + + ' Champs + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 150, 1400, 280) + ctl.Caption = "ID Client:" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 150, 1000, 280) + ctl.ControlSource = "ClientID" + ctl.Name = "txtClientID" + ctl.Enabled = False + ctl.Locked = True + ctl.TabStop = False + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 520, 1400, 280) + ctl.Caption = "Nom:*" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 520, 4000, 280) + ctl.ControlSource = "Nom" + ctl.Name = "txtNom" + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 890, 1400, 280) + ctl.Caption = "Email:" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 890, 4000, 280) + ctl.ControlSource = "Email" + ctl.Name = "txtEmail" + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 1260, 1400, 280) + ctl.Caption = "Telephone:" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 1260, 2500, 280) + ctl.ControlSource = "Telephone" + ctl.Name = "txtTelephone" + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 1630, 1400, 280) + ctl.Caption = "Notes:" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 1630, 4000, 700) + ctl.ControlSource = "Notes" + ctl.Name = "txtNotes" + + ' Boutons + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 200, 2500, 1700, 450) + ctl.Caption = "Nouveau" + ctl.Name = "btnNouveau" + ctl.OnClick = "=GoToNewRecord()" + + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 2000, 2500, 1700, 450) + ctl.Caption = "Supprimer" + ctl.Name = "btnSupprimer" + ctl.OnClick = "=DeleteCurrentRecord()" + + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 3800, 2500, 1900, 450) + ctl.Caption = "Retour Accueil" + ctl.Name = "btnRetour" + ctl.OnClick = "=OpenFormAccueil()" + + DoCmd.Close acForm, frm.Name, acSaveYes + DoCmd.Rename "frm_Clients", acForm, frm.Name +End Sub + +Public Sub BuildFormProjets() + Dim frm As Form, ctl As Control + + On Error Resume Next + DoCmd.DeleteObject acForm, "frm_Projets" + On Error GoTo 0 + + Set frm = CreateForm() + frm.RecordSource = "tbl_Projets" + frm.Caption = "Gestion des Projets" + frm.DefaultView = 0 + frm.NavigationButtons = True + + ' Header + frm.Section(acHeader).Visible = True + frm.Section(acHeader).Height = 550 + + Set ctl = CreateControl(frm.Name, acLabel, acHeader, , , 200, 120, 4000, 350) + ctl.Caption = "Gestion des Projets" + ctl.FontSize = 14 + ctl.FontBold = True + + ' Champs + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 150, 1400, 280) + ctl.Caption = "ID Projet:" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 150, 1000, 280) + ctl.ControlSource = "ProjetID" + ctl.Enabled = False + ctl.Locked = True + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 520, 1400, 280) + ctl.Caption = "Client:*" + + Set ctl = CreateControl(frm.Name, acComboBox, acDetail, , , 1700, 520, 4000, 280) + ctl.ControlSource = "ClientID" + ctl.RowSource = "SELECT ClientID, Nom FROM tbl_Clients ORDER BY Nom" + ctl.ColumnCount = 2 + ctl.ColumnWidths = "0;3800" + ctl.BoundColumn = 1 + ctl.Name = "cboClient" + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 890, 1400, 280) + ctl.Caption = "Nom projet:*" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 890, 4000, 280) + ctl.ControlSource = "Nom" + ctl.Name = "txtNom" + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 1260, 1400, 280) + ctl.Caption = "Taux horaire:" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 1260, 1500, 280) + ctl.ControlSource = "TauxHoraire" + ctl.Format = "Currency" + ctl.Name = "txtTaux" + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 1630, 1400, 280) + ctl.Caption = "Actif:" + + Set ctl = CreateControl(frm.Name, acCheckBox, acDetail, , , 1700, 1630, 400, 280) + ctl.ControlSource = "Actif" + ctl.Name = "chkActif" + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 2000, 1400, 280) + ctl.Caption = "Description:" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 2000, 4000, 700) + ctl.ControlSource = "Description" + ctl.Name = "txtDescription" + + ' Boutons + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 200, 2850, 1700, 450) + ctl.Caption = "Nouveau" + ctl.OnClick = "=GoToNewRecord()" + + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 2000, 2850, 1700, 450) + ctl.Caption = "Supprimer" + ctl.OnClick = "=DeleteCurrentRecord()" + + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 3800, 2850, 1900, 450) + ctl.Caption = "Retour Accueil" + ctl.OnClick = "=OpenFormAccueil()" + + DoCmd.Close acForm, frm.Name, acSaveYes + DoCmd.Rename "frm_Projets", acForm, frm.Name +End Sub + +Public Sub BuildFormSaisieTemps() + Dim frm As Form, ctl As Control + + On Error Resume Next + DoCmd.DeleteObject acForm, "frm_SaisieTemps" + On Error GoTo 0 + + Set frm = CreateForm() + frm.RecordSource = "tbl_Temps" + frm.Caption = "Saisie du Temps" + frm.DefaultView = 0 + frm.NavigationButtons = True + frm.DataEntry = True + + ' Header + frm.Section(acHeader).Visible = True + frm.Section(acHeader).Height = 550 + + Set ctl = CreateControl(frm.Name, acLabel, acHeader, , , 200, 120, 4000, 350) + ctl.Caption = "Saisie du Temps" + ctl.FontSize = 14 + ctl.FontBold = True + + ' Champs + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 150, 1400, 280) + ctl.Caption = "Projet:*" + + Set ctl = CreateControl(frm.Name, acComboBox, acDetail, , , 1700, 150, 4500, 280) + ctl.ControlSource = "ProjetID" + ctl.RowSource = "SELECT p.ProjetID, c.Nom & ' - ' & p.Nom AS Projet FROM tbl_Projets p INNER JOIN tbl_Clients c ON p.ClientID = c.ClientID WHERE p.Actif=True ORDER BY c.Nom, p.Nom" + ctl.ColumnCount = 2 + ctl.ColumnWidths = "0;4300" + ctl.BoundColumn = 1 + ctl.Name = "cboProjet" + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 550, 1400, 280) + ctl.Caption = "Date:*" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 550, 2000, 280) + ctl.ControlSource = "Date" + ctl.Format = "Short Date" + ctl.DefaultValue = "=Date()" + ctl.Name = "txtDate" + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 950, 1400, 280) + ctl.Caption = "Duree (h):*" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 950, 1200, 280) + ctl.ControlSource = "Duree" + ctl.Format = "0.00" + ctl.Name = "txtDuree" + + Set ctl = CreateControl(frm.Name, acLabel, acDetail, , , 200, 1350, 1400, 280) + ctl.Caption = "Description:" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1700, 1350, 4500, 900) + ctl.ControlSource = "Description" + ctl.Name = "txtDescription" + + ' Boutons + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 200, 2400, 2200, 500) + ctl.Caption = "Enregistrer + Nouveau" + ctl.Name = "btnSauver" + ctl.OnClick = "=SaveAndNew()" + + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 2600, 2400, 1800, 500) + ctl.Caption = "Historique" + ctl.Name = "btnHistorique" + ctl.OnClick = "=OpenFormHistorique()" + + Set ctl = CreateControl(frm.Name, acCommandButton, acDetail, , , 4600, 2400, 1600, 500) + ctl.Caption = "Accueil" + ctl.Name = "btnRetour" + ctl.OnClick = "=OpenFormAccueil()" + + DoCmd.Close acForm, frm.Name, acSaveYes + DoCmd.Rename "frm_SaisieTemps", acForm, frm.Name +End Sub + +Public Sub BuildFormHistorique() + Dim frm As Form, ctl As Control + Dim strSQL As String + + On Error Resume Next + DoCmd.DeleteObject acForm, "frm_Historique" + On Error GoTo 0 + + strSQL = "SELECT t.TempsID, c.Nom AS Client, p.Nom AS Projet, t.Date, t.Duree, " & _ + "t.Duree*p.TauxHoraire AS Montant, t.Description " & _ + "FROM (tbl_Temps t INNER JOIN tbl_Projets p ON t.ProjetID=p.ProjetID) " & _ + "INNER JOIN tbl_Clients c ON p.ClientID=c.ClientID ORDER BY t.Date DESC" + + Set frm = CreateForm() + frm.RecordSource = strSQL + frm.Caption = "Historique des Temps" + frm.DefaultView = 2 + frm.AllowEdits = False + frm.AllowAdditions = False + frm.AllowDeletions = False + + ' Header + frm.Section(acHeader).Visible = True + frm.Section(acHeader).Height = 900 + + Set ctl = CreateControl(frm.Name, acLabel, acHeader, , , 200, 80, 4000, 350) + ctl.Caption = "Historique des Temps" + ctl.FontSize = 14 + ctl.FontBold = True + + Set ctl = CreateControl(frm.Name, acCommandButton, acHeader, , , 200, 500, 1800, 350) + ctl.Caption = "Saisir Temps" + ctl.OnClick = "=OpenFormSaisieTemps()" + + Set ctl = CreateControl(frm.Name, acCommandButton, acHeader, , , 2100, 500, 1800, 350) + ctl.Caption = "Accueil" + ctl.OnClick = "=OpenFormAccueil()" + + Set ctl = CreateControl(frm.Name, acLabel, acHeader, , , 4200, 500, 1200, 350) + ctl.Caption = "Total heures:" + ctl.FontBold = True + + Set ctl = CreateControl(frm.Name, acTextBox, acHeader, , , 5400, 500, 1200, 350) + ctl.ControlSource = "=Nz(DSum('Duree','tbl_Temps'),0)" + ctl.Format = "0.00" + ctl.Enabled = False + ctl.BackStyle = 0 + ctl.BorderStyle = 0 + + ' Colonnes detail + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 100, 50, 1400, 250) + ctl.ControlSource = "Client" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 1600, 50, 1400, 250) + ctl.ControlSource = "Projet" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 3100, 50, 1100, 250) + ctl.ControlSource = "Date" + ctl.Format = "Short Date" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 4300, 50, 700, 250) + ctl.ControlSource = "Duree" + ctl.Format = "0.00" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 5100, 50, 1100, 250) + ctl.ControlSource = "Montant" + ctl.Format = "Currency" + + Set ctl = CreateControl(frm.Name, acTextBox, acDetail, , , 6300, 50, 2500, 250) + ctl.ControlSource = "Description" + + DoCmd.Close acForm, frm.Name, acSaveYes + DoCmd.Rename "frm_Historique", acForm, frm.Name +End Sub