Création d’un champ de table par VBA

Publié le par Raymond

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.

 

Publié dans Astuces

Commenter cet article