Accéder aux tables VBA - Mettre à jour, compter, supprimer, créer, renommer, exporter

Ce didacticiel vous apprendra à utiliser les tables d'accès à l'aide de VBA.

Accéder aux tables VBA

Pour commencer, nous allons démontrer les commandes simples pour travailler avec des tables dans Access. Plus loin dans ce didacticiel, nous vous montrerons des fonctions complètes développées par des professionnels pour travailler avec des tables dans Access.

Créer un tableau

Ce code utilisera SQL pour créer une table nommée « Table1 » avec les champs « ID » et « Nom » :

 Dim table_name As String Dim fields As String table_name = "Table1" fields = "([ID] varchar(150), [Name] varchar(150))" CurrentDb.Execute "CREATE TABLE " & table_name & fields

Fermer le tableau

Cette ligne de code VBA fermera une table (en sauvegardant les modifications) :

DoCmd.Close acTable, "Table1", acSaveYes

Pour fermer une table sans enregistrer :

DoCmd.Close acTable, "Table1", acSaveNo

Supprimer le tableau

Ce code supprimera une table (remarque : la table doit d'abord être fermée) :

DoCmd.Close acTable, "Table1", acSaveYes DoCmd.DeleteObject acTable = acDefault, "Table1"

Renommer le tableau :

Cette ligne de code renommera une table d'accès :

DoCmd.Rename "Table1", acTable, "Table1_New"

Une autre option consiste à utiliser la propriété TableDefs d'un objet de base de données.

Définir tdf = db.TableDefs(strOldTableName) tdf.Name = strNewTableName

Vider / Vider le tableau

Ce code VBA videra une table :

DoCmd.RunSQL "DELETE * FROM " & "Table1"

Tronquer la table / Supprimer les enregistrements

Cette ligne de code VBA utilise SQL pour supprimer des enregistrements d'une table qui répondent à certains critères :

DoCmd.RunSQL ("DELETE * FROM " & "Table1" & " WHERE " & "num=2")

Exporter le tableau vers Excel

Pour exporter un tableau vers Excel, utilisez le DoCmd.SortieVers méthode:

DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c:\temp\ExportedTable.xls"

ou utilisez le Feuille de calcul DoCmd.Transfer méthode:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Table1", "c:\temp\ExportedTable.xls", True

Tableau de mise à jour

Le code suivant mettra à jour un enregistrement, sans afficher le message d'avertissement :

DoCmd.SetWarnings (False) DoCmd.RunSQL "Mettre à jour les produitsT SET ProductsT.ProductName = 'Product AAA' WHERE (((ProductsT.ProductID)=1))"

Accéder aux fonctions de table VBA

Les exemples de code ci-dessus sont les commandes simples que vous pouvez utiliser pour interagir avec Tables à l'aide de VBA. Cependant, vous devrez souvent ajouter beaucoup plus de code de support (y compris la gestion des erreurs) pour utiliser correctement ces commandes. Vous trouverez ci-dessous des fonctions développées par des professionnels pour travailler avec des tableaux dans Access.

Compter les enregistrements de la table

Cette fonction comptera le nombre d'enregistrements dans une table :

Fonction publique Count_Table_Records(TableName As String) As Integer On Error GoTo Err: Dim r As DAO.Recordset Dim c As Integer Set r = CurrentDb.OpenRecordset("Select count(*) as rcount from " & TableName).OpenRecordset If (r .EOF) Then c = 0 Sinon c = Nz(r!rCount, 0) End If Count_Table_Records = c Exit Function Err : Call MsgBox("Une erreur s'est produite : " & Err.Description, vbExclamation, "Error") End Function ' Exemple d'utilisation Private Sub Count_Table_Records_Example() MsgBox (Count_Table_Records("Table1")) End Sub

Vérifier si la table existe Fonction

Cette fonction testera si une table existe, en retournant VRAI ou FAUX :

Fonction publique TableExists(ByVal strTableName As String) As Boolean 'Fonction : Déterminer si la table existe dans une base de données Access 'Arguments:strTablename : Nom de la table à vérifier Dim tdf As DAO.TableDef On Error Resume Next Set tdf = CurrentDb.TableDefs(strTableName ) TableExists = (Err.Number = 0) Fonction de fin

Voici un exemple de la fonction utilisée :

Private Sub TableExists_Example() If VBA_Access_Checks.TableExists("Table") = True Then MsgBox ("La table a été trouvée!") Else MsgBox ("La table n'a PAS été trouvée!") End If End Sub

Créer une fonction de table

Cette fonction créera une table dans Access VBA dans la base de données actuelle :

Fonction publique CreateTable(table_fields As String, table_name As String) As Boolean Dim strCreateTable As String Dim intCount As Integer Dim strFields() As String Dim strValues() As String Dim strInsertSQL As String Dim intCounter As Integer Dim intData As Integer On Error GoTo Err strFields = Split(table_fields, ",") strCreateTable = "CREATE TABLE " & table_name & "(" For intCounter = 0 To UBound(strFields) - 1 strCreateTable = strCreateTable & "[" & strFields(intCounter) & "] varchar( 150)," Next If Right(strCreateTable, 1) = "," Then strCreateTable = Left(strCreateTable, Len(strCreateTable) - 1) strCreateTable = strCreateTable & ")" End If CurrentDb.Execute strCreateTable intCounter = 0 intData = 0 If Err.Number = 0 Then CreateTable = True Sinon CreateTable = False End If Exit Function Err: CreateTable = False MsgBox Err.Number & " " & Err.Description End Function

Cette fonction retournera TRUE si la table est créée avec succès ou FALSE si la table n'est pas créée.

Vous pouvez appeler la fonction comme ceci :

Private Sub CreateTable_Example() Appeler CreateTable("f1,f2,f3,f4", "test") End Sub

Fonction Supprimer / Supprimer la Table

Cette fonction supprimera une table si elle existe :

Fonction publique DeleteTableIfExists(TableName As String) If Not IsNull(DLookup("Name", "MSysObjects", "Name='" & TableName & "'")) Then DoCmd.SetWarnings False DoCmd.Close acTable, TableName, acSaveYes DoCmd. DeleteObject acTable = acDefault, TableName Debug.Print "Table " & TableName & " supprimé… " DoCmd.SetWarnings True End If End Function

Vous pouvez appeler la fonction comme ceci :

Private Sub DeleteTableIfExists_Example() Appeler DeleteTableIfExists("Table1") End Sub

Fonction de table vide

Cette fonction videra une table si elle existe :

Fonction publique EmptyTable(TableName As String) If Not IsNull(DLookup("Name", "MSysObjects", "Name='" & TableName & "'")) Then DoCmd.SetWarnings False DoCmd.RunSQL "DELETE * FROM " & TableName Debug.Print "Table " & TableName & " vidé… " DoCmd.SetWarnings True End If End Function

Vous pouvez appeler la fonction comme ceci :

Private Sub EmptyTable_Example() Appelez EmptyTable("Table1") End Sub

Renommer la fonction de table

Cette fonction VBA va renommer une table :

Fonction publique RenameTable(ByVal strOldTableName As String, ByVal strNewTableName As String, facultatif strDBPath As String) As Boolean Dim db As DAO.Database Dim tdf As TableDef ' Trappe pour toute erreur. On Error Resume Next ' Si le nom de la base de données est vide… If Trim$(strDBPath) = "" Then '… then set Db à la DB actuelle. Set db = CurrentDb() Else ' Sinon, définissez Db sur la base de données ouverte spécifiée. Set db = DBEngine.Workspaces(0).OpenDatabase(strDBPath) ' Voir si une erreur s'est produite. If Err Then 'MsgBox "Impossible de trouver la base de données à ouvrir : " & strDBPath RenameTable = False Exit Function End If End If If ObjectExists("Table", strOldTableName, strDBPath) Then Set tdf = db.TableDefs(strOldTableName) tdf.Name = strNewTableName db.Close RenameTable = True Else RenameTable = False End If End Function 'Exemple d'utilisation Private Sub RenameTable_Example() Appeler RenameTable("table1", "table2") End Sub

Vous pouvez appeler la fonction comme ceci :

Private Sub RenameTable_Example() Call RenameTable("table1", "table2") End Sub

Tronquer / Supprimer les enregistrements de la table

Cette fonction supprimera les enregistrements d'une table avec la gestion des erreurs :

Fonction publique Delete_From_Table(TableName As String, Criteria As String) En cas d'erreur GoTo SubError DoCmd.SetWarnings False DoCmd.RunSQL ("DELETE * FROM " & TableName & " WHERE " & Criteria) DoCmd.SetWarnings True SubExit : Exit Function SubError : MsgBox " Erreur Delete_From_Table : " & vbCrLf & Err.Number & " : " & Err.Description Resume SubExit End Function 'Exemple d'utilisation Public Sub Delete_From_Table_Example() Appel Delete_From_Table("Table1", "num=2") End Sub

Exporter le tableau vers Excel

Cette ligne de code exportera un tableau vers Excel (une nouvelle feuille de calcul) :

DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c:\temp\ExportedTable.xls"

Ou vous pouvez utiliser cette fonction :

Fonction publique Export_Table_Excel(TableName As String, FilePath As String) DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, TableName, FilePath, True End Function 'Exemple d'utilisation Sub Export_Table_Excel_Example () Export_Table_Excel("Table1", "c:\templs\")ExportedTable. Fin du sous-marin

Le code ci-dessus sera exporté vers une nouvelle feuille de calcul. Au lieu de cela, vous pouvez ajouter un tableau à une feuille de calcul existante. Notre article sur l'importation / exportation dans Access VBA couvre cela plus en détail.

Ajouter/ajouter des enregistrements à une table

Cette fonction ajoutera / ajoutera un enregistrement à une table :

Fonction publique Append_Record_To_Table(TableName As String, FieldName As String, FieldValue As String) En cas d'erreur GoTo SubError Dim rs As DAO.Recordset Dim SQL As String Dim CurrentYear As Integer Set rs = CurrentDb.OpenRecordset(TableName) rs.AddNew rs(FieldName) .Value = FieldValue rs.Update rs.Close Set rs = Nothing SubExit: Exit Function SubError: MsgBox "RunSQL error: " & vbCrLf & Err.Number & ": " & Err.Description Resume SubExit End Function 'Usage Example Private Sub Append_Record_To_Table_Example () Appelez Append_Record_To_Table ("Table1", "num", 3) End Sub

Ajouter un enregistrement à une table à partir d'un formulaire

Cette fonction ajoutera un enregistrement à une table à partir d'un formulaire :

Fonction publique Add_Record_To_Table_From_Form(TableName As String) En cas d'erreur GoTo SubError Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset(TableName) rs.AddNew 'rs![Field1] = Value1 'rs![Field2] = Value2 'rs![ Field3] = Value3 rs.Update rs.Close Set rs = Nothing SubExit : Exit Function SubError : MsgBox "Refresh_Form error : " & vbCrLf & Err.Number & ": " & Err.Description End Function

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave