Bonjour.
Si vous êtes comme moi et que vous avez beaucoup de requêtes avec beaucoup de colonnes vous aimerez peut-être le code suivant qui permet à Access d'ajuster pour vous la largeur des colonnes au contenu avec un max.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Option Compare Database Option Explicit 'Code récupéré d'ici : 'https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa217449(v=office.11)?redirectedfrom=MSDN Const WIDTH_MAX As Long = 12030 'Colonne de 100 de large
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 Private Sub Test_FixColumnWidthsOfQuery() Call FixColumnWidthsOfQuery("Requete1") End Sub Public Function FixColumnWidthsOfQuery(stName As String) Dim db As Database Dim qdf As QueryDef Dim fld As DAO.Field Dim frm As Form Dim ictl As Integer Dim ctl As Control Set db = CurrentDb Set qdf = db.QueryDefs(stName) DoCmd.OpenQuery stName, acViewNormal Set frm = Screen.ActiveDatasheet For ictl = 0 To frm.Controls.Count - 1 Set ctl = frm.Controls(ictl) 'Debug.Print ctl.Name, ctl.ColumnWidth ctl.SetFocus ctl.ColumnWidth = -2 'Ajuste au texte Call SetDAOFieldProperty(qdf.Fields(ictl), "ColumnWidth", ctl.ColumnWidth, dbInteger) Next ictl DoCmd.Save acQuery, stName DoCmd.Close acQuery, stName DoCmd.OpenQuery stName, acViewNormal Set frm = Screen.ActiveDatasheet For ictl = 0 To frm.Controls.Count - 1 Set ctl = frm.Controls(ictl) 'Debug.Print ctl.Name, ctl.ColumnWidth If ctl.ColumnWidth > WIDTH_MAX Then ctl.ColumnWidth = WIDTH_MAX 'Ajuste à 100 max Call SetDAOFieldProperty(qdf.Fields(ictl), "ColumnWidth", ctl.ColumnWidth, dbInteger) End If Next ictl DoCmd.Save acQuery, stName DoCmd.Close acQuery, stName End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 Private Sub Test_FixColumnWidthsOfTable() Call FixColumnWidthsOfTable("Table1") End Sub Public Function FixColumnWidthsOfTable(stName As String) Dim db As Database Dim tdf As TableDef Dim fld As DAO.Field Dim frm As Form Dim ictl As Integer Dim ctl As Control Set db = CurrentDb Set tdf = db.TableDefs(stName) DoCmd.OpenTable stName, acViewNormal Set frm = Screen.ActiveDatasheet For ictl = 0 To frm.Controls.Count - 1 Set ctl = frm.Controls(ictl) ctl.SetFocus ctl.ColumnWidth = -2 'Ajutse au texte Call SetDAOFieldProperty(tdf.Fields(ictl), "ColumnWidth", ctl.ColumnWidth, dbInteger) Next ictl DoCmd.Save acTable, stName DoCmd.Close acTable, stName DoCmd.OpenTable stName, acViewNormal Set frm = Screen.ActiveDatasheet For ictl = 0 To frm.Controls.Count - 1 Set ctl = frm.Controls(ictl) ctl.SetFocus If ctl.ColumnWidth > WIDTH_MAX Then ctl.ColumnWidth = WIDTH_MAX End If Call SetDAOFieldProperty(tdf.Fields(ictl), "ColumnWidth", ctl.ColumnWidth, dbInteger) Next ictl DoCmd.Save acTable, stName DoCmd.Close acTable, stName End FunctionA+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Private Sub SetDAOFieldProperty _ (fld As DAO.Field, _ stName As String, vValue As Variant, _ lType As Long) Dim prp As DAO.Property For Each prp In fld.Properties If StrComp(prp.Name, stName, _ vbBinaryCompare) = 0 Then prp.Value = vValue Exit For End If Set prp = Nothing Next prp If prp Is Nothing Then Set prp = fld.CreateProperty(stName, lType, vValue) fld.Properties.Append prp End If End Sub
Partager