Création d’un champ de table par VBA
Vous avez souvent besoin de créer un champ, quelquefois une table complète, à l’intérieur de votre code VBA. Pour l’ajout d’un champ simple tel un champ texte ça ne pose pas de problème mais lorsque vous touchez les index ou les listes de choix, la procédure se complique et vous tâtonnez dans les propriétés à insérer.
Nous allons prendre l’exemple d’une table Contacts existante.
Ajouter un index :
Dim Db As DAO.Database
Dim tdf As DAO.TableDef
Dim Fld As DAO.Field
Dim idx As DAO.index
Set Db = CurrentDb()
Set tdf = Db.TableDefs("Contacts")
Set idx = tdf.CreateIndex("Nomdelindex")
Set Fld = idx.CreateField("Nomduchamp")
idx.Fields.Append Fld
tdf.Indexes.Append idx
Set Fld = Nothing
Set idx = Nothing
Set tdf = Nothing
Set Db = Nothing
On pourra concentrer les instructions vba mais le détail ci-dessus montre bien le traitement séparé du nom d'index et du nom du champ utilisé en index.
Ajouter un champ texte avec liste de choix:
Dim Db As DAO.Database
Dim tdf As DAO.TableDef
Set Db = CurrentDb()
Set tdf = Db.TableDefs("Contacts")
tdf.Fields.Append tdf.CreateField("BusinessAddressCountry", dbText, 50)
tdf!BusinessAddressCountry.AllowZeroLength = True
tdf!BusinessAddressCountry.Properties.Append _
tdf.CreateProperty("Caption", dbText, "Pays")
tdf!BusinessAddressCountry.Properties.Append _
tdf.CreateProperty("Description", dbText, "Pays du bureau")
tdf!BusinessAddressCountry.Properties.Append _
tdf.CreateProperty("UnicodeCompression", dbBoolean, True)
' Liste de choix
tdf!BusinessAddressCountry.Properties.Append _
tdf.CreateProperty("DisplayControl", dbInteger, acComboBox)
tdf!BusinessAddressCountry.Properties.Append _
tdf.CreateProperty("RowSourceType", dbText, "Table/Query")
tdf!BusinessAddressCountry.Properties.Append _
tdf.CreateProperty("RowSource", dbText, _
"SELECT Pays_Nom FROM Pays ORDER BY Pays_Nom;")
tdf!BusinessAddressCountry.Properties.Append _
tdf.CreateProperty("ListRows", dbInteger, 32)
tdf!BusinessAddressCountry.Properties.Append _
tdf.CreateProperty("LimitToList", dbBoolean, True)
tdf!BusinessAddressCountry.Properties.Append _
tdf.CreateProperty("AllowValueListEdits", dbBoolean, True)
Set tdf = Nothing
Set Db = Nothing
Il est à noter que la propriété DisplayControl doit être la première propriété à créer en ce qui concerne la liste de choix, sinon les autres propriétés sont ignorées. Vous remarquerez que nous retrouvons exactement les mêmes propriétés qu'en VBA avec les mêmes appellations.