Sfoglia il codice sorgente

premier commit; refactoring en cours

olivier.massot 9 anni fa
commit
01d1d81b41

BIN
AccessTB.accdb


BIN
AccessTB.laccdb


BIN
AccessTB.zip


+ 40 - 0
source/database.properties

@@ -0,0 +1,40 @@
+Connect		12
+QueryTimeout	60	3
+ANSI Query Mode	0	4
+Themed Form Controls	1	4
+Use Microsoft Access 2007 compatible cache	0	4
+Clear Cache on Close	0	4
+Never Cache	0	4
+AccessVersion	09.50	10
+NavPane Category	0	4
+Show Navigation Pane Search Bar	1	4
+Build	1150	4
+ProjVer	119	3
+HasOfflineLists	70	3
+UseMDIMode	0	2
+ShowDocumentTabs	Vrai	1
+Picture Property Storage Format	0	4
+WebDesignMode	0	2
+CheckTruncatedNumFields	1	4
+Theme Resource Name	Office Theme	10
+StartUpShowDBWindow	Vrai	1
+StartUpShowStatusBar	Vrai	1
+AllowShortcutMenus	Vrai	1
+AllowFullMenus	Vrai	1
+AllowBuiltInToolbars	Vrai	1
+AllowToolbarChanges	Vrai	1
+AllowSpecialKeys	Vrai	1
+UseAppIconForFrmRpt	Faux	1
+AllowDatasheetSchema	Vrai	1
+DesignWithData	Vrai	1
+Show Values Limit	1000	4
+Show Values in Indexed	1	4
+Show Values in Non-Indexed	1	4
+Show Values in Remote	0	4
+Auto Compact	0	4
+NavPane Closed	0	4
+NavPane Width	365	4
+NavPane View By	0	4
+NavPane Sort By	1	4
+AppTitle	FonctionsVBACommunes	10
+StartUpForm	f_about	10

+ 145 - 0
source/forms/f_about.bas

@@ -0,0 +1,145 @@
+Version =20
+VersionRequired =20
+Begin Form
+    DividingLines = NotDefault
+    AllowDesignChanges = NotDefault
+    DefaultView =0
+    PictureAlignment =2
+    DatasheetGridlinesBehavior =3
+    GridY =10
+    Width =6916
+    DatasheetFontHeight =11
+    ItemSuffix =5
+    Right =11265
+    Bottom =12135
+    DatasheetGridlinesColor =14806254
+    RecSrcDt = Begin
+        0x32cf72d06d89e440
+    End
+    DatasheetFontName ="Calibri"
+    FilterOnLoad =0
+    ShowPageMargins =0
+    DisplayOnSharePointSite =1
+    DatasheetAlternateBackColor =15921906
+    DatasheetGridlinesColor12 =0
+    FitToScreen =1
+    DatasheetBackThemeColorIndex =1
+    BorderThemeColorIndex =3
+    ThemeFontIndex =1
+    ForeThemeColorIndex =0
+    AlternateBackThemeColorIndex =1
+    AlternateBackShade =95.0
+    Begin
+        Begin Label
+            BackStyle =0
+            FontSize =11
+            FontName ="Calibri"
+            ThemeFontIndex =1
+            BackThemeColorIndex =1
+            BorderThemeColorIndex =0
+            BorderTint =50.0
+            ForeThemeColorIndex =0
+            ForeTint =50.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+        End
+        Begin CommandButton
+            Width =1701
+            Height =283
+            FontSize =11
+            FontWeight =400
+            FontName ="Calibri"
+            ForeThemeColorIndex =0
+            ForeTint =75.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+            UseTheme =1
+            Shape =1
+            Gradient =12
+            BackThemeColorIndex =4
+            BackTint =60.0
+            BorderLineStyle =0
+            BorderColor =16777215
+            BorderThemeColorIndex =4
+            BorderTint =60.0
+            ThemeFontIndex =1
+            HoverThemeColorIndex =4
+            HoverTint =40.0
+            PressedThemeColorIndex =4
+            PressedShade =75.0
+            HoverForeThemeColorIndex =0
+            HoverForeTint =75.0
+            PressedForeThemeColorIndex =0
+            PressedForeTint =75.0
+        End
+        Begin Section
+            Height =2154
+            Name ="Détail"
+            AlternateBackColor =15921906
+            AlternateBackThemeColorIndex =1
+            AlternateBackShade =95.0
+            BackThemeColorIndex =1
+            Begin
+                Begin Label
+                    FontItalic = NotDefault
+                    OverlapFlags =85
+                    TextAlign =2
+                    Left =680
+                    Top =680
+                    Width =5271
+                    Height =446
+                    BorderColor =8355711
+                    Name ="Étiquette0"
+                    Caption ="Useful VBA functions"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =680
+                    LayoutCachedTop =680
+                    LayoutCachedWidth =5951
+                    LayoutCachedHeight =1126
+                    ForeTint =100.0
+                End
+                Begin Label
+                    OverlapFlags =85
+                    TextAlign =2
+                    Left =660
+                    Top =225
+                    Width =5295
+                    Height =405
+                    FontWeight =700
+                    BorderColor =8355711
+                    Name ="Étiquette3"
+                    Caption ="Access Toolbox"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =660
+                    LayoutCachedTop =225
+                    LayoutCachedWidth =5955
+                    LayoutCachedHeight =630
+                    ForeTint =100.0
+                End
+                Begin Label
+                    FontItalic = NotDefault
+                    OverlapFlags =85
+                    TextAlign =2
+                    Left =3020
+                    Top =1246
+                    Width =2931
+                    Height =446
+                    BorderColor =8355711
+                    Name ="Étiquette4"
+                    Caption ="olivier.massot@bas-rhin.fr"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =3020
+                    LayoutCachedTop =1246
+                    LayoutCachedWidth =5951
+                    LayoutCachedHeight =1692
+                    ForeTint =100.0
+                End
+            End
+        End
+    End
+End
+CodeBehindForm
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = True
+Attribute VB_PredeclaredId = True
+Attribute VB_Exposed = False

+ 233 - 0
source/forms/f_main.bas

@@ -0,0 +1,233 @@
+Version =20
+VersionRequired =20
+Begin Form
+    DividingLines = NotDefault
+    AllowDesignChanges = NotDefault
+    DefaultView =0
+    PictureAlignment =2
+    DatasheetGridlinesBehavior =3
+    GridY =10
+    Width =6994
+    DatasheetFontHeight =11
+    ItemSuffix =6
+    Right =11265
+    Bottom =12135
+    DatasheetGridlinesColor =14806254
+    RecSrcDt = Begin
+        0x23ff439b958ae440
+    End
+    OnOpen ="[Event Procedure]"
+    DatasheetFontName ="Calibri"
+    FilterOnLoad =0
+    ShowPageMargins =0
+    DisplayOnSharePointSite =1
+    DatasheetAlternateBackColor =15921906
+    DatasheetGridlinesColor12 =0
+    FitToScreen =1
+    DatasheetBackThemeColorIndex =1
+    BorderThemeColorIndex =3
+    ThemeFontIndex =1
+    ForeThemeColorIndex =0
+    AlternateBackThemeColorIndex =1
+    AlternateBackShade =95.0
+    Begin
+        Begin Label
+            BackStyle =0
+            FontSize =11
+            FontName ="Calibri"
+            ThemeFontIndex =1
+            BackThemeColorIndex =1
+            BorderThemeColorIndex =0
+            BorderTint =50.0
+            ForeThemeColorIndex =0
+            ForeTint =50.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+        End
+        Begin CommandButton
+            Width =1701
+            Height =283
+            FontSize =11
+            FontWeight =400
+            FontName ="Calibri"
+            ForeThemeColorIndex =0
+            ForeTint =75.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+            UseTheme =1
+            Shape =1
+            Gradient =12
+            BackThemeColorIndex =4
+            BackTint =60.0
+            BorderLineStyle =0
+            BorderColor =16777215
+            BorderThemeColorIndex =4
+            BorderTint =60.0
+            ThemeFontIndex =1
+            HoverThemeColorIndex =4
+            HoverTint =40.0
+            PressedThemeColorIndex =4
+            PressedShade =75.0
+            HoverForeThemeColorIndex =0
+            HoverForeTint =75.0
+            PressedForeThemeColorIndex =0
+            PressedForeTint =75.0
+        End
+        Begin Section
+            Height =3741
+            Name ="Détail"
+            AlternateBackColor =15921906
+            AlternateBackThemeColorIndex =1
+            AlternateBackShade =95.0
+            BackThemeColorIndex =1
+            Begin
+                Begin Label
+                    OverlapFlags =85
+                    TextAlign =2
+                    Left =2324
+                    Top =170
+                    Width =1927
+                    Height =453
+                    FontWeight =700
+                    BorderColor =8355711
+                    Name ="Étiquette0"
+                    Caption ="MAIN TITLE"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =2324
+                    LayoutCachedTop =170
+                    LayoutCachedWidth =4251
+                    LayoutCachedHeight =623
+                    ForeTint =100.0
+                End
+                Begin CommandButton
+                    OverlapFlags =85
+                    Left =3968
+                    Top =2041
+                    Width =1531
+                    Height =457
+                    ForeColor =4210752
+                    Name ="btn_change_connexion"
+                    Caption ="Change"
+                    OnClick ="[Event Procedure]"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =3968
+                    LayoutCachedTop =2041
+                    LayoutCachedWidth =5499
+                    LayoutCachedHeight =2498
+                    BackColor =14136213
+                    BorderColor =14136213
+                    HoverColor =15060409
+                    PressedColor =9592887
+                    HoverForeColor =4210752
+                    PressedForeColor =4210752
+                    WebImagePaddingLeft =2
+                    WebImagePaddingTop =2
+                    WebImagePaddingRight =1
+                    WebImagePaddingBottom =1
+                End
+                Begin Label
+                    OverlapFlags =85
+                    Left =3855
+                    Top =1247
+                    Width =2041
+                    Height =454
+                    BorderColor =8355711
+                    Name ="txtModeConnexion"
+                    Caption ="Current connexion"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =3855
+                    LayoutCachedTop =1247
+                    LayoutCachedWidth =5896
+                    LayoutCachedHeight =1701
+                    ForeTint =100.0
+                End
+                Begin Label
+                    FontItalic = NotDefault
+                    OverlapFlags =93
+                    Left =340
+                    Top =1247
+                    Width =2326
+                    Height =349
+                    BorderColor =8355711
+                    Name ="lbVersion"
+                    Caption ="Nom version"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =340
+                    LayoutCachedTop =1247
+                    LayoutCachedWidth =2666
+                    LayoutCachedHeight =1596
+                    ForeTint =100.0
+                End
+                Begin Label
+                    FontItalic = NotDefault
+                    OverlapFlags =87
+                    TextAlign =1
+                    Left =340
+                    Top =1587
+                    Width =2326
+                    Height =349
+                    BorderColor =8355711
+                    Name ="statVersion"
+                    Caption ="Statut version"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =340
+                    LayoutCachedTop =1587
+                    LayoutCachedWidth =2666
+                    LayoutCachedHeight =1936
+                    ForeTint =100.0
+                End
+                Begin CommandButton
+                    OverlapFlags =85
+                    Left =397
+                    Top =2041
+                    Width =2039
+                    Height =453
+                    TabIndex =1
+                    ForeColor =4210752
+                    Name ="btn_versions"
+                    Caption ="Versions"
+                    OnClick ="[Event Procedure]"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =397
+                    LayoutCachedTop =2041
+                    LayoutCachedWidth =2436
+                    LayoutCachedHeight =2494
+                    BackColor =14136213
+                    BorderColor =14136213
+                    HoverColor =15060409
+                    PressedColor =9592887
+                    HoverForeColor =4210752
+                    PressedForeColor =4210752
+                    WebImagePaddingLeft =2
+                    WebImagePaddingTop =2
+                    WebImagePaddingRight =1
+                    WebImagePaddingBottom =1
+                End
+            End
+        End
+    End
+End
+CodeBehindForm
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = True
+Attribute VB_PredeclaredId = True
+Attribute VB_Exposed = False
+Option Compare Database
+
+Private Sub cmdMajConnexion_Click()
+  DoCmd.OpenForm "zt_backdb"
+End Sub
+
+Private Sub Commande5_Click()
+  DoCmd.OpenForm "zfrmSuiviVersions"
+End Sub
+
+Private Sub btn_versions_Click()
+  DoCmd.OpenForm "zt_versions"
+End Sub
+
+Private Sub Form_Open(Cancel As Integer)
+  Call LoadApp
+End Sub

+ 119 - 0
source/forms/zf_backdb.bas

@@ -0,0 +1,119 @@
+Version =20
+VersionRequired =20
+Begin Form
+    PopUp = NotDefault
+    Modal = NotDefault
+    RecordSelectors = NotDefault
+    NavigationButtons = NotDefault
+    DividingLines = NotDefault
+    AllowDesignChanges = NotDefault
+    DefaultView =0
+    ScrollBars =2
+    PictureAlignment =2
+    DatasheetGridlinesBehavior =3
+    GridY =10
+    Width =2665
+    DatasheetFontHeight =11
+    ItemSuffix =2
+    Left =5475
+    Top =2430
+    Right =16740
+    Bottom =14565
+    DatasheetGridlinesColor =14806254
+    RecSrcDt = Begin
+        0x6bcb1dd4ac89e440
+    End
+    OnOpen ="[Event Procedure]"
+    DatasheetFontName ="Calibri"
+    FilterOnLoad =0
+    ShowPageMargins =0
+    DisplayOnSharePointSite =1
+    DatasheetAlternateBackColor =15921906
+    DatasheetGridlinesColor12 =0
+    FitToScreen =1
+    DatasheetBackThemeColorIndex =1
+    BorderThemeColorIndex =3
+    ThemeFontIndex =1
+    ForeThemeColorIndex =0
+    AlternateBackThemeColorIndex =1
+    AlternateBackShade =95.0
+    Begin
+        Begin Label
+            BackStyle =0
+            FontSize =11
+            FontName ="Calibri"
+            ThemeFontIndex =1
+            BackThemeColorIndex =1
+            BorderThemeColorIndex =0
+            BorderTint =50.0
+            ForeThemeColorIndex =0
+            ForeTint =50.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+        End
+        Begin ListBox
+            BorderLineStyle =0
+            Width =1701
+            Height =1417
+            LabelX =-1701
+            FontSize =11
+            FontName ="Calibri"
+            AllowValueListEdits =1
+            InheritValueList =1
+            ThemeFontIndex =1
+            BackThemeColorIndex =1
+            BorderThemeColorIndex =1
+            BorderShade =65.0
+            ForeThemeColorIndex =0
+            ForeTint =75.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+        End
+        Begin Section
+            Height =3004
+            Name ="Détail"
+            AlternateBackColor =15921906
+            AlternateBackThemeColorIndex =1
+            AlternateBackShade =95.0
+            BackThemeColorIndex =1
+            Begin
+                Begin ListBox
+                    OverlapFlags =85
+                    IMESentenceMode =3
+                    Width =2665
+                    Height =3001
+                    FontWeight =700
+                    ForeColor =4210752
+                    BorderColor =10921638
+                    Name ="lst_modes"
+                    RowSourceType ="Table/Query"
+                    RowSource ="SELECT [zt_backdb].Mode FROM zt_backdb GROUP BY [zt_backdb].Mode HAVING ((([zt_b"
+                        "ackdb].Mode)<>\"*\")) ORDER BY [zt_backdb].Mode; "
+                    FontName ="Verdana"
+                    OnClick ="[Event Procedure]"
+                    GridlineColor =10921638
+
+                    LayoutCachedWidth =2665
+                    LayoutCachedHeight =3001
+                    ThemeFontIndex =-1
+                End
+            End
+        End
+    End
+End
+CodeBehindForm
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = True
+Attribute VB_PredeclaredId = True
+Attribute VB_Exposed = False
+Option Compare Database
+
+Private Sub Form_Open(Cancel As Integer)
+  DoCmd.MoveSize 50, 50
+End Sub
+
+Private Sub listeModesConnexion_Click()
+  Call majConnectionsAppli(Me.listeModesConnexion)
+  DoCmd.Close acForm, Me.name
+  If formEstOuvert("frm_Menu") Then forms![frm_Menu].txtModeConnexion.Caption = EtatModeConnexion
+End Sub

