VBA Ajout d'un champ calculé
Bonjour à tous,
Je viens vers vous car je suis débutant en VBA SQL et une aide serait la bienvenue.
Je souhaiterai ajouter, en VBA via Excel, un champs calculé dans ma base de donné ACCESS
En cherchant sur le forum j'ai trouvé ce code:
Code:
1 2
|
CurrentProject.Connection.Execute "ALTER TABLE TABLE1 ADD COLUMN ESSAI3 DECIMAL(18,0)" |
Puis je l'ai adapté dans mon code VBA :
Code:
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
|
Sub Ajouter_Champ()
'Déclaration de la variable de connexion
Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset
Dim CheminAccess As String
Dim ChoixTABLE As String
'Chemin de la base de données
CheminAccess = ActiveWorkbook.Path & "\EquipmentV4R3.accdb"
ChoixTABLE = "PLC_FDP"
'Instanciation des variables
Set cnx = New ADODB.Connection
Set rst = New ADODB.Recordset
'Définition du pilote de connexion
cnx.Provider = "Microsoft.ACE.OLEDB.12.0"
'Définition de la chaîne de connexion
cnx.ConnectionString = CheminAccess
'Ouverture de la base de données
cnx.Open
'Objet Recordset ajout d'un champs dans la table
rst.Open "ALTER TABLE PLC_FDP ADD COLUMN ESSAI4 DECIMAL(18,0)", cnx
'Fermeture recordset et connection
'rst.Close
Set rst = Nothing
cnx.Close
Set cnx = Nothing
End Sub |
Le code fonctionne et ajoute bien le champ dans la BDD!!:lol:
Cependant, que veut dire "DECIMAL(18,0)" dans l'expression ci-dessous?
Code:
1 2
|
CurrentProject.Connection.Execute "ALTER TABLE TABLE1 ADD COLUMN ESSAI3 DECIMAL(18,0)" |
Et comment faut-il faire pour que le champs que j'ajoute soit un champs calculé dont la formule serait par exemple Champs B divisé par Champs A en utilisant le code suivant?
Code:
1 2 3
|
'Objet Recordset ajout d'un champs dans la table
rst.Open "ALTER TABLE PLC_FDP ADD COLUMN ESSAI4 DECIMAL(18,0)", cnx |
Merci d'avance pour votre aide!!8-)
1 pièce(s) jointe(s)
[AC-2016] VBA Ajout d'un champ calculé
Bonjour à tous,
Merci pour vos explications!
J'en ai besoin car je suis en train de faire un outil Excel afin de créer des schémas électriques sur AutoCAD.
J'ai fini mon outil sur Excel, qui fonctionne, mais la base de données est trop volumineuse pour Excel.... J'ai donc créer une base de donnée ACCESS et je dois la mettre à jour via mon outil.
J'ai réalisé une macro qui créer les champs lorsque je saisie une nouvelle entreprise dans l'outil Excel. Ce champs est un calcul de côtes dont j'ai besoin dans l'outil Excel. De plus j'aimerai qu'il ce créé automatiquement et non manuellement.
En créant ma base ACCESS j'apprends le SQL^^ je suis donc un bleu...:aie:
Voici ce que je veux faire en VBA pour le Champ en question:
Pièce jointe 461678
Je vais voir le lien pour trouver une solution!:D
[AC-2016] VBA Ajout d'un champ calculé
Bonjour Marot r
J'ai lu le lien que tu as mis en réponse et il propose ce code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Public Sub CreateField()
Dim DB As DAO.Database
Dim TableDef As DAO.TableDef
Dim Fld As DAO.Field2
Set DB = CurrentDb()
Set TableDef = DB.TableDefs("Table1")
Set Fld = TableDef.CreateField("field3", dbDouble)
Fld.Expression = "[field1] * [field2]"
TableDef.Fields.Append Fld
MsgBox "Added"
End Sub |
Comment fait-on le code pour un connexion en AOD?
Car dans l'outil Excel j'ai créé un macro public pour se connecter à la base ACCESS et j'aimerais que mon code reste cohérent.
Voici la macro public:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
'Déclaration de la variable de connexion
Public cnx As ADODB.Connection
Public rst As ADODB.Recordset
Public CheminAccess As String
Public ChoixTABLE As String
Public Sub Connextion_ACCESS()
'Instanciation des variables
Set cnx = New ADODB.Connection
Set rst = New ADODB.Recordset
'Chemin de la base de données
CheminAccess = ActiveWorkbook.Path & "\EquipmentV4R3.accdb"
'Définition du pilote de connexion
cnx.Provider = "Microsoft.ACE.OLEDB.12.0"
'Définition de la chaîne de connexion
cnx.ConnectionString = CheminAccess
'Ouverture de la base de données
cnx.Open
End sub |
Je ne comprend pas comment adapter le code vba en DAO vers AOD
Merci d'avance pour votre aide.
[AC-2016] VBA Ajout d'un champ calculé
RE,
Désolé j'ai pas vu quand j'ai lu l'article dans le lien...:weird:
Il y avait comme commentaire :
"Bon point, c'est vrai. J'allais utiliser ADO plus tôt pour le faire, puis je l'ai fait avec DAO. Je vais modifier la réponse et supprimer la note concernant les références. - Zedfoxus 25 juillet 15 'à 4:16
Tu as raison! Je n'avais pas réalisé jusqu'à présent qu'ADO ou ADOX ne prend pas en charge l'ajout de colonne calculée. Merci pour l'illumination - zedfoxus 25 juil. 15 à 4:50"
Je suis arrivé à adapter le code et sa fonctionne comme je veux!!:D
La colonne s'ajoute bien et le format est comme souhaité!!
Voici mon code pour qui ça intéresse!
Code:
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
|
Sub Ouverture_ACCESS_DAO()
Dim oDBE As DAO.DBEngine
Dim DB As DAO.Database
Dim CheminAccess As String
Dim TableDef As DAO.TableDef
Dim Fld As DAO.Field2
CheminAccess = ActiveWorkbook.Path & "\EquipmentV4R3.accdb"
Set oDBE = New DBEngine
Set DB = oDBE.OpenDatabase(CheminAccess, True, False) ' ";PWD=test;")
Set TableDef = DB.TableDefs("PLC_FDP")
Set Fld = TableDef.CreateField("ESSAI5", dbDouble)
Fld.Expression = "[ABB_DX_DESSIN_AutoCAD] / [RAPPORT_ECHELLE]"
TableDef.Fields.Append Fld
MsgBox "Added"
DB.Close
Set DB = Nothing
Set oDBE = Nothing
End Sub |
Merci à tous pour votre aide!!
[AC-2016] VBA Ajout d'un champ calculé
Bonjour,
Ah ok
Dans mon cas, le champ calculé aura toujours la même expression, le rapport d'échelle (champ RAPPORT_ECHELLE) aura toujours la même valeur, seul le champ ABB_DX_DESSIN_AutoCAD sera mis à jour (par VBA) si besoin.
Si je mets à jour le champ ABB_DX_DESSIN_AutoCAD, le résulta dans le champ calculé sera mis à jour correctement?
Citation:
Calculated fields belong in queries, not tables.
Calculated columns are part of life on a spreadsheet, but do not belong in a database table. Never store a value that is dependent on other fields: it's a basic rule of normalization. Break the rule, and you have to worry about how to maintain the calculation correctly in every possible circumstance.
Ask yourself, "Would it be wrong if my field contained a value different from the calculation?" If you answer Yes, you must not store the field. If the difference would be meaningful, you do need the field.
So, how do you get the calculated field if you do not store it in a table? Use a query:
Create a query based on your table.
Type your expression into the Field row of the query design grid:
Amount: [Quantity] * [UnitPrice]
Est-ce bien que j'utilise le champ calculé?
si j'ai bien compris, ce n'est pas comme ça que l'on travail dans les règles de l'arts.
Je peux laisser le champs calculé? par rapport au code ci-dessous, le champ calculé appartient à la table ou à la requête?:weird::koi:
Code:
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
|
Sub Ouverture_ACCESS_DAO()
Dim oDBE As DAO.DBEngine
Dim DB As DAO.Database
Dim CheminAccess As String
Dim TableDef As DAO.TableDef
Dim Fld As DAO.Field2
CheminAccess = ActiveWorkbook.Path & "\EquipmentV4R3.accdb"
Set oDBE = New DBEngine
Set DB = oDBE.OpenDatabase(CheminAccess, True, False) ' ";PWD=test;")
Set TableDef = DB.TableDefs("PLC_FDP")
Set Fld = TableDef.CreateField("ESSAI5", dbDouble)
Fld.Expression = "[ABB_DX_DESSIN_AutoCAD] / [RAPPORT_ECHELLE]"
TableDef.Fields.Append Fld
MsgBox "Added"
DB.Close
Set DB = Nothing
Set oDBE = Nothing
End Sub |
[AC-2016] VBA Ajout d'un champ calculé
Bonjour marot_r
Merci pour toutes ces explications:roi:
J'ai fais plein de test, tout fonctionne sans aucunes erreurs
Merci à tous!!8-)