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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| Sub AjoutChampDansTable()
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Dim oFld As DAO.Field
Dim tTable As DAO.TableDef
Dim rRequete As DAO.QueryDef
'Affectation objet base
Set oDb = CurrentDb
'Suppression de la Table A Traiter Originale
For Each tTable In oDb.TableDefs
If tTable.Name = "Table_A_Traiter_Ori" Then
DoCmd.DeleteObject acTable, tTable.Name
End If
Next
'Copie de la table à traiter
DoCmd.CopyObject , "Table_A_Traiter_Ori", acTable, "Table_A_Traiter"
'Affectation objet table
Set oTbl = oDb.TableDefs("Table_A_Traiter")
'Etape 1 : Créer le champ
Set oFld = oTbl.CreateField("Id", dbText, 120) 'Affectation objet champ
'Etape 2 : Définit les propriétés
oFld.AllowZeroLength = False 'Chaine vide autorisée : Non
oFld.Required = True 'Null interdit : Oui
'Etape 3 : Ajout du champ à la table
oTbl.Fields.Append oFld
'Etape 4 : Placement du champ inséré en première colonne
' oFld.OrdinalPosition = 0 'marche pas
DoCmd.SetWarnings False ' désactive les messages d'alertes, comme : la table ou la requête existe déjà !
'Suppression de la Requete DeplaceChamp
For Each rRequete In oDb.QueryDefs
If rRequete.Name = "DeplaceChamp" Then
DoCmd.DeleteObject acQuery, rRequete.Name
End If
Next
'Déplacement du champ en position 1
Set qry = oDb.CreateQueryDef("DeplaceChamp")
'Définition du code SQL
qry.SQL = "SELECT Table_A_Traiter.Id, Table_A_Traiter.Label1," & _
"Table_A_Traiter.Label2, Table_A_Traiter.Label3, Table_A_Traiter.Label4," & _
"Table_A_Traiter.Label5, Table_A_Traiter.Label6, Table_A_Traiter.Label7," & _
"Table_A_Traiter.Label8 INTO Table_Traitée " & _
"FROM Table_A_Traiter;"
'Exécution de la requête
DoCmd.RunSQL qry.SQL, dbFailOnError
'Suppression du champ Id dans la table initiale
oDb.Execute "ALTER TABLE " & oTbl.Name & " DROP COLUMN Id;", dbFailOnError
DoCmd.SetWarnings True ' réactive les messages d'alertes
'Rafraichit la collection
oTbl.Fields.Refresh
End Sub |