+ 238 - 0
source/forms/zf_progress.bas

@@ -0,0 +1,238 @@
+Version =20
+VersionRequired =20
+Begin Form
+    PopUp = NotDefault
+    Modal = NotDefault
+    RecordSelectors = NotDefault
+    NavigationButtons = NotDefault
+    DividingLines = NotDefault
+    AllowDesignChanges = NotDefault
+    DefaultView =0
+    ScrollBars =0
+    PictureAlignment =2
+    DatasheetGridlinesBehavior =3
+    GridY =10
+    Width =5555
+    DatasheetFontHeight =11
+    ItemSuffix =2
+    Left =5475
+    Top =2430
+    Right =16740
+    Bottom =14565
+    DatasheetGridlinesColor =14806254
+    RecSrcDt = Begin
+        0xc9a40f6c4f8ae440
+    End
+    Caption ="frmProgression"
+    OnOpen ="[Event Procedure]"
+    DatasheetFontName ="Calibri"
+    FilterOnLoad =0
+    ShowPageMargins =0
+    DisplayOnSharePointSite =1
+    DatasheetAlternateBackColor =15921906
+    DatasheetGridlinesColor12 =0
+    FitToScreen =1
+    DatasheetBackThemeColorIndex =1
+    BorderThemeColorIndex =3
+    ThemeFontIndex =1
+    ForeThemeColorIndex =0
+    AlternateBackThemeColorIndex =1
+    AlternateBackShade =95.0
+    Begin
+        Begin Label
+            BackStyle =0
+            FontSize =11
+            FontName ="Calibri"
+            ThemeFontIndex =1
+            BackThemeColorIndex =1
+            BorderThemeColorIndex =0
+            BorderTint =50.0
+            ForeThemeColorIndex =0
+            ForeTint =50.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+        End
+        Begin Rectangle
+            SpecialEffect =3
+            BackStyle =0
+            BorderLineStyle =0
+            Width =850
+            Height =850
+            BackThemeColorIndex =1
+            BorderThemeColorIndex =1
+            BorderShade =65.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+        End
+        Begin CommandButton
+            Width =1701
+            Height =283
+            FontSize =11
+            FontWeight =400
+            FontName ="Calibri"
+            ForeThemeColorIndex =0
+            ForeTint =75.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+            UseTheme =1
+            Shape =1
+            Gradient =12
+            BackThemeColorIndex =4
+            BackTint =60.0
+            BorderLineStyle =0
+            BorderColor =16777215
+            BorderThemeColorIndex =4
+            BorderTint =60.0
+            ThemeFontIndex =1
+            HoverThemeColorIndex =4
+            HoverTint =40.0
+            PressedThemeColorIndex =4
+            PressedShade =75.0
+            HoverForeThemeColorIndex =0
+            HoverForeTint =75.0
+            PressedForeThemeColorIndex =0
+            PressedForeTint =75.0
+        End
+        Begin Section
+            Height =2437
+            Name ="Détail"
+            AlternateBackColor =10079487
+            BackThemeColorIndex =1
+            Begin
+                Begin Label
+                    OverlapFlags =85
+                    TextAlign =2
+                    Left =105
+                    Top =120
+                    Width =5205
+                    Height =405
+                    FontSize =12
+                    FontWeight =700
+                    BorderColor =8355711
+                    Name ="txt_title"
+                    Caption ="Running..."
+                    GridlineColor =10921638
+                    LayoutCachedLeft =105
+                    LayoutCachedTop =120
+                    LayoutCachedWidth =5310
+                    LayoutCachedHeight =525
+                    ForeTint =100.0
+                End
+                Begin Label
+                    OverlapFlags =85
+                    TextAlign =2
+                    Left =123
+                    Top =636
+                    Width =5158
+                    Height =742
+                    BorderColor =8355711
+                    Name ="txt_msg"
+                    Caption ="..."
+                    GridlineColor =10921638
+                    LayoutCachedLeft =123
+                    LayoutCachedTop =636
+                    LayoutCachedWidth =5281
+                    LayoutCachedHeight =1378
+                    ForeTint =100.0
+                End
+                Begin Rectangle
+                    SpecialEffect =0
+                    BackStyle =1
+                    BorderWidth =2
+                    OverlapFlags =93
+                    Left =121
+                    Top =1480
+                    Width =5159
+                    Height =340
+                    BackColor =14922894
+                    BorderColor =6174487
+                    Name ="shape"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =121
+                    LayoutCachedTop =1480
+                    LayoutCachedWidth =5280
+                    LayoutCachedHeight =1820
+                    BackThemeColorIndex =2
+                    BackTint =40.0
+                    BorderThemeColorIndex =2
+                    BorderShade =75.0
+                End
+                Begin Rectangle
+                    SpecialEffect =0
+                    BackStyle =1
+                    OldBorderStyle =0
+                    OverlapFlags =215
+                    Left =127
+                    Top =1486
+                    Width =3052
+                    Height =318
+                    BackColor =6174487
+                    BorderColor =10921638
+                    Name ="prog"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =127
+                    LayoutCachedTop =1486
+                    LayoutCachedWidth =3179
+                    LayoutCachedHeight =1804
+                    BackThemeColorIndex =2
+                    BackShade =75.0
+                End
+                Begin CommandButton
+                    OverlapFlags =85
+                    Left =4422
+                    Top =1927
+                    Width =850
+                    Height =340
+                    FontWeight =700
+                    Name ="btn_ok"
+                    Caption ="OK"
+                    OnClick ="[Event Procedure]"
+                    LeftPadding =60
+                    RightPadding =75
+                    BottomPadding =120
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =4422
+                    LayoutCachedTop =1927
+                    LayoutCachedWidth =5272
+                    LayoutCachedHeight =2267
+                    ForeTint =100.0
+                    BackColor =0
+                    BackThemeColorIndex =0
+                    BackTint =100.0
+                    BorderColor =0
+                    BorderThemeColorIndex =0
+                    BorderTint =100.0
+                    HoverColor =3355443
+                    HoverThemeColorIndex =0
+                    HoverTint =80.0
+                    PressedColor =0
+                    PressedThemeColorIndex =0
+                    PressedShade =80.0
+                    HoverForeColor =0
+                    HoverForeTint =100.0
+                    PressedForeColor =0
+                    PressedForeTint =100.0
+                    Shadow =-1
+                    QuickStyle =22
+                    QuickStyleMask =-1
+                    WebImagePaddingTop =1
+                End
+            End
+        End
+    End
+End
+CodeBehindForm
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = True
+Attribute VB_PredeclaredId = True
+Attribute VB_Exposed = False
+Option Compare Database
+
+Private Sub boutonOK_Click()
+  DoCmd.Close acForm, Me.name
+End Sub
+
+Private Sub Form_Open(Cancel As Integer)
+  DoCmd.MoveSize 100, 100
+End Sub

+ 670 - 0
source/forms/zf_versions.bas

