Verifier qu'une table existe ou non (ADODB) - Excel/Access
bonjour ! :)
Je me trouve confronté à un petit problème et malgré mes recherches sur le net, je ne trouve pas de réponse adéquate à ma situation.
J'utilise ADO Xretrieve décrit dans le tuto de caféine pour remplir mes tableaux: Communication entre Excel et Access (en fin de page).
Cela fonctionne plutôt bien. Le seul problème c'est que certaines requêtes sur lesquelles je me base pour remplir mes tableaux sont assez longue à traiter. En effet la fonction xretrieve est présente dans chaque cellule du tableau à remplir. Si j'ai 50 cellules contenant cette fonction dans mon tableau, la requête s'executera 50 fois... J'ai donc décidé de créer une table pour chaque requête. Cette table reçoit les données de la requête en fonction du filtre (date). La fonction Xretrieve ne se base plus alors sur la requete' mais sur la table ce qui accélère considérablement le traitement.
Mon principe actuel est celui la :
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
| Sub CreateTble(ByVal NomTble As String, NomReq As String)
Dim MoisDeb, MoisFin, AnneeDeb, AnneeFin As Integer
MoisDeb = Sheets("Feuil2").[B27]
MoisFin = Sheets("Feuil2").[B28]
AnneeDeb = Sheets("Feuil2").[B29]
AnneeFin = Sheets("Feuil2").[B30]
On Error GoTo Errh1:
'Suppression de la table
cnx.Execute "DROP TABLE " & NomTble
'Création de la table
cnx.Execute "CREATE TABLE " & NomTble & " ([Nom de la caisse] Char(50), [NomdesDroits] char(50)," _
& "[NomdesStatuts] char(50), [IDmois] Integer, [Année] Integer, [IDcontroledossier] Integer)"
'Import de la requete
cnx.Execute "INSERT INTO " & NomTble & " SELECT * FROM " & NomReq & " WHERE" _
& "([IDmois] Between " & MoisDeb & " And " & MoisFin & " )" _
& "And ([Année] Between " & AnneeDeb & " And " & AnneeFin & ");"
Errh1:
'Ne tient pas compte du mess d'erreur si la table n'existe pas
Resume Next |
Fonction Xretrieve :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Public Function xretrieve(Optional ByVal NomCaisse As String = vbNullString, _
Optional ByVal NomBranche As String = vbNullString, _
Optional ByVal NomDroit As String = vbNullString, _
Optional ByVal NomTable As String = vbNullString)
Dim strSQL As String
strSQL = "SELECT Count(*) FROM " & NomTable & " where " _
& "[Nom de la caisse] = '" & Replace(NomCaisse, "'", "''") & "'" _
& " And ([NomdesStatuts] = '" & NomBranche & "')" _
& " And ([NomdesDroits] = '" & NomDroit & "')"
Dim rst As New ADODB.Recordset
rst.Open strSQL, cnx
xretrieve = rst.Fields(0)
rst.Close
Set rst = Nothing
Exit Function
End Function |
Je souhaiterai traiter la création de table différemment. Je pense que supprimer la table à chaque fois pour la recréer ralenti un peu l'execution de la macro. Il serait préférable de pouvoir mettre une condition si la table existe déja.
En gros si la table existe je supprime son contenu et je le remplace par le nouveau issu de la requete insert. Si la table n'existe pas alors je la créer.
Le plus simple serait
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| If la table existe pas then
'Création de la table
cnx.Execute "CREATE TABLE " & NomTble & " ([Nom de la caisse] Char(50), [NomdesDroits] char(50)," _
& "[NomdesStatuts] char(50), [IDmois] Integer, [Année] Integer, [IDcontroledossier] Integer)"
else
'Suppression du contenu de la table
cnx.execute "DELETE FROM " & NomTble
end if
'Import de la requete
cnx.Execute "INSERT INTO " & NomTble & " SELECT * FROM " & NomReq & " WHERE" _
& "([IDmois] Between " & MoisDeb & " And " & MoisFin & " )" _
& "And ([Année] Between " & AnneeDeb & " And " & AnneeFin & ");" |
Donc ma question est : Quel est le moyen via ADODB de savoir si une table existe ou non dans Access. ?
Merci pour votre future aide ;)
Cordialement
Guillaume