@@ -0,0 +1,670 @@
+Version =20
+VersionRequired =20
+Begin Form
+    AllowDeletions = NotDefault
+    DividingLines = NotDefault
+    AllowAdditions = NotDefault
+    AllowDesignChanges = NotDefault
+    AllowUpdating =1
+    PictureAlignment =2
+    DatasheetGridlinesBehavior =3
+    GridY =10
+    Width =18481
+    DatasheetFontHeight =11
+    ItemSuffix =17
+    Right =11265
+    Bottom =12135
+    DatasheetGridlinesColor =15062992
+    RecSrcDt = Begin
+        0x7e84741354e5e440
+    End
+    RecordSource ="SELECT [zt_versions].VERSION, [zt_versions].VERSION_lb, [zt_versions].Modifie_pa"
+        "r, [zt_versions].Valide_par, [zt_versions].Valide_le, [zt_versions].Modification"
+        "s FROM zt_versions ORDER BY [zt_versions].VERSION DESC; "
+    OnCurrent ="[Event Procedure]"
+    DatasheetFontName ="Calibri"
+    FilterOnLoad =0
+    DatasheetBackColor12 =-2147483643
+    ShowPageMargins =0
+    DisplayOnSharePointSite =1
+    DatasheetAlternateBackColor =16053492
+    DatasheetGridlinesColor12 =15062992
+    FitToScreen =1
+    Begin
+        Begin Label
+            BackStyle =0
+            FontSize =11
+            FontName ="Calibri"
+            ThemeFontIndex =1
+            BackThemeColorIndex =1
+            BorderThemeColorIndex =1
+            ForeThemeColorIndex =2
+            ForeTint =60.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+        End
+        Begin CommandButton
+            Width =1701
+            Height =283
+            FontSize =11
+            FontWeight =400
+            FontName ="Calibri"
+            ForeThemeColorIndex =2
+            ForeShade =50.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+            BackColor =-2147483633
+            BorderLineStyle =0
+            BorderThemeColorIndex =3
+            BorderShade =90.0
+            ThemeFontIndex =1
+        End
+        Begin TextBox
+            FELineBreak = NotDefault
+            BorderLineStyle =0
+            Width =1701
+            LabelX =-1701
+            FontSize =11
+            FontName ="Calibri"
+            AsianLineBreak =1
+            BackThemeColorIndex =1
+            BorderThemeColorIndex =3
+            BorderShade =90.0
+            ThemeFontIndex =1
+            ForeThemeColorIndex =2
+            ForeShade =50.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+        End
+        Begin ComboBox
+            BorderLineStyle =0
+            Width =1701
+            LabelX =-1701
+            FontSize =11
+            FontName ="Calibri"
+            AllowValueListEdits =1
+            InheritValueList =1
+            ThemeFontIndex =1
+            BackThemeColorIndex =1
+            BorderThemeColorIndex =3
+            BorderShade =90.0
+            ForeThemeColorIndex =2
+            ForeShade =50.0
+            GridlineThemeColorIndex =1
+            GridlineShade =65.0
+        End
+        Begin FormHeader
+            Height =963
+            BackColor =12566463
+            Name ="EntêteFormulaire"
+            AlternateBackThemeColorIndex =1
+            AlternateBackShade =95.0
+            Begin
+                Begin Label
+                    OverlapFlags =85
+                    Left =226
+                    Top =566
+                    Width =960
+                    Height =315
+                    BorderColor =16777215
+                    Name ="Étiquette0"
+                    Caption ="VERSION:"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =226
+                    LayoutCachedTop =566
+                    LayoutCachedWidth =1186
+                    LayoutCachedHeight =881
+                    ForeThemeColorIndex =0
+                    ForeTint =100.0
+                End
+                Begin Label
+                    OverlapFlags =85
+                    Left =2380
+                    Top =623
+                    Width =1215
+                    Height =315
+                    BorderColor =16777215
+                    Name ="Étiquette2"
+                    Caption ="By:"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =2380
+                    LayoutCachedTop =623
+                    LayoutCachedWidth =3595
+                    LayoutCachedHeight =938
+                    ForeThemeColorIndex =0
+                    ForeTint =100.0
+                End
+                Begin Label
+                    OverlapFlags =85
+                    Left =4425
+                    Top =630
+                    Width =1365
+                    Height =315
+                    BorderColor =16777215
+                    Name ="Étiquette4"
+                    Caption ="Validation:"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =4425
+                    LayoutCachedTop =630
+                    LayoutCachedWidth =5790
+                    LayoutCachedHeight =945
+                    ForeThemeColorIndex =0
+                    ForeTint =100.0
+                End
+                Begin Label
+                    OverlapFlags =85
+                    Left =7653
+                    Top =623
+                    Width =1410
+                    Height =315
+                    BorderColor =16777215
+                    Name ="Étiquette6"
+                    Caption ="Decsription:"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =7653
+                    LayoutCachedTop =623
+                    LayoutCachedWidth =9063
+                    LayoutCachedHeight =938
+                    ForeThemeColorIndex =0
+                    ForeTint =100.0
+                End
+                Begin Label
+                    OverlapFlags =93
+                    Left =623
+                    Top =56
+                    Width =5216
+                    Height =340
+                    FontSize =14
+                    FontWeight =700
+                    BorderColor =16777215
+                    Name ="Étiquette7"
+                    Caption ="Versions"
+                    GridlineColor =10921638
+                    LayoutCachedLeft =623
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =5839
+                    LayoutCachedHeight =396
+                    ForeThemeColorIndex =0
+                    ForeTint =100.0
+                End
+                Begin CommandButton
+                    OverlapFlags =215
+                    Left =5499
+                    Top =56
+                    Width =1424
+                    Height =343
+                    ForeColor =4138256
+                    Name ="cmd_ajout"
+                    Caption ="New version"
+                    OnClick ="[Event Procedure]"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =5499
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =6923
+                    LayoutCachedHeight =399
+                    BackColor =10855845
+                    BorderColor =12835293
+                    WebImagePaddingLeft =2
+                    WebImagePaddingTop =2
+                    WebImagePaddingRight =1
+                    WebImagePaddingBottom =1
+                    Overlaps =1
+                End
+                Begin CommandButton
+                    OverlapFlags =215
+                    Left =3798
+                    Top =56
+                    Width =1424
+                    Height =343
+                    TabIndex =1
+                    ForeColor =4138256
+                    Name ="cmd_actu"
+                    Caption ="Refresh"
+                    OnClick ="[Event Procedure]"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =3798
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =5222
+                    LayoutCachedHeight =399
+                    BackColor =10855845
+                    BorderColor =12835293
+                    WebImagePaddingLeft =2
+                    WebImagePaddingTop =2
+                    WebImagePaddingRight =1
+                    WebImagePaddingBottom =1
+                    Overlaps =1
+                End
+                Begin CommandButton
+                    OverlapFlags =85
+                    Left =56
+                    Top =56
+                    Width =501
+                    Height =336
+                    TabIndex =2
+                    ForeColor =4210752
+                    Name ="Commande1"
+                    Caption ="Commande1"
+                    ControlTipText ="Fermer formulaire"
+                    GridlineColor =10921638
+                    OnClickEmMacro = Begin
+                        Version =196611
+                        ColumnsShown =8
+                        Begin
+                            Action ="Close"
+                            Argument ="-1"
+                            Argument =""
+                            Argument ="0"
+                        End
+                        Begin
+                            Comment ="_AXL:<?xml version=\"1.0\" encoding=\"UTF-16\" standalone=\"no\"?>\015\012<UserI"
+                                "nterfaceMacro For=\"Commande1\" xmlns=\"http://schemas.microsoft.com/office/acce"
+                                "ssservices/2009/11/application\" xmlns:a=\"http://schemas.microsoft.com/office/a"
+                                "ccessservices/2009/11/forms\"><"
+                        End
+                        Begin
+                            Comment ="_AXL:Statements><Action Name=\"CloseWindow\"/></Statements></UserInterfaceMacro>"
+                        End
+                    End
+                    ImageData = Begin
+                        0x2800000010000000100000000100200000000000000000000000000000000000 ,
+                        0x0000000000000000000000000000000000000000000000000000000010081080 ,
+                        0x0000000000000000000000000000000000000000000000000000000000000000 ,
+                        0x000000000000000000000000000000000000000040485020100810e0104050ff ,
+                        0x0000000000000000000000000000000000000000000000000000000000000000 ,
+                        0x0000000000000000000000000000000040404080405860ff106890ff2080a0f0 ,
+                        0x0000000000000000000000000000000000000000000000000000000000000000 ,
+                        0x0000000000000000607070ff80a0b0ff4080a0ff20a0d0ff40a8e0ff2078a0ff ,
+                        0x101020ff101020ff000000000000000000000000000000000000000000000000 ,
+                        0x0000000000000000708890ffa0d8f0ff60d0ffff50c0f0ff30a8e0ff1080b0ff ,
+                        0xe0d8d0ff102020ff000000000000000000000000000000000000000000000000 ,
+                        0x0000000000000000708890ffb0e8f0ff80e0ffff60c8f0ff50b8f0ff1088c0ff ,
+                        0xf0d8d0ff202830ff000000000000000090482030904820ff0000000000000000 ,
+                        0x0000000000000000808890ffb0e8f0ff80e0ffff60d0ffff404050ff1090c0ff ,
+                        0xf0e0d0ff303840ff0000000090482030a05030ffa05020ff0000000000000000 ,
+                        0x00000000000000008090a0ffc0f0ffff90e0ffff70d8ffff60c8f0ff0090c0ff ,
+                        0xf0e0e0ff404050ff90482030a05030ffd07840ffb05830ffa05020ffa04820ff ,
+                        0x904820ff904820ff8090a0ffc0f0ffffa0e8ffff80d8ffff70d0f0ff40b0e0ff ,
+                        0xf0e8e0ff605050ffa05830ffe08860fff09060fff08850ffe07850ffd07040ff ,
+                        0xb06840ff904820ff8098a0ffc0f0ffffa0e8ffff90e8ffff80e0ffff80b8d0ff ,
+                        0xf0e8e0ffe09870ffffc0a0ffffb090ffffa070fff09060fff08850ffe07850ff ,
+                        0xd07040ffa05020ff8098a0ffc0f0ffffc0f8ffffa0e0f0ff90a8b0ffc0c8d0ff ,
+                        0xf0f0e0ff908080fff0a070ffffc0a0ffffb090ffffb090ffffa880fff0a080ff ,
+                        0xe09870ffb05030ff90a0a0ffe0f8ffffb0c8d0ff90a0b0fff0f0f0fffff8f0ff ,
+                        0xf0f0f0ff607080ffe0987050f0a070ffffc0a0ffd06830ffe09870ffe09060ff ,
+                        0xe08860ffe08050ff90a0b0ff90a8b0ffc0c8d0ffffffffffffffffffffffffff ,
+                        0xffffffff708890ff00000000e0987050e09870ffd07040ff0000000000000000 ,
+                        0x000000000000000090a0b0ff90a0b0ff90a0b0ff90a0b0ff90a0a0ff8098a0ff ,
+                        0x8098a0ff9098a0ff0000000000000000e0987050e09870ff0000000000000000 ,
+                        0x0000000000000000000000000000000000000000000000000000000000000000 ,
+                        0x0000000000000000000000000000000000000000000000000000000000000000 ,
+                        0x0000000000000000000000000000000000000000000000000000000000000000 ,
+                        0x0000000000000000000000000000000000000000000000000000000000000000 ,
+                        0x0000000000000000
+                    End
+
+                    LayoutCachedLeft =56
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =557
+                    LayoutCachedHeight =392
+                    ForeThemeColorIndex =0
+                    ForeTint =75.0
+                    ForeShade =100.0
+                    UseTheme =1
+                    Shape =1
+                    BackColor =16183539
+                    BorderColor =12029087
+                    BorderThemeColorIndex =-1
+                    BorderShade =100.0
+                    HoverColor =15060409
+                    HoverThemeColorIndex =4
+                    HoverTint =40.0
+                    PressedColor =9592887
+                    PressedThemeColorIndex =4
+                    PressedShade =75.0
+                    HoverForeColor =4210752
+                    HoverForeThemeColorIndex =0
+                    HoverForeTint =75.0
+                    PressedForeColor =4210752
+                    PressedForeThemeColorIndex =0
+                    PressedForeTint =75.0
+                    WebImagePaddingLeft =2
+                    WebImagePaddingTop =2
+                    WebImagePaddingRight =1
+                    WebImagePaddingBottom =1
+                End
+            End
+        End
+        Begin Section
+            Height =510
+            BackColor =15527148
+            Name ="Détail"
+            AlternateBackColor =12566463
+            Begin
+                Begin TextBox
+                    BorderWidth =2
+                    OverlapFlags =85
+                    IMESentenceMode =3
+                    Left =226
+                    Top =56
+                    Width =1266
+                    Height =315
+                    BorderColor =12835293
+                    ForeColor =4138256
+                    Name ="VERSION"
+                    ControlSource ="VERSION"
+                    Format ="Short Date"
+                    StatusBarText ="Date de la version (JJ/MM/AAAA)"
+                    AfterUpdate ="[Event Procedure]"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =226
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =1492
+                    LayoutCachedHeight =371
+                End
+                Begin TextBox
+                    BorderWidth =2
+                    OverlapFlags =85
+                    IMESentenceMode =3
+                    Left =1587
+                    Top =56
+                    Width =681
+                    Height =315
+                    TabIndex =5
+                    BorderColor =12835293
+                    ForeColor =4138256
+                    Name ="VERSION_lb"
+                    ControlSource ="VERSION_lb"
+                    StatusBarText ="Libellé de la version"
+                    AfterUpdate ="[Event Procedure]"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =1587
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =2268
+                    LayoutCachedHeight =371
+                End
+                Begin TextBox
+                    BorderWidth =2
+                    OverlapFlags =85
+                    IMESentenceMode =3
+                    Left =2437
+                    Top =56
+                    Height =315
+                    TabIndex =1
+                    BorderColor =12835293
+                    ForeColor =4138256
+                    Name ="Modifie_par"
+                    ControlSource ="Modifie_par"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =2437
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =4138
+                    LayoutCachedHeight =371
+                End
+                Begin TextBox
+                    BorderWidth =2
+                    OverlapFlags =85
+                    IMESentenceMode =3
+                    Left =4478
+                    Top =56
+                    Height =315
+                    TabIndex =2
+                    BorderColor =12835293
+                    ForeColor =4138256
+                    Name ="Valide_par"
+                    ControlSource ="Valide_par"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =4478
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =6179
+                    LayoutCachedHeight =371
+                End
+                Begin TextBox
+                    BorderWidth =2
+                    OverlapFlags =85
+                    IMESentenceMode =3
+                    Left =6235
+                    Top =56
+                    Width =1251
+                    Height =315
+                    TabIndex =3
+                    BorderColor =12835293
+                    ForeColor =4138256
+                    Name ="Valide_le"
+                    ControlSource ="Valide_le"
+                    Format ="Short Date"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =6235
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =7486
+                    LayoutCachedHeight =371
+                End
+                Begin TextBox
+                    EnterKeyBehavior = NotDefault
+                    ScrollBars =2
+                    BorderWidth =2
+                    OverlapFlags =85
+                    IMESentenceMode =3
+                    Left =7710
+                    Top =56
+                    Width =7485
+                    Height =333
+                    ColumnWidth =7215
+                    TabIndex =4
+                    BorderColor =12835293
+                    ForeColor =4138256
+                    Name ="Modifications"
+                    ControlSource ="Modifications"
+                    StatusBarText ="Modifications apportées par la nouvelle version"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =7710
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =15195
+                    LayoutCachedHeight =389
+                End
+                Begin CommandButton
+                    OverlapFlags =85
+                    Left =15363
+                    Top =56
+                    Width =1134
+                    Height =340
+                    TabIndex =6
+                    ForeColor =4138256
+                    Name ="cmd_valider"
+                    Caption ="Valider"
+                    OnClick ="[Event Procedure]"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =15363
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =16497
+                    LayoutCachedHeight =396
+                    BackColor =10855845
+                    BorderColor =16777215
+                    BorderThemeColorIndex =-1
+                    BorderShade =100.0
+                    WebImagePaddingLeft =2
+                    WebImagePaddingTop =2
+                    WebImagePaddingRight =1
+                    WebImagePaddingBottom =1
+                End
+                Begin CommandButton
+                    OverlapFlags =85
+                    Left =16781
+                    Top =56
+                    Width =1314
+                    Height =340
+                    TabIndex =7
+                    ForeColor =4138256
+                    Name ="cmd_suppr"
+                    Caption ="Supprimer"
+                    OnClick ="[Event Procedure]"
+                    GridlineColor =10921638
+
+                    LayoutCachedLeft =16781
+                    LayoutCachedTop =56
+                    LayoutCachedWidth =18095
+                    LayoutCachedHeight =396
+                    BackColor =10855845
+                    BorderColor =16777215
+                    BorderThemeColorIndex =-1
+                    BorderShade =100.0
+                    WebImagePaddingLeft =2
+                    WebImagePaddingTop =2
+                    WebImagePaddingRight =1
+                    WebImagePaddingBottom =1
+                End
+            End
+        End
+        Begin FormFooter
+            Height =0
+            BackColor =10855845
+            Name ="PiedFormulaire"
+            AlternateBackThemeColorIndex =1
+            AlternateBackShade =95.0
+        End
+    End
+End
+CodeBehindForm
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = True
+Attribute VB_PredeclaredId = True
+Attribute VB_Exposed = False
+Option Compare Database
+Option Explicit
+
+Private Sub cmd_actu_Click()
+  Me.Requery
+  Me.Refresh
+End Sub
+
+Private Sub cmd_suppr_Click()
+  Dim rs As DAO.Recordset
+
+  Me.AllowDeletions = True
+  Me.Refresh
+  DoCmd.RunCommand acCmdDeleteRecord
+  Me.AllowDeletions = False
+  Call MAJ_Local(DLast("[VERSION_lb]", "ztblVersion", ""), DLast("[VERSION]", "ztblVersion", ""))
+  Me.Refresh
+End Sub
+
+Private Sub cmd_valider_Click()
+  Me.Valide_le = Date
+  Me.Valide_par = Environ("USERNAME")
+  Me.Refresh
+End Sub
+
+Private Sub cmd_ajout_Click()
+  Dim rs As DAO.Recordset
+  Set rs = CurrentDb.OpenRecordset("ztblVersion")
+  rs.AddNew
+  rs![VERSION] = Now()
+  rs![VERSION_lb] = DLast("[VERSION_lb]", "ztblVersion", "")
+  rs![Modifie_par] = Environ("USERNAME")
+  rs![Modifications] = Nz(InputBox("Modifications apportées:"), "")
+  rs.Update
+  rs.Close
+  Set rs = Nothing
+
+  Call MAJ_Local(Nz(DLast("[VERSION_lb]", "ztblVersion", ""), ""), Date)
+
+  Me.Requery
+  Me.Refresh
+End Sub
+
+Private Sub Commande14_Click()
+On Error GoTo Err_Commande14_Click
+
+    If Me.Dirty Then Me.Dirty = False
+    DoCmd.Close
+
+Exit_Commande14_Click:
+    Exit Sub
+
+Err_Commande14_Click:
+    MsgBox err.Description
+    Resume Exit_Commande14_Click
+    
+End Sub
+
+Private Sub Form_Current()
+  If estAdmin() = False Then
+    Me.cmd_ajout.Visible = False
+    Me.cmd_suppr.Visible = False
+    Me.cmd_valider.Visible = False
+
+    Me.VERSION.Locked = True
+    Me.VERSION_lb.Locked = True
+    Me.Modifie_par.Locked = True
+    Me.Valide_le.Locked = True
+    Me.Valide_par.Locked = True
+    Me.Modifications.Locked = True
+  End If
+End Sub
+
+Private Sub VERSION_AfterUpdate()
+  Me.Requery
+  Call MAJ_Local("", Me.VERSION)
+End Sub
+
+Private Sub VERSION_lb_AfterUpdate()
+  Me.Requery
+  Call MAJ_Local(Me.VERSION_lb)
+End Sub
+
+Sub MAJ_Local(VERSION_lb As String, Optional VERSION As String)
+  Dim rs As DAO.Recordset
+  Dim k1, k2 As Integer
+
+  k1 = 0
+  k2 = 0
+
+  If Not Len(VERSION_lb) > 0 Then k2 = 1
+  If Not Len(VERSION) > 0 Then k1 = 1
+
+  If k1 = 1 And k2 = 1 Then Exit Sub
+  If MsgBox("Mettre à jour la table tbl_parametre (local)?", vbYesNo) = vbNo Then Exit Sub
+
+  'mise à jour des champs s'il existent
+  Set rs = CurrentDb.OpenRecordset("tbl_parametre")
+  rs.MoveFirst
+  Do Until rs.EOF = True
+    If k1 = 0 And rs![Parametre] = "VERSION" Then
+      rs.Edit
+      rs![valeur] = VERSION
+      rs.Update
+      k1 = 1
+    End If
+    If k2 = 0 And rs![Parametre] = "VERSION_lb" Then
+      rs.Edit
+      rs![valeur] = VERSION_lb
+      rs.Update
+      k2 = 1
+    End If
+    rs.MoveNext
+  Loop
+
+  'création s'ils sont manquants
+  If k1 = 0 Then
+     rs.AddNew
+     rs![Parametre] = "VERSION"
+     rs![valeur] = VERSION
+     rs.Update
+  End If
+  If k2 = 0 Then
+     rs.AddNew
+     rs![Parametre] = "VERSION_lb"
+     rs![valeur] = VERSION_lb
+     rs.Update
+  End If
+  rs.Close
+
+End Sub

+ 76 - 0
source/modules/AT_Access.bas

@@ -0,0 +1,76 @@
+Option Compare Database
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' Operations on access objects: tables, queries, forms, reports, macros, modules
+
+Public Function table_exists(tname As String) As Boolean
+    Dim td As Object
+    
+    table_exists = False
+    For Each td In CurrentDb.TableDefs
+        If td.name = tname Then
+            table_exists = True
+            Exit Function
+        End If
+    Next td
+    
+End Function
+
+Public Function query_exists(qname As String) As Boolean
+    Dim rd As Object
+    
+    query_exists = False
+    For Each rd In CurrentDb.QueryDefs
+        If rd.name = nom Then
+            query_exists = True
+            Exit Function
+        End If
+    Next rd
+
+End Function
+
+Public Function form_exists(fname As String) As Boolean
+    Dim frm As Object
+    
+    form_exists = False
+    For Each frm In CurrentProject.AllForms
+        If frm.name = fname Then
+            form_exists = True
+            GoTo fin
+        End If
+    Next frm
+
+End Function
+
+Public Function report_exists(rname As String) As Boolean
+    Dim rpt As Object
+    
+    report_exists = False
+    For Each rpt In CurrentProject.AllReports
+        If et.name = rname Then
+            etatExiste = True
+            GoTo fin
+        End If
+    Next rpt
+
+End Function
+
+Public Function form_is_opened(fname As String) As Boolean
+
+    form_is_opened = False
+    If Not form_exists(fname) Then Exit Function
+    form_is_opened = CurrentProject.AllForms(fname).IsLoaded
+    
+End Function
+
+Public Function report_is_opened(rname As String) As Boolean
+
+    report_is_opened = False
+    If Not report_exists(rname) Then Exit Function
+    report_is_opened = CurrentProject.AllReports(rname).IsLoaded
+    
+End Function

+ 191 - 0
source/modules/AT_BackDB.bas

@@ -0,0 +1,191 @@
+Option Compare Database
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' Manage external databases
+
+Public Function EtatModeConnexion() As String
+  On Error GoTo err
+  'renvoie le mode de connexion actuel, ou une chaine vide si celui-ci ne peut être determiné
+  Dim table As DAO.TableDef
+  Dim modeConnexion, dirConnexionTable, modeConnexionTable As String
+  Dim compte, compteErr As Integer
+  'à noter: dans la table des bases dorsales, mode de connexion = '*' pour que cette base soit ignorée lors des tests
+  
+  modeConnexion = ""
+  If Not tableExiste("ztblBasesDorsales") Then GoTo errZtbl
+  
+  For Each table In CurrentDb.TableDefs
+    If Len(table.Connect) > 0 Then
+      dirConnexionTable = replace(table.Connect, ";DATABASE=", "")
+      modeConnexionTable = Nz(DFirst("Mode", "ztblBasesDorsales", "[NomBase]='" & extraitNomFichier(dirConnexionTable) & "' AND [rep]='" & repFichier(dirConnexionTable) & "'"), "")
+      If modeConnexionTable = "*" Then
+        'on passe à la suite
+      ElseIf Len(modeConnexionTable) > 0 Then
+        'c'est une table liée
+        If Len(modeConnexion) = 0 Then
+          modeConnexion = modeConnexionTable
+        Else
+          If modeConnexion <> modeConnexionTable Then GoTo errConnexionsIncoherentes
+        End If
+      Else
+        GoTo errBaseIntrouvable
+      End If
+    End If
+  Next table
+  EtatModeConnexion = modeConnexion
+fin:
+    Exit Function
+err:
+   MsgBox "Erreur lors de la détermination du mode de connexion:" & vbNewLine & err.Description
+   GoTo fin
+errZtbl:
+   MsgBox "Erreur lors de la détermination du mode de connexion:" & vbNewLine & "La table ztblBasesDorsales est manquante"
+   GoTo fin
+errBaseIntrouvable:
+   MsgBox "Erreur lors de la détermination du mode de connexion:" & vbNewLine & "La base d'une table est introuvable dans ztblBasesDorsales"
+   GoTo fin
+errConnexionsIncoherentes:
+   MsgBox "Erreur lors de la détermination du mode de connexion:" & vbNewLine & "Connexions incohérentes détectées"
+   GoTo fin
+End Function
+
+Public Sub choisirModeConnexion()
+On Error GoTo err
+  If Not tableExiste("ztblBasesDorsales") Then GoTo errZtbl
+  If Not formExiste("zfrmBasesDorsales") Then GoTo errZfrm
+
+  DoCmd.OpenForm "zfrmBasesDorsales"
+  
+fin:
+Exit Sub
+err:
+  MsgBox "Erreur en cours de procédure:" & err.Description
+  GoTo fin
+errZtbl:
+  MsgBox "Erreur: la table ztblBasesDorsales est nécessaire (cf. FonctionsCommunes.accdb)"
+  GoTo fin
+errZfrm:
+  MsgBox "Erreur: le formulaire zfrmBasesDorsales est nécessaire (cf. FonctionsCommunes.accdb)"
+  GoTo fin
+End Sub
+
+Public Function majConnectionsAppli(ByVal mode As String) As Boolean
+'met à jour les connections de toutes les tables
+  Dim table As DAO.TableDef
+  Dim compte, compteOK As Integer
+  compte = 0
+  compteOK = 0
+  
+  majConnectionsAppli = False
+  
+  If Not tableExiste("ztblBasesDorsales") Then GoTo errZtbl
+  If Not formExiste("zfrmBasesDorsales") Then GoTo errZfrm
+  Application.Echo False
+  DoCmd.Hourglass True
+  
+  If modeValide(mode) = False Then GoTo errModeNonValide
+  
+  For Each table In CurrentDb.TableDefs
+    If Len(table.Connect) > 0 Then
+      'c'est une table liée
+      compte = compte + 1
+      If ConnectMdb(table.name, mode, True) = True Then compteOK = compteOK + 1
+    End If
+  Next table
+If compteOK <> compte Then GoTo errErreursDetectees
+
+majConnectionsAppli = True
+Application.Echo True
+MsgBox "Opération terminée"
+fin:
+  Application.Echo True
+  DoCmd.Hourglass False
+  Exit Function
+err:
+  MsgBox "Erreur en cours de procédure:" & err.Description
+  GoTo fin
+errZtbl:
+  MsgBox "Erreur: la table ztblBasesDorsales est nécessaire (cf. FonctionsCommunes.accdb)"
+  GoTo fin
+errZfrm:
+  MsgBox "Erreur: le formulaire zfrmBasesDorsales est nécessaire (cf. FonctionsCommunes.accdb)"
+  GoTo fin
+errErreursDetectees:
+  MsgBox "Erreur: certaines attaches ne sembles pas avoir été mises à jour correctement"
+  GoTo fin
+errModeNonValide:
+  MsgBox "Erreur: ce mode n'est pas reconnu"
+  GoTo fin
+End Function
+
+Private Function ConnectMdb(ByVal tbl As String, ByVal mode As String, Optional silencieuse As Boolean = False) As Boolean
+'met à jour la connexion de la table selon le mode de branchement demandé
+On Error GoTo err
+Dim bdd As DAO.Database
+Dim td As DAO.TableDef
+Dim connexion, nouveauRep, fichier As String
+ConnectMdb = False
+
+If Not tableExiste(tbl) Then GoTo errTableManq
+
+Set bdd = CurrentDb
+Set td = bdd.TableDefs(tbl)
+
+connexion = Nz(td.Connect, "")       'etat de la connexion actuelle
+If Len(connexion) = 0 Then GoTo errMajLien
+
+fichier = extraitNomFichier(connexion)
+If Nz(DFirst("Mode", "ztblBasesDorsales", "[NomBase]='" & fichier & "'"), "") = "*" Then GoTo reussite
+nouveauRep = Nz(DFirst("Rep", "ztblBasesDorsales", "[Mode]='" & mode & "' and [NomBase]='" & fichier & "'"), "")
+If Len(nouveauRep) = 0 Or Dir(nouveauRep, vbDirectory) = "" Then GoTo errRep
+If Right(nouveauRep, 1) <> "\" Then nouveauRep = nouveauRep & "\"
+
+' Modifie la propriété Connect avec la nouvelle chaîne de connexion
+ td.Connect = ";DATABASE=" & nouveauRep & fichier
+'Met à jour la liaison
+ td.RefreshLink
+ 
+reussite:
+ ConnectMdb = True
+fin:
+  If Len(msgErr) > 0 Then
+    If silencieuse = True Then
+      Debug.Print msgErr
+    Else
+      MsgBox msgErr
+    End If
+  End If
+  Set td = Nothing
+  Set db = Nothing
+  Exit Function
+errTableManq:
+  msgErr = "Impossible de mettre à jour la connexion de " & tbl & ": table introuvable"
+  GoTo fin
+err:
+  msgErr = "Impossible de mettre à jour la connexion de " & tbl & ": " & err.Description
+  GoTo fin
+errMajLien:
+  msgErr = "Impossible de mettre à jour la connexion de " & tbl & ": impossible de déterminer l'état actuel de la connexion de la table, ce n'est peut-être pas une table liée"
+  GoTo fin
+errRep:
+  msgErr = "Impossible de mettre à jour la connexion de " & tbl & ": répertoire cible invalide"
+  GoTo fin
+End Function
+
+Private Function modeValide(ByVal mode As String) As Boolean
+On Error GoTo fin
+  modeValide = False
+  modeValide = (DCount("Mode", "ztblBasesDorsales", "[Mode]='" & mode & "'") > 0)
+fin:
+End Function
+
+Public Function modeConnexionParDefaut()
+On Error GoTo fin
+  modeConnexionParDefaut = ""
+  modeConnexionParDefaut = Nz(DFirst("ModeDefaut", "ztblUtilisateurs", "[login]='" & CurrentUser & "'"), "")
+fin:
+End Function

+ 31 - 0
source/modules/AT_Collections.bas

@@ -0,0 +1,31 @@
+Option Compare Database
+Option Explicit
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' Operations on iterables
+
+Public Function concat(ByRef iterable As Variant, Optional separator As String = ";")
+    Dim var As Variant
+    
+    concat = ""
+    For Each var In iterable
+        If Len(concat) > 0 Then concat = concat & separator
+        concat = concat & CStr(var)
+    Next var
+
+End Function
+
+Function contains(ByRef iterable As Variant, value As Variant) As Boolean
+    Dim var As Variant
+    contains = False
+    For Each var In iterable
+        If var = value Then
+            contains = True
+            Exit Function
+        End If
+    Next var
+End Function

+ 67 - 0
source/modules/AT_FileDialog.bas

@@ -0,0 +1,67 @@
+Option Compare Database
+Option Explicit
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' Files selection dialogs
+
+' ! Requires: Microsoft Office xx.0 Object Library.
+
+Public Function FileDialog(Optional ByVal title As String = "Select File(s)", _
+                            Optional ByVal directory As String = ".", _
+                            Optional ByVal multi_select As Boolean = False, _
+                            Optional ByVal name_filter As String = "", _
+                            Optional ByVal type_filter As String = "", _
+                            Optional separator As String = "|") As String
+                                 
+    Dim fd As Office.FileDialog
+    Dim vFilename As Variant
+    
+    FileDialog = ""
+    
+    Set fd = Application.FileDialog(msoFileDialogFilePicker)
+    fd.title = title
+    fd.AllowMultiSelect = multi_select
+    fd.InitialFileName = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(directory)
+    fd.Filters.Clear
+    fd.Filters.Add "All files", "*.*"
+    If Len(name_filter) > 0 And Len(type_filter) > 0 Then
+       If InStr(type_filter, ".") = 0 Then type_filter = "." & type_filter
+       If InStr(type_filter, "*") = 0 Then type_filter = "*" & type_filter
+       fd.Filters.Add name_filter, type_filter
+       fd.FilterIndex = 2
+    End If
+    
+    If fd.Show() Then
+    
+      For Each vFilename In fd.SelectedItems
+        If Len(FileDialog) > 0 Then FileDialog = FileDialog & separator
+        FileDialog = FileDialog & vFilename
+      Next
+      
+    End If
+    
+    Set fd = Nothing
+  
+End Function
+
+Public Function DirectoryDialog(Optional ByVal title As String = "Select a directory", _
+                                Optional ByVal directory As String = ".") As String
+    Dim fd As Office.FileDialog
+    Dim varDirname As Variant
+    
+    DirectoryDialog = ""
+    
+    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
+    
+    fd.title = title
+    fd.InitialFileName = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(directory)
+    If fd.Show() Then
+      DirectoryDialog = fd.SelectedItems(1) & "\"
+    End If
+    Set fd = Nothing
+
+End Function

+ 182 - 0
source/modules/AT_FileOp.bas

@@ -0,0 +1,182 @@
+Option Compare Database
+Option Explicit
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' Various file operations
+
+Public Function norm_path(ByVal path As String) As String
+
+    path = replace(path, "/", "\")
+    Do Until path = replace(path, "\\", "\")
+        path = replace(path, "\\", "\")
+    Loop
+    norm_path = path
+    
+End Function
+
+Public Function norm_dir_path(ByVal dir_path As String) As String
+    
+    dir_path = norm_path(dir_path)
+    If Right(dir_path, 1) <> "\" Then dir_path = dir_path & "\"
+    norm_dir_path = dir_path
+
+End Function
+
+Public Function joinpaths(ByVal path1 As String, ByVal path2 As String) As String
+
+    path1 = norm_path(path1)
+    path2 = norm_path(path2)
+    If Not Right(path1, 1) = "\" Or Left(path2, 1) = "\" Then
+        path1 = path1 & "\"
+    End If
+    joinpaths = path1 & path2
+
+End Function
+
+Public Function dir_exists(ByVal dir_path As String) As Boolean
+
+    dir_exists = Dir(norm_dir_path(dir_path), vbDirectory) <> ""
+
+End Function
+
+Public Function file_exists(ByVal file_path As String) As Boolean
+
+    file_exists = Dir(norm_path(file_path)) <> ""
+
+End Function
+
+Public Sub mktree(ByVal dirpath As String)
+'recursively create the directory if it does not exist
+    On Error GoTo err
+    Dim path_part, current_path As String
+    current_path = ""
+    dirpath = norm_dir_path(dirpath)
+    
+    If Dir(dirpath, vbDirectory) <> "" Then Exit Sub
+    
+    For Each path_part In Split(dirpath, "\")
+        If Len(path_part) > 0 Then
+            current_path = current_path & path_part & "\"
+            If Dir(current_path, vbDirectory) = "" Then
+                MkDir current_path
+            End If
+        End If
+    Next path_part
+    
+    Exit Sub
+err:
+    If err.number = 75 Then
+        'dir already exist
+    Else
+        logger "MkDirIfNotExist", "ERROR", "Unable to create directory " & dirpath & " : " & err.Description
+    End If
+End Sub
+
+Public Function parent_dir(path As String) As String
+    
+    parent_dir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(path)
+    
+    'OR parent_dir = Left(path, InStrRev(path, "\", Len(path) - 1))
+End Function
+
+Public Function file_name(path As String) As String
+    
+    file_name = CreateObject("Scripting.FileSystemObject").GetBaseName(path)
+    
+    'OR file_name = Split(cheminFichier, "\")(UBound(Split(cheminFichier, "\")))
+End Function
+
+Public Function abs_path(path As String) As String
+'returns the absolute path
+    
+    abs_path = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(path)
+    
+End Function
+
+Public Sub del_if_exist(ByVal path As String)
+'delete a file if it exists
+    If Dir(path) <> "" Then
+        Kill path
+    End If
+End Sub
+
+Public Function list_files_in(ByVal dirpath As String, Optional ByVal filter As String = "")
+    Dim filename As String
+    list_files_in = ""
+    
+    dirpath = norm_dir_path(dirpath)
+    
+    filename = Dir$(dirpath & filter)
+    
+    Do Until Len(filename) = 0
+        If Len(list_files_in) > 0 Then list_files_in = list_files_in & "|"
+        
+        list_files_in = list_files_in & filename
+        
+        filename = Dir$()
+    Loop
+    
+End Function
+
+Public Function read_file(filepath As String, Optional encoding As String = "utf-8") As String
+    Dim objStream As ADODB.Stream
+    Set objStream = New ADODB.Stream
+
+    objStream.Charset = encoding
+    objStream.Open
+    objStream.LoadFromFile (filepath)
+    ReadFile = objStream.ReadText()
+    
+    objStream.Close
+    Set objStream = Nothing
+End Function
+
+Public Sub make_file(filepath As String, content As String, Optional encoding As String = "utf-8")
+    Dim objStream As ADODB.Stream
+    
+    Set objStream = CreateObject("ADODB.Stream")
+    objStream.Open
+    objStream.Type = 2 'Text
+    objStream.Charset = encoding
+    objStream.WriteText content
+    objStream.SaveToFile (filepath)
+    objStream.Close
+
+End Sub
+
+' Generate Random / Unique tempprary file name.
+Public Function temp_filename(Optional ByVal sPrefix As String = "tmp") As String
+    Dim sTmpPath As String * 512
+    Dim sTmpName As String * 576
+    Dim nRet As Long
+    Dim sFileName As String
+    
+    nRet = getTempPath(512, sTmpPath)
+    nRet = getTempFileName(sTmpPath, sPrefix, 0, sTmpName)
+    If nRet <> 0 Then sFileName = Left$(sTmpName, InStr(sTmpName, vbNullChar) - 1)
+    TempFile = sFileName
+    
+End Function
+
+Public Function is_valid_filename(ByVal sName As String) As Boolean
+    'returns True if sName is a valid file's name
+    
+    IsValidFileName = (InStr(sName, "\") = 0 And InStr(sName, "/") = 0 And InStr(sName, "*") = 0 And InStr(sName, "?") = 0 And InStr(sName, Chr(34)) = 0 And InStr(sName, "|") = 0 And InStr(sName, ":") = 0 And InStr(sName, ">") = 0 And InStr(sName, "<") = 0)
+                        
+End Function
+
+Public Function run_file(filepath As String, Optional args As String = "")
+
+    Shell "cmd.exe /r start " & filepath & " " & args, vbHide
+
+End Function
+
+Public Sub open_file(filepath As String)
+
+    Application.FollowHyperlink filepath
+
+End Sub

+ 67 - 0
source/modules/AT_Mail.bas

@@ -0,0 +1,67 @@
+Option Compare Database
+Option Explicit
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' Send mails
+
+' ! Requires Microsoft Outlook XX.X library
+
+Public Sub send_mail(ByVal subject As String, _
+                    ByVal content As String, _
+                    Optional recipient As String, _
+                    Optional auto_send As Boolean = False, _
+                    Optional attachment As String = "", _
+                    Optional signature As Boolean = False)
+
+    Dim olApp As Outlook.Application
+    Dim objMail As Outlook.MailItem
+    Dim oAccount As Outlook.Account
+    Dim olExplorer As Outlook.Explorer
+    Set olApp = GetObject("", "Outlook.Application")
+    Dim mpf As Outlook.MAPIFolder
+    
+    Dim is_html As Boolean
+    is_html = (Left(content, 6) = "<html>")
+    
+    Set objMail = olApp.CreateItem(olMailItem)
+    objMail.subject = subject
+    
+    If is_html = True Then
+      If signature = True Then
+        objMail.Display
+        objMail.HTMLBody = content & vbNewLine & objMail.HTMLBody
+        If auto_send Then objMail.Close olDiscard
+      Else
+        objMail.HTMLBody = content
+        If Not auto_send Then objMail.Display
+      End If
+      objMail.BodyFormat = olFormatHTML
+    Else
+      objMail.Body = content
+      objMail.BodyFormat = olFormatRichText
+      If Not auto_send Then objMail.Display
+    End If
+    
+    If Len(attachment) > 0 Then
+        objMail.Attachments.Add attachment, olByValue, 1
+    End If
+    
+    objMail.To = recipient
+    'objMail.Cc = ""
+    'objMail.BCC= ""
+     
+    If auto_send Then objMail.send
+    
+    Set olApp = Nothing
+    Set objMail = Nothing
+End Sub
+
+Public Function current_account()
+ Dim olApp As Outlook.Application
+ Set olApp = GetObject("", "Outlook.Application")
+ current_account = olApp.Session.Accounts(1).SmtpAddress
+End Function

+ 21 - 0
source/modules/AT_Math.bas

@@ -0,0 +1,21 @@
+Option Compare Database
+Option Explicit
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' Math operations
+
+Public Function is_pair(ByVal number As Long) As Boolean
+  is_pair = (number Mod 2 = 0)
+End Function
+
+Public Function round_up(ByVal val As Variant, Optional ByVal nb_dec As Integer = 0) As Variant
+   round_up = -Int(-val * 10 ^ nb_dec) / 10 ^ nb_dec
+End Function
+ 
+Public Function round_down(ByVal val As Variant, Optional ByVal nb_dec As Integer = 0) As Variant
+   round_down = Int(val * 10 ^ nb_dec) / 10 ^ nb_dec
+End Function

+ 44 - 0
source/modules/AT_PathManager.bas

@@ -0,0 +1,44 @@
+Option Compare Database
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' Store and manage external paths
+
+' Needs the 'zt_paths' table
+
+Public Function get_path(ByVal pathname As String, Optional mode As String = "*") As String
+    On Error GoTo err
+ 
+    get_path = DFirst("path", "zt_paths", "[pathname]='" & pathname & "' AND [mode] like '" & mode & "'")
+
+fin:
+    Exit Function
+err:
+    If err.number = 94 Then
+        MsgBox "Le lien vers '" & nom & "' (mode '" & mode & "') n'existe pas dans ztbl_liens", vbCritical
+    Else
+        MsgBox "Impossible de trouver le lien '" & nom & "' (mode '" & mode & "'):" & vbNewLine & err.Description, vbCritical
+    End If
+End Function
+
+Public Sub set_path(ByVal pathname As String, ByVal path As String, Optional mode As String = "*")
+    On Error GoTo err
+    
+    If DCount("path", "zt_paths", "[pathname]='" & pathname & "' AND [mode] like '" & mode & "'") > 0 Then
+       sql = "UPDATE zt_paths SET zt_paths.path = '" & path & "'" & _
+             "WHERE ((zt_paths.pathname='" & pathname & "') AND (zt_paths.mode Like '" & mode & "'));"
+    Else
+       sql = "INSERT INTO zt_paths ( pathname, mode, path ) " & _
+             "SELECT '" & pathname & "' AS Expr1, '" & mode & "' AS Expr2, '" & path & "' AS Expr3;"
+    End If
+    
+    CurrentDb.execute sql
+    
+fin:
+    Exit Sub
+err:
+    MsgBox "Erreur lors de la mise à jour du lien '" & pathname & "' (mode '" & mode & "'):" & vbNewLine & err.Description, vbCritical
+End Sub

+ 207 - 0
source/modules/AT_Pdf.bas

@@ -0,0 +1,207 @@
+Option Compare Database
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' Operations on PDF Files
+
+' ! Requires AT_Access
+' ! Requires PDF Creator 1.7.0
+
+Public Function export_pdf(report_name As String, _
+                            dir_path As String, _
+                            Optional pdf_name As String = "", _
+                            Optional filter As String = "", _
+                            Optional replace As Boolean = True) As Boolean
+  On Error GoTo err
+
+  export_pdf = False
+
+  If Not report_exists(report_name) Then GoTo errNotExist
+  
+  If Right(dir_path, 1) <> "\" Then dir_path = dir_path & "\"
+  
+  If Dir(dir_path, vbDirectory) = "" Then GoTo errDirNotExist
+  
+  If Not Len(pdf_name) > 0 Then pdf_name = report_name
+  
+  If Right(nomPDF, 4) <> ".pdf" Then pdf_name = pdf_name & ".pdf"
+
+  If Dir(dir_path & pdf_name) <> "" Then
+        If replace = False Then
+          If MsgBox("Un fichier PDF portant ce nom existe déjà, voulez-vous l'écraser?", vbYesNo) = vbNo Then
+             GoTo cancel_
+          End If
+        End If
+        
+        On Error GoTo errDelFile
+        Kill repCible & nomPDF
+        On Error GoTo err
+  End If
+
+  If Not report_is_opened(report_name) Then DoCmd.OpenReport nomEtat, acViewNormal, , filter, acHidden
+  DoCmd.OutputTo acOutputReport, report_name, acFormatPDF, dir_path & pdf_name
+  DoCmd.Close acReport, report_name, acSaveNo
+  
+  exportPDF = True
+
+fin:
+  Exit Function
+errNotExist:
+  MsgBox "Erreur: l'état demandé n'existe pas ('" & report_name & "')"
+  GoTo fin
+errDirNotExist:
+  MsgBox "Erreur: le répertoire cible '" & repCible & "' n'existe pas, veuillez le créer ou contacter un administrateur."
+  GoTo fin
+cancel_:
+  MsgBox "Export PDF annulé"
+  GoTo fin
+errDelFile:
+  MsgBox "Impossible de supprimer le fichier existant, il est peut-être ouvert?" & vbNewLine & "Opération annulée"
+  GoTo fin
+err:
+  MsgBox "Erreur de l'export PDF : " & vbNewLine & err.Description
+  GoTo fin
+End Function
+
+Public Sub pdf_append(ByVal path_pdf1 As String, ByVal path_pdf2 As String, ByVal result_path As String)
+'Créé le fichier PDF 'result_path' en indérant le PDF 2 à la suite du PDF 1
+' usage:
+' >>       pdf_append "C:\path\to\file1.pdf", "C:\path\to\file2.pdf", "C:\path\to\file1&2.pdf"
+
+' ATTENTION: nécessite PDF Creator 1.7
+
+    On Error GoTo err
+    Dim oPdf As Object
+    
+    On Error GoTo errPdfforge
+    Set oPdf = CreateObject("pdfforge.pdf.pdf")
+    On Error GoTo err
+    
+    oPdf.MergePDFFiles_2 Array(path_pdf1, path_pdf2), result_path, True
+
+fin:
+    Exit Sub
+err:
+    MsgBox "Erreur lors de la fusion des pdfs: " & err.Description
+    GoTo fin
+errPdfforge:
+    MsgBox "Erreur: Pdfforge 1.7 est nécessaire pour utiliser cette fonction, opération annulée." & vbNewLine & _
+           "Essayez d'installer PDF Creator 1.7.0"
+    GoTo fin
+End Sub
+
+
+
+
+
+Public Sub ExcelVersPDF(cheminExcel As String, Optional cheminPDF As String = "", Optional feuille As Integer = 1, Optional ecraser As Boolean = True)
+  'exporte la page demandée du document excel en pdf
+  
+  '! Requires Micosoft Excel XX.X Object Library
+  
+  Dim objExcel As Excel.Application
+  Dim objExcelDoc As Excel.Workbook
+  Dim objExcelFeuille As Excel.Worksheet
+  
+  If Dir(cheminExcel) = "" Then GoTo errSource
+  If Dir(repFichier(cheminPDF), vbDirectory) = "" Then GoTo errRepCible
+  If Len(cheminPDF) = 0 Then cheminPDF = Split(cheminExcel, ".")(0) & ".pdf"
+  If feuille < 1 Then feuille = 1
+  
+  If Right(cheminPDF, 4) <> ".pdf" Then cheminPDF = cheminPDF & ".pdf"
+  If Dir(cheminPDF) <> "" Then
+    If ecraser = False Then
+      If MsgBox("Un fichier portant ce nom existe déjà, voulez-vous le remplacer", vbYesNo) = vbNo Then GoTo annule
+    End If
+    On Error GoTo errSuppr
+    Kill cheminPDF
+    On Error GoTo err
+  End If
+
+  Set objExcel = CreateObject("Excel.Application")
+  objExcel.Visible = True
+  Set objExcelDoc = objExcel.Workbooks.Open(cheminExcel)
+  If Not objExcel Is Nothing Then
+     objExcelDoc.ExportAsFixedFormat xlTypePDF, cheminPDF, xlQualityStandard, , , feuille, feuille, False
+  End If
+
+fin:
+  On Error Resume Next
+  objExcelDoc.Close False
+  objExcel.Quit
+  Set objExcelDoc = Nothing
+  Set objExcel = Nothing
+  Exit Sub
+err:
+  MsgBox "Erreur: " & err.Description
+  GoTo fin
+errSource:
+  MsgBox "Erreur: Fichier Excel (.xls) introuvable"
+  GoTo fin
+errSuppr:
+  MsgBox "Impossible de supprimer le fichier existant, il est peut-être ouvert?" & vbNewLine & "Opération annulée"
+  GoTo fin
+annule:
+  MsgBox "Opération annulée"
+  GoTo fin
+errRepCible:
+  MsgBox "Erreur: le répertoire cible n'existe pas, veuillez le créer ou prévenir un administrateur"
+  GoTo fin
+End Sub
+
+Public Sub WordVersPDF(cheminWord As String, Optional cheminPDF As String, Optional ecraser As Boolean = True)
+
+'exporte la page demandée du document word en pdf
+
+  '! Requires Micosoft Word XX.X Object Library
+  
+  Dim objWord As Word.Application
+  Dim objWordDoc As Word.Document
+
+  If Dir(cheminWord) = "" Then GoTo errSource
+  If Dir(repFichier(cheminPDF), vbDirectory) = "" Then GoTo errRepCible
+  If Len(cheminPDF) = 0 Then cheminPDF = Split(cheminWord, ".")(0) & ".pdf"
+  
+  If Right(cheminPDF, 4) <> ".pdf" Then cheminPDF = cheminPDF & ".pdf"
+  If Dir(cheminPDF) <> "" Then
+    If ecraser = False Then
+      If MsgBox("Un fichier portant ce nom existe déjà, voulez-vous le remplacer", vbYesNo) = vbNo Then GoTo annule
+    End If
+    On Error GoTo errSuppr
+    Kill cheminPDF
+    On Error GoTo err
+  End If
+
+  Set objWord = CreateObject("Word.Application")
+  objWord.Visible = True
+  Set objWordDoc = objWord.Documents.Open(cheminWord)
+  If Not objWord Is Nothing Then
+     objWordDoc.ExportAsFixedFormat cheminPDF, wdExportFormatPDF, False, wdExportOptimizeForPrint, wdExportAllDocument
+  End If
+
+fin:
+  On Error Resume Next
+  objWordDoc.Close False
+  objWord.Quit
+  Set objWordDoc = Nothing
+  Set objWord = Nothing
+  Exit Sub
+err:
+  MsgBox "Erreur: " & err.Description
+  GoTo fin
+errSource:
+  MsgBox "Erreur: Fichier Word (.doc / .docx) introuvable"
+  GoTo fin
+errSuppr:
+  MsgBox "Impossible de supprimer le fichier existant, il est peut-être ouvert?" & vbNewLine & "Opération annulée"
+  GoTo fin
+annule:
+  MsgBox "Opération annulée"
+  GoTo fin
+errRepCible:
+  MsgBox "Erreur: le répertoire cible n'existe pas, veuillez le créer ou prévenir un administrateur"
+  GoTo fin
+End Sub

+ 42 - 0
source/modules/AT_Start.bas

@@ -0,0 +1,42 @@
+Option Compare Database
+Option Explicit
+
+' ** AT_Start Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' > Use these functions while starting your application
+' You can call them in a macro named 'Autoexec' (it will then launch at start),
+' or at the Open or Load event of your main form
+
+Public Sub LoadMenu(ByVal fname As String)
+
+    ' Requires AT_VersionManager, AT_Mail, AT_Users
+
+    ' display options
+    DoCmd.RunCommand acCmdAppRestore
+    DoCmd.RunCommand acCmdAppMaximize
+
+    '*** users related options
+    
+    ' check if exist, or creates
+    
+
+    '*** connexion
+    
+    ' check current connexion, warns if not default
+    
+
+    '*** check version (only if default connexion)
+    If Not up_to_date() Then
+    
+        Call send_update_mail
+        If Not is_admin() Then
+            Application.Quit
+        End If
+    
+    End If
+    
+
+End Sub

+ 17 - 0
source/modules/AT_Time.bas

@@ -0,0 +1,17 @@
+Option Compare Database
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' Time operations
+
+Public Sub wait(d As Long)
+    'Wait d milliseconds
+    Dim t0 As Single
+    t0 = Timer
+    Do Until (1000 * (Timer - t0)) > d
+      DoEvents
+    Loop
+End Sub

+ 15 - 0
source/modules/AT_Users.bas

@@ -0,0 +1,15 @@
+Option Compare Database
+Option Explicit
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' User management
+
+Public Function is_admin(login As String)
+
+    is_admin = Nz(DFirst("admin", "zt_users", "[login]='" & CurrentUser & "'"), False)
+
+End Function

+ 98 - 0
source/modules/AT_VersionManager.bas

@@ -0,0 +1,98 @@
+Option Compare Database
+
+' ** Access Toolbox Module **
+' on 2017-02-28,
+' @author: Olivier Massot
+' V 1.0
+
+' Version manager
+
+Public Function local_version() As Date
+
+    local_version = DFirst("val", "[t_config]", "[parameter]='version_date'")
+    
+End Function
+
+Public Function last_version() As Date
+
+    last_version = DMax("version_date", "[zt_versions]", "")
+    
+End Function
+
+Public Function up_to_date() As Boolean
+
+    up_to_date = local_version() >= last_version()
+
+End Function
+
+Public Function installer_path() As String
+
+    installer_path = DFirst("val", "[t_config]", "[parameter]='installer_path'")
+
+End Function
+
+
+Public Sub send_update_mail()
+
+' ! Requires 'AT_Mail' module
+
+    'On Error GoTo err
+    Dim version_name As String
+    Dim installer_p As String
+    Dim modif As String
+    Dim subject As String
+    Dim str As String
+    
+    str = "                                        ATTENTION:" & vbNewLine & _
+          vbNewLine & _
+          "           Votre version de l'application n'est pas à jour. " & vbNewLine & _
+          "Voulez-vous qu'un mail de mise à jour vous soit envoyé?"
+    If MsgBox(str, vbYesNo) = vbNo Then Exit Sub
+    
+    sujet = "AUTOMATIQUE - Mise à jour " & CurrentDb.Properties("AppTitle")
+    
+    str = "<html>" & vbCrLf & _
+              "<body>" & vbCrLf & _
+                 "Bonjour, <br><br>" & vbCrLf
+    
+    'version:
+    version_name = Nz(DFirst("version_name", "zt_versions", "[version_date] Like '" & last_version() & "'"), "")
+    If Len(version_name) > 0 Then
+      version_name = " en version: <b>" & version_name & " (" & last_version() & ")</b><br>"
+    Else
+      version_name = " dans une nouvelle version."
+    End If
+    
+    str = str & " L'application <b>" & CurrentDb.Properties("AppTitle") & "</b> est disponible " & version_name & vbCrLf
+    
+    'content
+    version_content = Nz(DLookup("description", "zt_versions", "[version_date] Like '" & last_version() & "'"), "")
+    If Len(version_content) > 0 Then
+     str = str & _
+           " Les modifications suivantes ont été apportées: <br><br>" & vbCrLf & _
+           "  " & version_content & "<br><br>" & vbCrLf
+    End If
+    
+    'fin du message
+    installer_p = installer_path()
+    If Len(installer_p) > 0 And Dir(installer_p) <> "" Then
+       installer_p = "<a href='" & installer_path() & "'>ici</a><br>"
+    Else
+       installer_p = " <b>(lien invalide)</b>"
+    End If
+    
+    str = str & _
+                 " Pour mettre à jour, cliquez " & installer_p & "<br>" & vbCrLf & _
+                 "Bonne journée!" & vbCrLf & _
+                 "Cordialement," & vbCrLf & _
+              "</body>" & vbCrLf & _
+          "</html>"
+    
+    Call send_mail(sujet, str, current_account(), True)
+    
+    MsgBox "Le mail a été envoyé, vous devriez le recevoir d'ici quelques instants."
+
+    Exit Sub
+err:
+    MsgBox "Erreur: Il semble que votre application ne soit pas à jour, et impossible d'envoyer le mail de mise à jour, veuillez contacter un administrateur"
+End Sub

+ 40 - 0
source/modules/Chrono.bas

@@ -0,0 +1,40 @@
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = False
+Option Compare Database
+Option Explicit
+'******
+' Chronomètre (pour tests de performances surtout)
+' v 1
+'******
+Private t0 As Single
+
+
+Private Sub class_Initialize()
+  t0 = Timer
+End Sub
+
+Public Sub demarrer()
+On Error GoTo err
+  t0 = Timer
+Exit Sub
+err:
+MsgBox err.Description
+End Sub
+
+Public Function valeur() As Long
+On Error GoTo err
+  valeur = 1000 * (Timer - t0)
+Exit Function
+err:
+MsgBox err.Description
+End Function
+
+Public Sub Afficher()
+On Error GoTo err
+  Debug.Print 1000 * (Timer - t0) & " ms."
+Exit Sub
+err:
+MsgBox err.Description
+End Sub

+ 95 - 0
source/modules/Demarrage.bas

@@ -0,0 +1,95 @@
+Option Compare Database
+'Version 1 du module
+
+
+Public Sub ChargementMenu()
+'à lancer à l'ouverture de l'application à l'ouverture du menu
+' peut aussi être lancee par le biais d'une macro nommée "AutoExec", mais doit être modifiée
+'lance les différentes vérifications avant lancement: attaches des tables, version, autre
+Dim menu As String
+Dim msg, modeConnexion, connexionParDefaut As String
+Dim VersionAJour, connexionOk As Boolean
+
+'le formulaire menu doit posséder les objets suivants:
+'etiquette: lbVersion
+'etiquette: statVersion
+'bouton: cmdMajConnexion
+'etiquette: txtModeConnexion
+
+    DoCmd.RunCommand acCmdAppRestore
+    DoCmd.RunCommand acCmdAppMaximize
+
+    menu = "frm_Menu"
+
+    '*** utilisateur, droits
+    'on vérifie que l'utilisateur existe dans la base
+    DoCmd.SetWarnings False
+    If Not DCount("login", "ztblUtilisateurs", "[login]='" & CurrentUser & "'") > 0 Then
+      'première connexion
+      DoCmd.RunSQL "INSERT INTO ztblUtilisateurs ( Nom, Login, DroitValid, Admin, ModeDefaut, Notes ) " & _
+                   "SELECT '" & CurrentUser & "' AS Expr1, '" & CurrentUser & "' AS Expr2, False AS Expr3, False AS Expr4, " & _
+                   "'" & EtatModeConnexion & "' AS Expr6, '' AS Expr7;"
+    Else
+      If Len(modeConnexionParDefaut) = 0 Then
+         DoCmd.RunSQL "UPDATE ztblUtilisateurs SET ztblUtilisateurs.ModeDefaut = '" & EtatModeConnexion & "' " & _
+                      "WHERE (((ztblUtilisateurs.Login)='" & CurrentUser & "'));"
+      End If
+    End If
+    DoCmd.SetWarnings True
+    '***
+
+    '***verification du mode de connexion
+    modeConnexion = EtatModeConnexion()
+    connexionParDefaut = modeConnexionParDefaut()
+    If modeConnexion <> connexionParDefaut Then
+      If estAdmin = False Then
+        MsgBox "Attention: les tables ne sont pas correctement attachées." & vbNewLine & _
+               "Veuillez patienter pendant que les liens sont remis à jour"
+        connexionOk = majConnectionsAppli(connexionParDefaut)
+        modeConnexion = EtatModeConnexion()
+      Else
+        If MsgBox("[ADMIN] Attention: votre mode de connexion est " & modeConnexion & vbNewLine & _
+               "Voulez vous revenir à la connexion par défaut? (" & connexionParDefaut & ")", vbYesNo) = vbYes Then
+           Call majConnectionsAppli(connexionParDefaut)
+           modeConnexion = EtatModeConnexion()
+        End If
+      End If
+    Else
+      connexionOk = True
+    End If
+    
+    If connexionOk = False And estAdmin = False Then
+       MsgBox "Erreur de conexion aux tables: veuillez contacter un administrateur"
+       Application.Quit
+    End If
+    forms(menu).cmdMajConnexion.Visible = estAdmin
+    forms(menu).txtModeConnexion.Caption = modeConnexion
+    '***
+
+    '*** controle de la version (si appli connectée au réseau (ou autre connexion par défaut)):
+    If modeConnexion = connexionParDefaut Then
+       VersionAJour = VerificationVersion()
+       If VersionAJour = True Then
+         msg = "Version à jour"
+       Else
+         msg = "(!) VOTRE VERSION DE L'APPLICATION N'EST PAS A JOUR (!)"
+         Call Mail_Maj  'propose l'envoi d'un mail de mise à jour
+       End If
+
+       If VersionAJour = False And estAdmin() = False Then Application.Quit
+       forms(menu).statVersion.Caption = msg
+    End If
+    
+    forms(menu).lbVersion.Caption = "Version " & Nz(DLookup("[Valeur]", "[tbl_parametre]", "[Parametre]='VERSION_lb'"), "x") & _
+                       " du " & Nz(DLookup("[Valeur]", "[tbl_parametre]", "[Parametre]='VERSION'"), "?")
+    '***
+
+    
+    
+    '*** autres procédures
+    If modeConnexion = connexionParDefaut Then
+       '...
+    End If
+    '***
+
+End Sub

+ 67 - 0
source/modules/FichierTXT.bas

@@ -0,0 +1,67 @@
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = False
+Option Compare Database
+Option Explicit
+'******
+' Lecture/ecriture d'un fichier .txt, utilisé entre autre pour le déboguage de procédure
+' v 1
+'******
+Private locRef As Variant
+Private locCheminFichier As String
+Property Let cheminFichier(chemin As String)
+  locCheminFichier = chemin
+End Property
+Property Get cheminFichier() As String
+  cheminFichier = locCheminFichier
+End Property
+
+Public Sub creer(Optional chemin As String = "")
+On Error GoTo errInc
+Dim ref As Variant
+  'chemin complet du fichier de destination
+  If Len(chemin) > 0 Then locCheminFichier = chemin
+  'le chemin a été renseigné
+  If Not Len(locCheminFichier) > 0 Then GoTo errChemin
+  'on écrase le fichier s'il existe déjà
+  If Dir(locCheminFichier) <> "" Then Kill locCheminFichier
+  'ouverture du fichier
+  locRef = FreeFile(1)
+  Open locCheminFichier For Append Access Write Shared As locRef
+
+fin:
+
+  Exit Sub
+errChemin:
+  MsgBox "FichierTXT: impossible de créer le fichier, un chemin valide doit être renseigné"
+  GoTo fin
+errInc:
+  MsgBox "FichierTXT: impossible de créer le fichier:" & vbNewLine & err.Description
+  GoTo fin
+End Sub
+
+Public Sub ecrire(txt As String)
+'ajoute une ligne au fichier
+On Error GoTo err
+  Print #locRef, txt
+fin:
+  Exit Sub
+err:
+  MsgBox "FichierTXT: impossible d'ajouter la ligne demandée:" & vbNewLine & err.Description
+  GoTo fin
+End Sub
+
+Public Sub fermer()
+On Error GoTo fin
+  'on ferme le fichier s'il ne l'est pas déjà
+  Close #locRef
+fin:
+End Sub
+
+Private Sub class_Terminate()
+On Error GoTo fin
+  'on ferme le fichier s'il ne l'est pas déjà
+  Close #locRef
+fin:
+End Sub

+ 137 - 0
source/modules/FichierXML.bas

@@ -0,0 +1,137 @@
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = False
+Option Compare Database
+Option Explicit
+'******
+' Créer et éditer un ficher XML complexe
+' v 1
+'******
+Private cheminXML As String  'nom du fichier à créer
+Private oXML As MSXML2.DOMDocument60        'ref au fichier xml
+Private oNode As MSXML2.IXMLDOMNode       'noeud principal du document
+Private n(99) As MSXML2.IXMLDOMNode       'arborescence des noeuds
+Private position As Integer          'position dans l'arborescence
+Private S As Boolean                      'activer la sauvegarde progressive? (deboguage)
+
+Private Sub exempleCreationXML()
+'exemple d'utilisation de cette classe
+  Dim xml As New FichierXML
+
+  xml.creer ("c:\essai.xml")
+  
+  xml.ouvrirNoeud "a"
+  xml.ajout "a1", "essai"
+  
+  xml.ouvrirNoeud "b"
+  xml.ajout "b1", 123
+  xml.ajout "b2", #1/1/2015#
+  xml.fermerNoeud "b"
+  
+  xml.ajout "a2", "essai2"
+  
+  xml.enregistrer
+
+End Sub
+
+Public Sub creer(chemin As String, Optional nomNoeudPrincipal As String = "", Optional svgConstante As Boolean = False)
+
+  If initialiser(nomNoeudPrincipal, svgConstante) = False Then GoTo fin
+  If majCheminXML(chemin) = False Then GoTo fin
+  If S = True Then Call enregistrer
+  
+fin:
+End Sub
+
+Public Sub enregistrer(Optional chemin As String = "", Optional ecraser As Boolean = True)
+On err GoTo err
+
+   If Len(chemin) > 0 Then
+     If majCheminXML(chemin) = False Then GoTo fin
+   End If
+   oXML.Save cheminXML
+   
+fin:
+  Exit Sub
+err:
+  MsgBox "Erreur (sauvegarde du fichier XML): " & err.Description
+  GoTo fin
+End Sub
+
+Private Sub class_Initialize()
+  'Call initialiser
+End Sub
+
+Private Function initialiser(ByVal nomNoeudPrincipal As String, ByVal svgConstante As Boolean) As Boolean
+initialiser = False
+
+   S = svgConstante
+   Set oXML = New MSXML2.DOMDocument60
+   Set oNode = oXML.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")
+   oXML.appendChild oNode
+   Set n(0) = oXML
+   position = 0
+   If Len(nomNoeudPrincipal) = 0 Then nomNoeudPrincipal = "Fichier"
+   Call ouvrirNoeud(nomNoeudPrincipal)
+   
+initialiser = True
+End Function
+
+Private Sub class_Terminate()
+On Error GoTo fin
+Dim noeud As Variant
+  For Each noeud In n
+    Set noeud = Nothing
+  Next noeud
+  Set oNode = Nothing
+  Set oXML = Nothing
+fin:
+End Sub
+
+Private Function majCheminXML(chemin As String) As Boolean
+On Error GoTo err
+majCheminXML = False
+
+  If Dir(repFichier(chemin), vbDirectory) = "" Then GoTo errRepCible
+  If Right(chemin, 4) <> ".xml" Then chemin = chemin & ".xml"
+  cheminXML = chemin
+  
+majCheminXML = True
+fin:
+  Exit Function
+err:
+  MsgBox "Erreur: " & err.Description
+  GoTo fin
+errRepCible:
+  MsgBox "Erreur: le répertoire cible n'existe pas, veuillez le créer ou prévenir un administrateur"
+  GoTo fin
+End Function
+
+Public Sub ouvrirNoeud(nom As String)
+'ouvre un nouveau noeud
+  Set n(position + 1) = n(position).appendChild(oXML.createElement(nom))
+  position = position + 1
+End Sub
+
+Public Sub fermerNoeud(Optional nom As String)
+'ferme le noeud (nom à titre indicatif)
+If position > 0 Then position = position - 1
+fin:
+End Sub
+
+Public Sub ajout(ByVal nom As String, ByVal valeur As Variant, Optional attribut As String = "", Optional valAttribut As Variant = "")
+'ajoute un noeud texte (avec son attribut si nécessaire)
+Dim elt As MSXML2.IXMLDOMElement      'noeud 'element'
+Dim oAttribut As IXMLDOMAttribute
+
+   Set elt = n(position).appendChild(oXML.createElement(nom))
+   elt.Text = CStr(Nz(valeur, ""))
+
+   If Len(attribut) > 0 Then
+     Set oAttribut = oXML.createAttribute(CStr(Nz(attribut, "")))
+     oAttribut.Text = valAttribut
+     elt.setAttributeNode oAttribut
+   End If
+   
+End Sub

+ 95 - 0
source/modules/Progression.bas

@@ -0,0 +1,95 @@
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = False
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = False
+Option Compare Database
+
+Private progTotale, progActuelle As Double
+Private fermetureAuto As Boolean
+'nécessite le formulaire zfrmProgression
+
+Public Sub Afficher(titre As String, Optional msg As String = "", Optional vProgTotale As Double = 1, Optional vfermetureAuto As Boolean = True)
+On Error GoTo err
+  fermetureAuto = vfermetureAuto
+  If Not formExiste("zfrmProgression") Then GoTo errFrm
+  progTotale = IIf(vProgTotale > 0, vProgTotale, 1)
+  
+  DoCmd.OpenForm "zfrmProgression", acNormal
+  With forms![zfrmProgression]
+    .txt_titre.Caption = titre
+    .txt_msg.Visible = (Len(msg) > 0)
+    If Len(msg) > 0 Then .txt_msg.Caption = msg
+    .prog.Width = 1
+    .prog.BackColor = RGB(228, 108, 10)
+  End With
+  DoCmd.Hourglass True
+  
+fin:
+  Exit Sub
+err:
+  DoCmd.Hourglass False
+  MsgBox "Erreur: impossible d'afficher le formulaire de progression"
+  Debug.Print err.Description
+  Call fermer
+  GoTo fin
+errFrm:
+  MsgBox "Erreur: le formulaire zfrmProgression est nécessaire à l'affichage de la progression"
+  Debug.Print err.Description
+  GoTo fin
+End Sub
+
+Public Sub maj(ByVal msg As String, ByVal prog As Double)
+  Dim taux As Double
+  If Not formExiste("zfrmProgression") Then GoTo errFrm
+  If prog >= 0 Then
+    If prog <= progTotale Then
+       progActuelle = prog
+    Else
+       progActuelle = progTotale
+    End If
+  Else
+    progActuelle = 0
+  End If
+  
+  With forms![zfrmProgression]
+    .SetFocus
+    .txt_msg.Visible = (Len(msg) > 0)
+    If Len(msg) > 0 Then .txt_msg.Caption = msg
+    
+    taux = progActuelle / progTotale
+    .prog.Width = 5137 * taux
+    If taux = 1 Then
+       If fermertureAuto = True Then GoTo fermeture
+       DoCmd.Hourglass False
+       .prog.BackColor = RGB(152, 72, 7)
+       .boutonOK.Visible = True
+       .SetFocus
+    End If
+  End With
+fin:
+  Exit Sub
+err:
+  DoCmd.Hourglass False
+  MsgBox "Erreur: impossible de mettre à jour le formulaire de progression"
+  Debug.Print err.Description
+  GoTo fin
+errFrm:
+  DoCmd.Hourglass False
+  GoTo fin
+fermeture:
+  Call fermer
+  GoTo fin
+End Sub
+
+Public Sub fermer()
+On Error GoTo err
+  DoCmd.Hourglass False
+  DoCmd.Close acForm, "zfrmProgression"
+fin:
+  Exit Sub
+err:
+  DoCmd.Hourglass False
+  MsgBox "Erreur: impossible de fermer le formulaire de progression"
+  Debug.Print err.Description
+  GoTo fin
+End Sub

+ 10 - 0
source/references.csv

@@ -0,0 +1,10 @@
+{00020430-0000-0000-C000-000000000046},2,0
+{4AC9E1DA-5BAD-4AC7-86E3-24F4CDCECA28},12,0
+{00062FFF-0000-0000-C000-000000000046},9,4
+{00020905-0000-0000-C000-000000000046},8,5
+{00020813-0000-0000-C000-000000000046},1,7
+{F5078F18-C551-11D3-89B9-0000F81FE221},6,0
+{B691E011-1797-432E-907A-4D8C69339129},6,1
+{00000300-0000-0010-8000-00AA006D2EA4},6,0
+{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52},2,5
+{420B2830-E718-11CF-893D-00A0C9054228},1,0

+ 97 - 0
source/tables/USysOpenAccess.xml

@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:od="urn:schemas-microsoft-com:officedata">
+<xsd:schema>
+<xsd:element name="dataroot">
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element ref="USysOpenAccess" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+<xsd:attribute name="generated" type="xsd:dateTime"/>
+</xsd:complexType>
+</xsd:element>
+<xsd:element name="USysOpenAccess">
+<xsd:annotation>
+<xsd:appinfo>
+<od:tableProperty name="GUID" type="9" value="pTXGQ1gKlUSvFHuMRSL0KQ==
+"/>
+<od:tableProperty name="Orientation" type="2" value="0"/>
+<od:tableProperty name="OrderByOn" type="1" value="0"/>
+<od:tableProperty name="NameMap" type="11" value="CswOVQAAAAClNcZDWAqVRK8Ue4xFIvQpAAAAAGoasqVX5eRAAAAAAAAAAABVAFMA
+eQBzAE8AcABlAG4AQQBjAGMAZQBzAHMAAAAAAAAASr2yqneM5E6IboBFfLX4JQcA
+AAClNcZDWAqVRK8Ue4xFIvQpawBlAHkAAAAAAAAAMrPu/rePl0+Eihd8bGApkAcA
+AAClNcZDWAqVRK8Ue4xFIvQpdgBhAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwA
+AAAFAAAAAAAAAAAAAAAAAAAAAAA=
+"/>
+<od:tableProperty name="DefaultView" type="2" value="2"/>
+<od:tableProperty name="DisplayViewsOnSharePointSite" type="2" value="1"/>
+<od:tableProperty name="TotalsRow" type="1" value="0"/>
+<od:tableProperty name="FilterOnLoad" type="1" value="0"/>
+<od:tableProperty name="OrderByOnLoad" type="1" value="1"/>
+<od:tableProperty name="HideNewField" type="1" value="0"/>
+<od:tableProperty name="BackTint" type="6" value="100"/>
+<od:tableProperty name="BackShade" type="6" value="100"/>
+<od:tableProperty name="ThemeFontIndex" type="4" value="-1"/>
+<od:tableProperty name="AlternateBackThemeColorIndex" type="4" value="-1"/>
+<od:tableProperty name="AlternateBackTint" type="6" value="100"/>
+<od:tableProperty name="AlternateBackShade" type="6" value="100"/>
+<od:tableProperty name="ReadOnlyWhenDisconnected" type="1" value="0"/>
+<od:tableProperty name="DatasheetGridlinesThemeColorIndex" type="4" value="-1"/>
+<od:tableProperty name="DatasheetForeThemeColorIndex" type="4" value="-1"/>
+<od:tableProperty name="PublishToWeb" type="2" value="1"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element name="key" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="Sr2yqneM5E6IboBFfLX4JQ==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="1"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="val" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="MrPu/rePl0+Eihd8bGApkA==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="6495"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+</xsd:sequence>
+</xsd:complexType>
+</xsd:element>
+</xsd:schema>
+<dataroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" generated="2017-02-28T17:48:07">
+<USysOpenAccess>
+<key>include_tables</key>
+<val>USysOpenAccess,t_config,zt_backdb,zt_versions,zt_users,zt_paths</val>
+</USysOpenAccess>
+<USysOpenAccess>
+<key>sources_date</key>
+<val>28/02/2017 17:47:14</val>
+</USysOpenAccess>
+</dataroot>
+</root>

+ 175 - 0
source/tables/t_config.xml

@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:od="urn:schemas-microsoft-com:officedata">
+<xsd:schema>
+<xsd:element name="dataroot">
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element ref="t_config" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+<xsd:attribute name="generated" type="xsd:dateTime"/>
+</xsd:complexType>
+</xsd:element>
+<xsd:element name="t_config">
+<xsd:annotation>
+<xsd:appinfo>
+<od:tableProperty name="GUID" type="9" value="gB//H0oTcUm4S7xFdxB6OA==
+"/>
+<od:tableProperty name="Orientation" type="2" value="0"/>
+<od:tableProperty name="OrderByOn" type="1" value="0"/>
+<od:tableProperty name="NameMap" type="11" value="CswOVQAAAACAH/8fShNxSbhLvEV3EHo4AAAAAMLPQ6ZW5eRAAAAAAAAAAAB0AF8A
+YwBvAG4AZgBpAGcAAAAAAAAA15/PNuCZYk2Bp33Ft7cdDgcAAACAH/8fShNxSbhL
+vEV3EHo4cABhAHIAYQBtAGUAdABlAHIAAAAAAAAASxCphSRCNEamLELnPMethwcA
+AACAH/8fShNxSbhLvEV3EHo4dgBhAGwAAAAAAAAA1t0KmTL+6EOZx5beAL9YRQcA
+AACAH/8fShNxSbhLvEV3EHo4cwBlAGMAdABpAG8AbgAAAAAAAADmEyoErWJiSKot
+atpa8lY2BwAAAIAf/x9KE3FJuEu8RXcQejhEAGUAcwBjAHIAaQBwAHQAaQBvAG4A
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAFAAAAAAAAAAAAAAAAAAAAAAA=
+"/>
+<od:tableProperty name="DefaultView" type="2" value="2"/>
+<od:tableProperty name="DisplayViewsOnSharePointSite" type="2" value="1"/>
+<od:tableProperty name="TotalsRow" type="1" value="0"/>
+<od:tableProperty name="FilterOnLoad" type="1" value="0"/>
+<od:tableProperty name="OrderByOnLoad" type="1" value="1"/>
+<od:tableProperty name="HideNewField" type="1" value="0"/>
+<od:tableProperty name="BackTint" type="6" value="100"/>
+<od:tableProperty name="BackShade" type="6" value="100"/>
+<od:tableProperty name="ThemeFontIndex" type="4" value="1"/>
+<od:tableProperty name="AlternateBackThemeColorIndex" type="4" value="1"/>
+<od:tableProperty name="AlternateBackTint" type="6" value="100"/>
+<od:tableProperty name="AlternateBackShade" type="6" value="95"/>
+<od:tableProperty name="ReadOnlyWhenDisconnected" type="1" value="0"/>
+<od:tableProperty name="DatasheetGridlinesThemeColorIndex" type="4" value="3"/>
+<od:tableProperty name="DatasheetForeThemeColorIndex" type="4" value="0"/>
+<od:tableProperty name="PublishToWeb" type="2" value="1"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element name="parameter" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="15/PNuCZYk2Bp33Ft7cdDg==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="2655"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="1"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="val" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="SxCphSRCNEamLELnPMethw==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="2445"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="section" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="1t0KmTL+6EOZx5beAL9YRQ==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="Description" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="5hMqBK1iYkiqLWraWvJWNg==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="4905"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+</xsd:sequence>
+</xsd:complexType>
+</xsd:element>
+</xsd:schema>
+<dataroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" generated="2017-02-28T17:48:07">
+<t_config>
+<parameter>version_date</parameter>
+<val>28/02/2017</val>
+<section>version</section>
+<Description>Version installée de l&apos;application</Description>
+</t_config>
+<t_config>
+<parameter>version_name</parameter>
+<val>1.0</val>
+<section>version</section>
+<Description>Nom de la version</Description>
+</t_config>
+<t_config>
+<parameter>installer_path</parameter>
+<val>c:\wrktmp\test1.pdf</val>
+<section>version</section>
+<Description>\\path\to\installer</Description>
+</t_config>
+</dataroot>
+</root>

+ 167 - 0
source/tables/zt_backdb.xml

@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:od="urn:schemas-microsoft-com:officedata">
+<xsd:schema>
+<xsd:element name="dataroot">
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element ref="zt_backdb" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+<xsd:attribute name="generated" type="xsd:dateTime"/>
+</xsd:complexType>
+</xsd:element>
+<xsd:element name="zt_backdb">
+<xsd:annotation>
+<xsd:appinfo>
+<od:tableProperty name="GUID" type="9" value="0AZ9V/fW2UW/DfRZlZjE3w==
+"/>
+<od:tableProperty name="Orientation" type="2" value="0"/>
+<od:tableProperty name="OrderByOn" type="1" value="0"/>
+<od:tableProperty name="NameMap" type="11" value="CswOVQAAAADQBn1X99bZRb8N9FmVmMTfAAAAAIywbL9U5eRAAAAAAAAAAAB6AHQA
+XwBiAGEAYwBrAGQAYgAAAAAAAAAl+n3CJnr0SaX94fEazx7NBwAAANAGfVf31tlF
+vw30WZWYxN9OAG8AbQBCAGEAcwBlAAAAAAAAAGpIyLhO9gxJj5VBiOaMwxkHAAAA
+0AZ9V/fW2UW/DfRZlZjE300AbwBkAGUAAAAAAAAAnzXCXUEj5UmUFThLoXSDeQcA
+AADQBn1X99bZRb8N9FmVmMTfUgBlAHAAAAAAAAAA9y7JjVMx+kmX5j6WMLRf/gcA
+AADQBn1X99bZRb8N9FmVmMTfZABlAGYAYQB1AGwAdAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAADAAAAAUAAAAAAAAAAAAAAAAAAAAAAA==
+"/>
+<od:tableProperty name="DefaultView" type="2" value="2"/>
+<od:tableProperty name="DisplayViewsOnSharePointSite" type="2" value="1"/>
+<od:tableProperty name="TotalsRow" type="1" value="0"/>
+<od:tableProperty name="FilterOnLoad" type="1" value="0"/>
+<od:tableProperty name="OrderByOnLoad" type="1" value="1"/>
+<od:tableProperty name="HideNewField" type="1" value="0"/>
+<od:tableProperty name="BackTint" type="6" value="100"/>
+<od:tableProperty name="BackShade" type="6" value="100"/>
+<od:tableProperty name="ThemeFontIndex" type="4" value="1"/>
+<od:tableProperty name="AlternateBackThemeColorIndex" type="4" value="1"/>
+<od:tableProperty name="AlternateBackTint" type="6" value="100"/>
+<od:tableProperty name="AlternateBackShade" type="6" value="95"/>
+<od:tableProperty name="ReadOnlyWhenDisconnected" type="1" value="0"/>
+<od:tableProperty name="DatasheetGridlinesThemeColorIndex" type="4" value="3"/>
+<od:tableProperty name="DatasheetForeThemeColorIndex" type="4" value="0"/>
+<od:tableProperty name="PublishToWeb" type="2" value="1"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element name="NomBase" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="Jfp9wiZ69Eml/eHxGs8ezQ==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="3210"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="Mode" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="akjIuE72DEmPlUGI5ozDGQ==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="2925"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="Rep" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="nzXCXUEj5UmUFThLoXSDeQ==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="8190"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="default" minOccurs="1" od:jetType="yesno" od:sqlSType="bit" od:nonNullable="yes" type="xsd:boolean">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="9y7JjVMx+kmX5j6WMLRf/g==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Format" type="10" value="True/False"/>
+<od:fieldProperty name="DefaultValue" type="12" value="0"/>
+<od:fieldProperty name="DisplayControl" type="3" value="106"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+</xsd:element>
+</xsd:sequence>
+</xsd:complexType>
+</xsd:element>
+</xsd:schema>
+<dataroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" generated="2017-02-28T17:48:07">
+<zt_backdb>
+<NomBase>external_db.accdb</NomBase>
+<Mode>Test</Mode>
+<Rep>path\to\test\directory\</Rep>
+<default>0</default>
+</zt_backdb>
+<zt_backdb>
+<NomBase>external_db.accdb</NomBase>
+<Mode>Production</Mode>
+<Rep>path\to\production\directory\</Rep>
+<default>1</default>
+</zt_backdb>
+<zt_backdb>
+<NomBase>external_db.accdb</NomBase>
+<Mode>Other</Mode>
+<Rep>path\to\other\directory\</Rep>
+<default>0</default>
+</zt_backdb>
+</dataroot>
+</root>

+ 147 - 0
source/tables/zt_paths.xml

@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:od="urn:schemas-microsoft-com:officedata">
+<xsd:schema>
+<xsd:element name="dataroot">
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element ref="zt_paths" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+<xsd:attribute name="generated" type="xsd:dateTime"/>
+</xsd:complexType>
+</xsd:element>
+<xsd:element name="zt_paths">
+<xsd:annotation>
+<xsd:appinfo>
+<od:index index-name="PrimaryKey" index-key="pathname mode " primary="yes" unique="yes" clustered="no" order="asc asc"/>
+<od:tableProperty name="GUID" type="9" value="FNyKYKhBEEa7Ifm4HW48yw==
+"/>
+<od:tableProperty name="Orientation" type="2" value="0"/>
+<od:tableProperty name="OrderByOn" type="1" value="0"/>
+<od:tableProperty name="NameMap" type="11" value="CswOVQAAAAAU3IpgqEEQRrsh+bgdbjzLAAAAAC+v09FT5eRAAAAAAAAAAAB6AHQA
+XwBwAGEAdABoAHMAAAAAAAAAOGFSAdRZBkOmpYMf19g3rQcAAAAU3IpgqEEQRrsh
++bgdbjzLcABhAHQAaABuAGEAbQBlAAAAAAAAAHFagXOOSpZKtw5Z3O9ClSEHAAAA
+FNyKYKhBEEa7Ifm4HW48y20AbwBkAGUAAAAAAAAAYmxOIMB3YUmaoe7Bzch4mQcA
+AAAU3IpgqEEQRrsh+bgdbjzLcABhAHQAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+DAAAAAUAAAAAAAAAAAAAAAAAAAAAAA==
+"/>
+<od:tableProperty name="DefaultView" type="2" value="2"/>
+<od:tableProperty name="DisplayViewsOnSharePointSite" type="2" value="1"/>
+<od:tableProperty name="TotalsRow" type="1" value="0"/>
+<od:tableProperty name="FilterOnLoad" type="1" value="0"/>
+<od:tableProperty name="OrderByOnLoad" type="1" value="1"/>
+<od:tableProperty name="HideNewField" type="1" value="0"/>
+<od:tableProperty name="BackTint" type="6" value="100"/>
+<od:tableProperty name="BackShade" type="6" value="100"/>
+<od:tableProperty name="ThemeFontIndex" type="4" value="1"/>
+<od:tableProperty name="AlternateBackThemeColorIndex" type="4" value="1"/>
+<od:tableProperty name="AlternateBackTint" type="6" value="100"/>
+<od:tableProperty name="AlternateBackShade" type="6" value="95"/>
+<od:tableProperty name="ReadOnlyWhenDisconnected" type="1" value="0"/>
+<od:tableProperty name="DatasheetGridlinesThemeColorIndex" type="4" value="3"/>
+<od:tableProperty name="DatasheetForeThemeColorIndex" type="4" value="0"/>
+<od:tableProperty name="PublishToWeb" type="2" value="1"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element name="pathname" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="OGFSAdRZBkOmpYMf19g3rQ==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="mode" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="cVqBc45Klkq3Dlnc70KVIQ==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="DefaultValue" type="12" value="&quot;*&quot;"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="path" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="YmxOIMB3YUmaoe7Bzch4mQ==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="3780"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+</xsd:sequence>
+</xsd:complexType>
+</xsd:element>
+</xsd:schema>
+<dataroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" generated="2017-02-28T17:48:07">
+<zt_paths>
+<pathname>path_to_dir</pathname>
+<mode>*</mode>
+<path>path\to\dir\</path>
+</zt_paths>
+<zt_paths>
+<pathname>path_to_file</pathname>
+<mode>*</mode>
+<path>path\to\file.ext</path>
+</zt_paths>
+<zt_paths>
+<pathname>path_to_file</pathname>
+<mode>abc</mode>
+<path>other\path\to\file.ext</path>
+</zt_paths>
+</dataroot>
+</root>

+ 189 - 0
source/tables/zt_users.xml

@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:od="urn:schemas-microsoft-com:officedata">
+<xsd:schema>
+<xsd:element name="dataroot">
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element ref="zt_users" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+<xsd:attribute name="generated" type="xsd:dateTime"/>
+</xsd:complexType>
+</xsd:element>
+<xsd:element name="zt_users">
+<xsd:annotation>
+<xsd:appinfo>
+<od:index index-name="PrimaryKey" index-key="username " primary="yes" unique="yes" clustered="no" order="asc"/>
+<od:tableProperty name="GUID" type="9" value="+YTZAy//p0Ke1v3oCBOlJA==
+"/>
+<od:tableProperty name="Orientation" type="2" value="0"/>
+<od:tableProperty name="OrderByOn" type="1" value="0"/>
+<od:tableProperty name="NameMap" type="11" value="CswOVQAAAAD5hNkDL/+nQp7W/egIE6UkAAAAADqThblV5eRAAAAAAAAAAAB6AHQA
+XwB1AHMAZQByAHMAAAAAAAAASlNoQ+ghv02hpG8vm7UrigcAAAD5hNkDL/+nQp7W
+/egIE6UkdQBzAGUAcgBuAGEAbQBlAAAAAAAAACZIw7eeOw9Emiea7bNToe8HAAAA
++YTZAy//p0Ke1v3oCBOlJGwAbwBnAGkAbgAAAAAAAABjTK4mdlWwS73K0A53JMkd
+BwAAAPmE2QMv/6dCntb96AgTpSRhAGQAbQBpAG4AAAAAAAAANjjtTX5Im0OO2Ac4
+JXBAOwcAAAD5hNkDL/+nQp7W/egIE6UkZABlAGYAYQB1AGwAdABfAGMAbwBuAG4A
+ZQB4AGkAbwBuAAAAAAAAAIzPqGsl+jRGsVvko2KGRmEHAAAA+YTZAy//p0Ke1v3o
+CBOlJG4AbwB0AGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAFAAAAAAAAAAAA
+AAAAAAAAAAA=
+"/>
+<od:tableProperty name="DefaultView" type="2" value="2"/>
+<od:tableProperty name="DisplayViewsOnSharePointSite" type="2" value="1"/>
+<od:tableProperty name="TotalsRow" type="1" value="0"/>
+<od:tableProperty name="FilterOnLoad" type="1" value="0"/>
+<od:tableProperty name="OrderByOnLoad" type="1" value="1"/>
+<od:tableProperty name="HideNewField" type="1" value="0"/>
+<od:tableProperty name="BackTint" type="6" value="100"/>
+<od:tableProperty name="BackShade" type="6" value="100"/>
+<od:tableProperty name="ThemeFontIndex" type="4" value="1"/>
+<od:tableProperty name="AlternateBackThemeColorIndex" type="4" value="1"/>
+<od:tableProperty name="AlternateBackTint" type="6" value="100"/>
+<od:tableProperty name="AlternateBackShade" type="6" value="95"/>
+<od:tableProperty name="ReadOnlyWhenDisconnected" type="1" value="0"/>
+<od:tableProperty name="DatasheetGridlinesThemeColorIndex" type="4" value="3"/>
+<od:tableProperty name="DatasheetForeThemeColorIndex" type="4" value="0"/>
+<od:tableProperty name="PublishToWeb" type="2" value="1"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element name="username" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="SlNoQ+ghv02hpG8vm7Urig==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="Login" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="JkjDt547D0SaJ5rts1Oh7w==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="Admin" minOccurs="1" od:jetType="yesno" od:sqlSType="bit" od:nonNullable="yes" type="xsd:boolean">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="Y0yuJnZVsEu9ytAOdyTJHQ==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Format" type="10" value="True/False"/>
+<od:fieldProperty name="DefaultValue" type="12" value="0"/>
+<od:fieldProperty name="DisplayControl" type="3" value="106"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+</xsd:element>
+<xsd:element name="default_connexion" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="NjjtTX5Im0OO2Ac4JXBAOw==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="note" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="GUID" type="9" value="jM+oayX6NEaxW+SjYoZGYQ==
+"/>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+</xsd:sequence>
+</xsd:complexType>
+</xsd:element>
+</xsd:schema>
+<dataroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" generated="2017-02-28T17:48:07">
+<zt_users>
+<username>admin</username>
+<Login>olivier</Login>
+<Admin>1</Admin>
+<default_connexion>Réseau</default_connexion>
+</zt_users>
+<zt_users>
+<username>user</username>
+<Login>user</Login>
+<Admin>0</Admin>
+</zt_users>
+</dataroot>
+</root>

+ 207 - 0
source/tables/zt_versions.xml

@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:od="urn:schemas-microsoft-com:officedata">
+<xsd:schema>
+<xsd:element name="dataroot">
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element ref="zt_versions" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+<xsd:attribute name="generated" type="xsd:dateTime"/>
+</xsd:complexType>
+</xsd:element>
+<xsd:element name="zt_versions">
+<xsd:annotation>
+<xsd:appinfo>
+<od:tableProperty name="Orientation" type="2" value="0"/>
+<od:tableProperty name="OrderByOn" type="1" value="0"/>
+<od:tableProperty name="DefaultView" type="2" value="2"/>
+<od:tableProperty name="DisplayViewsOnSharePointSite" type="2" value="1"/>
+<od:tableProperty name="TotalsRow" type="1" value="0"/>
+<od:tableProperty name="FilterOnLoad" type="1" value="0"/>
+<od:tableProperty name="OrderByOnLoad" type="1" value="1"/>
+<od:tableProperty name="HideNewField" type="1" value="0"/>
+<od:tableProperty name="BackTint" type="6" value="100"/>
+<od:tableProperty name="BackShade" type="6" value="100"/>
+<od:tableProperty name="ThemeFontIndex" type="4" value="-1"/>
+<od:tableProperty name="AlternateBackThemeColorIndex" type="4" value="-1"/>
+<od:tableProperty name="AlternateBackTint" type="6" value="100"/>
+<od:tableProperty name="AlternateBackShade" type="6" value="100"/>
+<od:tableProperty name="DatasheetGridlinesThemeColorIndex" type="4" value="-1"/>
+<od:tableProperty name="DatasheetForeThemeColorIndex" type="4" value="-1"/>
+<od:tableProperty name="GUID" type="9" value="+z5Ns94D6Uip/y09jsrWaQ==
+"/>
+<od:tableProperty name="NameMap" type="11" value="CswOVQAAAAD7Pk2z3gPpSKn/LT2OytZpAAAAAF/xmaJW5eRAAAAAAAAAAAB6AHQA
+XwB2AGUAcgBzAGkAbwBuAHMAAAAAAAAAqnCLqiB+PUedSAwXUnkayQcAAAD7Pk2z
+3gPpSKn/LT2OytZpdgBlAHIAcwBpAG8AbgBfAGQAYQB0AGUAAAAAAAAADtgboSIW
+VE+JA2pEbBmFCwcAAAD7Pk2z3gPpSKn/LT2OytZpdgBlAHIAcwBpAG8AbgBfAG4A
+YQBtAGUAAAAAAAAAdRuwrtfDdU6VSd1MclQDCgcAAAD7Pk2z3gPpSKn/LT2OytZp
+YQB1AHQAaABvAHIAAAAAAAAA4BXdhaWbDU+JIscN/2kphgcAAAD7Pk2z3gPpSKn/
+LT2OytZpYQBjAGMAZQBwAHQAZQBkAF8AYgB5AAAAAAAAAAQLTyqqwblGsZJsjtQI
+7hsHAAAA+z5Ns94D6Uip/y09jsrWaWEAYwBjAGUAcAB0AGEAdABpAG8AbgBfAGQA
+YQB0AGUAAAAAAAAAZn65XJoASE6+c78A4QlnRQcAAAD7Pk2z3gPpSKn/LT2OytZp
+ZABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAA
+BQAAAAAAAAAAAAAAAAAAAAAA
+"/>
+<od:tableProperty name="ReadOnlyWhenDisconnected" type="1" value="0"/>
+<od:tableProperty name="PublishToWeb" type="2" value="1"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:complexType>
+<xsd:sequence>
+<xsd:element name="version_date" minOccurs="0" od:jetType="datetime" od:sqlSType="datetime" type="xsd:dateTime">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="ColumnWidth" type="3" value="2160"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="1"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ShowDatePicker" type="3" value="1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+<od:fieldProperty name="GUID" type="9" value="qnCLqiB+PUedSAwXUnkayQ==
+"/>
+<od:fieldProperty name="Format" type="10" value="General Date"/>
+</xsd:appinfo>
+</xsd:annotation>
+</xsd:element>
+<xsd:element name="version_name" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="ColumnWidth" type="3" value="2625"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+<od:fieldProperty name="GUID" type="9" value="DtgboSIWVE+JA2pEbBmFCw==
+"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="author" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+<od:fieldProperty name="GUID" type="9" value="dRuwrtfDdU6VSd1MclQDCg==
+"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="accepted_by" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="DisplayControl" type="3" value="109"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+<od:fieldProperty name="GUID" type="9" value="4BXdhaWbDU+JIscN/2kphg==
+"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="255"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+<xsd:element name="acceptation_date" minOccurs="0" od:jetType="datetime" od:sqlSType="datetime" type="xsd:dateTime">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="ColumnWidth" type="3" value="-1"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ShowDatePicker" type="3" value="1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+<od:fieldProperty name="GUID" type="9" value="BAtPKqrBuUaxkmyO1AjuGw==
+"/>
+</xsd:appinfo>
+</xsd:annotation>
+</xsd:element>
+<xsd:element name="description" minOccurs="0" od:jetType="memo" od:sqlSType="ntext">
+<xsd:annotation>
+<xsd:appinfo>
+<od:fieldProperty name="ColumnWidth" type="3" value="7215"/>
+<od:fieldProperty name="ColumnOrder" type="3" value="0"/>
+<od:fieldProperty name="ColumnHidden" type="1" value="0"/>
+<od:fieldProperty name="Required" type="1" value="0"/>
+<od:fieldProperty name="AllowZeroLength" type="1" value="1"/>
+<od:fieldProperty name="IMEMode" type="2" value="0"/>
+<od:fieldProperty name="IMESentenceMode" type="2" value="3"/>
+<od:fieldProperty name="UnicodeCompression" type="1" value="1"/>
+<od:fieldProperty name="TextFormat" type="2" value="0"/>
+<od:fieldProperty name="TextAlign" type="2" value="0"/>
+<od:fieldProperty name="AggregateType" type="4" value="-1"/>
+<od:fieldProperty name="ResultType" type="2" value="0"/>
+<od:fieldProperty name="CurrencyLCID" type="4" value="0"/>
+<od:fieldProperty name="GUID" type="9" value="Zn65XJoASE6+c78A4QlnRQ==
+"/>
+<od:fieldProperty name="AppendOnly" type="1" value="0"/>
+</xsd:appinfo>
+</xsd:annotation>
+<xsd:simpleType>
+<xsd:restriction base="xsd:string">
+<xsd:maxLength value="536870910"/>
+</xsd:restriction>
+</xsd:simpleType>
+</xsd:element>
+</xsd:sequence>
+</xsd:complexType>
+</xsd:element>
+</xsd:schema>
+<dataroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" generated="2017-02-28T17:48:07">
+<zt_versions>
+<version_date>2017-02-28T00:00:00</version_date>
+<version_name>1.0</version_name>
+<author>olivier.massot</author>
+<description>Mise en place</description>
+</zt_versions>
+</dataroot>
+</root>