Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Gestion BDD Access via VBA - suite -

8 réponses
Avatar
Thierry Euzenot
Re-Bonjour à tous :o)

Petit à petit j'avance dans ma recherche/formation sur la gestion de BDD via
VBA !

Mon code marche, mais j'aimerais l'optimiser un peu.

En fait la connexion à la base de donnée, c'est un morceau de code dont je
vais avoir besoin dans beaucoup de routines, voire même dans plusieurs
modules. C'est pas très malin de recopier le code dans chaque sub() car si
je veux faire une modif...
Donc mon idée c'était d'en faire une fonction. J'ai essayé... j'ai pas
réussi :o(

Quelqu'un pourrait m'aider svp ?

Thierry


Mon code (en fait largement inspiré de l'exemple Microsoft ^^) :

==> 1ère partie : Connexion à la base :

'Définit le nom de la connexion
Dim conn As ADODB.Connection

' Création de l'objet Connexion
Set conn = New ADODB.Connection
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "\art_st2e.mdb"
End With

==> 2e partie la requête (simple pour l'instant)

'Définit le nom de la requête
Dim rst As ADODB.Recordset
'Définit les variables de la requête
Dim Nsql As String, Njoin As String, Ncriteria As String
'Variable de compteur
Dim i As Integer

Rsql = "SELECT DISTINCT articles.[artcode], articles.[artdesig] FROM
articles;"

' Création d'un nouvel objet Recordset (jeu d'enregistrement)
Set rst = New ADODB.Recordset
With rst
' Connexion du jeu d'engistrement à la connexion ouverte
précédemment
.ActiveConnection = conn
' Récupération de tous les enregistrements retournés par la requête
.Open Rsql, conn, adOpenDynamic, adLockBatchOptimistic
End With

==> 3e partie (la suite mais on s'en fiche !)

8 réponses

Avatar
tictok
Si tu utilises souvent la meme procedure, isoles cette partie du code pour
en faire une procedure.
Ensuite, quand tu en as besoin, fais un
Call TaProcedure()que c'est mieux d'en faire une proecdure.

Oublies pas qu'une fonction renvoie une valeur, et une procedure non.
Donc, je pense


"Thierry Euzenot" escreveu na mensagem
news:
Re-Bonjour à tous :o)

Petit à petit j'avance dans ma recherche/formation sur la gestion de BDD
via

VBA !

Mon code marche, mais j'aimerais l'optimiser un peu.

En fait la connexion à la base de donnée, c'est un morceau de code dont je
vais avoir besoin dans beaucoup de routines, voire même dans plusieurs
modules. C'est pas très malin de recopier le code dans chaque sub() car si
je veux faire une modif...
Donc mon idée c'était d'en faire une fonction. J'ai essayé... j'ai pas
réussi :o(

Quelqu'un pourrait m'aider svp ?

Thierry


Mon code (en fait largement inspiré de l'exemple Microsoft ^^) :

==> 1ère partie : Connexion à la base :

'Définit le nom de la connexion
Dim conn As ADODB.Connection

' Création de l'objet Connexion
Set conn = New ADODB.Connection
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With

==> 2e partie la requête (simple pour l'instant)

'Définit le nom de la requête
Dim rst As ADODB.Recordset
'Définit les variables de la requête
Dim Nsql As String, Njoin As String, Ncriteria As String
'Variable de compteur
Dim i As Integer

Rsql = "SELECT DISTINCT articles.[artcode], articles.[artdesig] FROM
articles;"

' Création d'un nouvel objet Recordset (jeu d'enregistrement)
Set rst = New ADODB.Recordset
With rst
' Connexion du jeu d'engistrement à la connexion ouverte
précédemment
.ActiveConnection = conn
' Récupération de tous les enregistrements retournés par la
requête

.Open Rsql, conn, adOpenDynamic, adLockBatchOptimistic
End With

==> 3e partie (la suite mais on s'en fiche !)




Avatar
tictok
[Petit problene avec le pave tactile du portable :D]

Si tu utilises souvent la meme procedure, isoles cette partie du code pour
en faire une procedure.
Ensuite, quand tu en as besoin dans une procedure quelconque , fais un
Call TaProcedure() pour l'appeler.

Oublies pas qu'une fonction renvoie une valeur, et une procedure non.
Donc, je pense que c'est mieux d'en faire une proecdure.


"Thierry Euzenot" escreveu na mensagem
news:
Re-Bonjour à tous :o)

Petit à petit j'avance dans ma recherche/formation sur la gestion de BDD
via

VBA !

Mon code marche, mais j'aimerais l'optimiser un peu.

En fait la connexion à la base de donnée, c'est un morceau de code dont je
vais avoir besoin dans beaucoup de routines, voire même dans plusieurs
modules. C'est pas très malin de recopier le code dans chaque sub() car si
je veux faire une modif...
Donc mon idée c'était d'en faire une fonction. J'ai essayé... j'ai pas
réussi :o(

Quelqu'un pourrait m'aider svp ?

Thierry


Mon code (en fait largement inspiré de l'exemple Microsoft ^^) :

==> 1ère partie : Connexion à la base :

'Définit le nom de la connexion
Dim conn As ADODB.Connection

' Création de l'objet Connexion
Set conn = New ADODB.Connection
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With

==> 2e partie la requête (simple pour l'instant)

'Définit le nom de la requête
Dim rst As ADODB.Recordset
'Définit les variables de la requête
Dim Nsql As String, Njoin As String, Ncriteria As String
'Variable de compteur
Dim i As Integer

Rsql = "SELECT DISTINCT articles.[artcode], articles.[artdesig] FROM
articles;"

' Création d'un nouvel objet Recordset (jeu d'enregistrement)
Set rst = New ADODB.Recordset
With rst
' Connexion du jeu d'engistrement à la connexion ouverte
précédemment
.ActiveConnection = conn
' Récupération de tous les enregistrements retournés par la
requête

.Open Rsql, conn, adOpenDynamic, adLockBatchOptimistic
End With

==> 3e partie (la suite mais on s'en fiche !)




Avatar
Himselff
Pour ce qui est de la chaine de connection , pas besoin de louvrir a tout
les procedure , une fois suffit, donc ce qui est important cest dans
levenement douverture du classeur vous y mettiez la ligne de connection et
dans la fermeture la deconnection !

Bonne Chance!

Fred
"Thierry Euzenot" wrote in message
news:
Re-Bonjour à tous :o)

Petit à petit j'avance dans ma recherche/formation sur la gestion de BDD
via

VBA !

Mon code marche, mais j'aimerais l'optimiser un peu.

En fait la connexion à la base de donnée, c'est un morceau de code dont je
vais avoir besoin dans beaucoup de routines, voire même dans plusieurs
modules. C'est pas très malin de recopier le code dans chaque sub() car si
je veux faire une modif...
Donc mon idée c'était d'en faire une fonction. J'ai essayé... j'ai pas
réussi :o(

Quelqu'un pourrait m'aider svp ?

Thierry


Mon code (en fait largement inspiré de l'exemple Microsoft ^^) :

==> 1ère partie : Connexion à la base :

'Définit le nom de la connexion
Dim conn As ADODB.Connection

' Création de l'objet Connexion
Set conn = New ADODB.Connection
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With

==> 2e partie la requête (simple pour l'instant)

'Définit le nom de la requête
Dim rst As ADODB.Recordset
'Définit les variables de la requête
Dim Nsql As String, Njoin As String, Ncriteria As String
'Variable de compteur
Dim i As Integer

Rsql = "SELECT DISTINCT articles.[artcode], articles.[artdesig] FROM
articles;"

' Création d'un nouvel objet Recordset (jeu d'enregistrement)
Set rst = New ADODB.Recordset
With rst
' Connexion du jeu d'engistrement à la connexion ouverte
précédemment
.ActiveConnection = conn
' Récupération de tous les enregistrements retournés par la
requête

.Open Rsql, conn, adOpenDynamic, adLockBatchOptimistic
End With

==> 3e partie (la suite mais on s'en fiche !)




Avatar
Thierry Euzenot
Merci :o)

J'en étais arrivé à la même conclusion, mais je préférais avoir confirmation
!


"tictok" a écrit dans le message de
news:
[Petit problene avec le pave tactile du portable :D]

Si tu utilises souvent la meme procedure, isoles cette partie du code pour
en faire une procedure.
Ensuite, quand tu en as besoin dans une procedure quelconque , fais un
Call TaProcedure() pour l'appeler.

Oublies pas qu'une fonction renvoie une valeur, et une procedure non.
Donc, je pense que c'est mieux d'en faire une proecdure.


"Thierry Euzenot" escreveu na mensagem
news:
Re-Bonjour à tous :o)

Petit à petit j'avance dans ma recherche/formation sur la gestion de BDD
via

VBA !

Mon code marche, mais j'aimerais l'optimiser un peu.

En fait la connexion à la base de donnée, c'est un morceau de code dont
je


vais avoir besoin dans beaucoup de routines, voire même dans plusieurs
modules. C'est pas très malin de recopier le code dans chaque sub() car
si


je veux faire une modif...
Donc mon idée c'était d'en faire une fonction. J'ai essayé... j'ai pas
réussi :o(

Quelqu'un pourrait m'aider svp ?

Thierry


Mon code (en fait largement inspiré de l'exemple Microsoft ^^) :

==> 1ère partie : Connexion à la base :

'Définit le nom de la connexion
Dim conn As ADODB.Connection

' Création de l'objet Connexion
Set conn = New ADODB.Connection
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With

==> 2e partie la requête (simple pour l'instant)

'Définit le nom de la requête
Dim rst As ADODB.Recordset
'Définit les variables de la requête
Dim Nsql As String, Njoin As String, Ncriteria As String
'Variable de compteur
Dim i As Integer

Rsql = "SELECT DISTINCT articles.[artcode], articles.[artdesig] FROM
articles;"

' Création d'un nouvel objet Recordset (jeu d'enregistrement)
Set rst = New ADODB.Recordset
With rst
' Connexion du jeu d'engistrement à la connexion ouverte
précédemment
.ActiveConnection = conn
' Récupération de tous les enregistrements retournés par la
requête

.Open Rsql, conn, adOpenDynamic, adLockBatchOptimistic
End With

==> 3e partie (la suite mais on s'en fiche !)








Avatar
michdenis
Bonjour Tnierry,

en supplément à ce que Himself énonce,

Tu peux dans le haut d'un module standard, déclaré des variables "public"

Public Conn As ADODB.Connection
Public Rst As ADODB.Recordset

Tu peux même ajouter des "Const Public" contenant la chaine de caractère de tes requêtes si ces dernières sont "fixes"

Public Const Rsql_1= "SELECT DISTINCT articles.[artcode], articles.[artdesig] FROM articles;"
Public Const Rsql_2= "Select ...."


Dans le ThisWorkbook de ton classeur :
'-------------------
Private Sub Workbook_Open()
OuvrirConnexionVersBaseDeDonnées
End Sub
'-------------------

Dans un module Standard :
'--------------------
Sub OuvrirConnexionVersBaseDeDonnées
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With
End Sub
'--------------------

Et dans une procédure quelconque lorsque tu auras besoin d'ouvrir un recordset :
'---------------------
Sub MaSub()

Rst.Open Rsql_1, Conn adOpenKeyset
' Traitement du recordset

Rst.close

End sub
'---------------------

Et pour terminer en beauté : Dans le ThisWorkbook de ton classeur :

'------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Set Rst = Nothing, Set Conn = Nothing

End Sub
'------------------

Salutations!



"Thierry Euzenot" a écrit dans le message de news:
Re-Bonjour à tous :o)

Petit à petit j'avance dans ma recherche/formation sur la gestion de BDD via
VBA !

Mon code marche, mais j'aimerais l'optimiser un peu.

En fait la connexion à la base de donnée, c'est un morceau de code dont je
vais avoir besoin dans beaucoup de routines, voire même dans plusieurs
modules. C'est pas très malin de recopier le code dans chaque sub() car si
je veux faire une modif...
Donc mon idée c'était d'en faire une fonction. J'ai essayé... j'ai pas
réussi :o(

Quelqu'un pourrait m'aider svp ?

Thierry


Mon code (en fait largement inspiré de l'exemple Microsoft ^^) :

==> 1ère partie : Connexion à la base :

'Définit le nom de la connexion
Dim conn As ADODB.Connection

' Création de l'objet Connexion
Set conn = New ADODB.Connection
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With

==> 2e partie la requête (simple pour l'instant)

'Définit le nom de la requête
Dim rst As ADODB.Recordset
'Définit les variables de la requête
Dim Nsql As String, Njoin As String, Ncriteria As String
'Variable de compteur
Dim i As Integer

Rsql = "SELECT DISTINCT articles.[artcode], articles.[artdesig] FROM
articles;"

' Création d'un nouvel objet Recordset (jeu d'enregistrement)
Set rst = New ADODB.Recordset
With rst
' Connexion du jeu d'engistrement à la connexion ouverte
précédemment
.ActiveConnection = conn
' Récupération de tous les enregistrements retournés par la requête
.Open Rsql, conn, adOpenDynamic, adLockBatchOptimistic
End With

==> 3e partie (la suite mais on s'en fiche !)
Avatar
Thierry Euzenot
Oui effectivement ça à l'air judicieux :o)

Est-ce que ça marche même si 5 ou 6 ordinateurs sont connectés en même temps
sur la même base ?

En effet la base va être sur le serveur et 6 ordinateurs auront accès à la
BDD 8h par jours....

"michdenis" a écrit dans le message de
news:%
Bonjour Tnierry,

en supplément à ce que Himself énonce,

Tu peux dans le haut d'un module standard, déclaré des variables "public"

Public Conn As ADODB.Connection
Public Rst As ADODB.Recordset

Tu peux même ajouter des "Const Public" contenant la chaine de caractère
de tes requêtes si ces dernières sont "fixes"


Public Const Rsql_1= "SELECT DISTINCT articles.[artcode],
articles.[artdesig] FROM articles;"

Public Const Rsql_2= "Select ...."


Dans le ThisWorkbook de ton classeur :
'-------------------
Private Sub Workbook_Open()
OuvrirConnexionVersBaseDeDonnées
End Sub
'-------------------

Dans un module Standard :
'--------------------
Sub OuvrirConnexionVersBaseDeDonnées
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With
End Sub
'--------------------

Et dans une procédure quelconque lorsque tu auras besoin d'ouvrir un
recordset :

'---------------------
Sub MaSub()

Rst.Open Rsql_1, Conn adOpenKeyset
' Traitement du recordset

Rst.close

End sub
'---------------------

Et pour terminer en beauté : Dans le ThisWorkbook de ton classeur :

'------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Set Rst = Nothing, Set Conn = Nothing

End Sub
'------------------

Salutations!



"Thierry Euzenot" a écrit dans le message de
news:

Re-Bonjour à tous :o)

Petit à petit j'avance dans ma recherche/formation sur la gestion de BDD
via

VBA !

Mon code marche, mais j'aimerais l'optimiser un peu.

En fait la connexion à la base de donnée, c'est un morceau de code dont je
vais avoir besoin dans beaucoup de routines, voire même dans plusieurs
modules. C'est pas très malin de recopier le code dans chaque sub() car si
je veux faire une modif...
Donc mon idée c'était d'en faire une fonction. J'ai essayé... j'ai pas
réussi :o(

Quelqu'un pourrait m'aider svp ?

Thierry


Mon code (en fait largement inspiré de l'exemple Microsoft ^^) :

==> 1ère partie : Connexion à la base :

'Définit le nom de la connexion
Dim conn As ADODB.Connection

' Création de l'objet Connexion
Set conn = New ADODB.Connection
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With

==> 2e partie la requête (simple pour l'instant)

'Définit le nom de la requête
Dim rst As ADODB.Recordset
'Définit les variables de la requête
Dim Nsql As String, Njoin As String, Ncriteria As String
'Variable de compteur
Dim i As Integer

Rsql = "SELECT DISTINCT articles.[artcode], articles.[artdesig] FROM
articles;"

' Création d'un nouvel objet Recordset (jeu d'enregistrement)
Set rst = New ADODB.Recordset
With rst
' Connexion du jeu d'engistrement à la connexion ouverte
précédemment
.ActiveConnection = conn
' Récupération de tous les enregistrements retournés par la
requête

.Open Rsql, conn, adOpenDynamic, adLockBatchOptimistic
End With

==> 3e partie (la suite mais on s'en fiche !)





Avatar
michdenis
Bonjour Thierry,

"Est-ce que ça marche même si 5 ou 6 ordinateurs sont connectés en même temps
sur la même base ?"

En théorie, oui, SAUF si 2 usagers essaient d'intervenir (modifier) sur les mêmes enregistrements en même temps ! tu
auras plus d'informations sur le groupe de discussion Access sur la façon dont Access gère cela.


Salutations!






"Thierry Euzenot" a écrit dans le message de news:%
Oui effectivement ça à l'air judicieux :o)

Est-ce que ça marche même si 5 ou 6 ordinateurs sont connectés en même temps
sur la même base ?

En effet la base va être sur le serveur et 6 ordinateurs auront accès à la
BDD 8h par jours....

"michdenis" a écrit dans le message de
news:%
Bonjour Tnierry,

en supplément à ce que Himself énonce,

Tu peux dans le haut d'un module standard, déclaré des variables "public"

Public Conn As ADODB.Connection
Public Rst As ADODB.Recordset

Tu peux même ajouter des "Const Public" contenant la chaine de caractère
de tes requêtes si ces dernières sont "fixes"


Public Const Rsql_1= "SELECT DISTINCT articles.[artcode],
articles.[artdesig] FROM articles;"

Public Const Rsql_2= "Select ...."


Dans le ThisWorkbook de ton classeur :
'-------------------
Private Sub Workbook_Open()
OuvrirConnexionVersBaseDeDonnées
End Sub
'-------------------

Dans un module Standard :
'--------------------
Sub OuvrirConnexionVersBaseDeDonnées
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With
End Sub
'--------------------

Et dans une procédure quelconque lorsque tu auras besoin d'ouvrir un
recordset :

'---------------------
Sub MaSub()

Rst.Open Rsql_1, Conn adOpenKeyset
' Traitement du recordset

Rst.close

End sub
'---------------------

Et pour terminer en beauté : Dans le ThisWorkbook de ton classeur :

'------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Set Rst = Nothing, Set Conn = Nothing

End Sub
'------------------

Salutations!



"Thierry Euzenot" a écrit dans le message de
news:

Re-Bonjour à tous :o)

Petit à petit j'avance dans ma recherche/formation sur la gestion de BDD
via

VBA !

Mon code marche, mais j'aimerais l'optimiser un peu.

En fait la connexion à la base de donnée, c'est un morceau de code dont je
vais avoir besoin dans beaucoup de routines, voire même dans plusieurs
modules. C'est pas très malin de recopier le code dans chaque sub() car si
je veux faire une modif...
Donc mon idée c'était d'en faire une fonction. J'ai essayé... j'ai pas
réussi :o(

Quelqu'un pourrait m'aider svp ?

Thierry


Mon code (en fait largement inspiré de l'exemple Microsoft ^^) :

==> 1ère partie : Connexion à la base :

'Définit le nom de la connexion
Dim conn As ADODB.Connection

' Création de l'objet Connexion
Set conn = New ADODB.Connection
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With

==> 2e partie la requête (simple pour l'instant)

'Définit le nom de la requête
Dim rst As ADODB.Recordset
'Définit les variables de la requête
Dim Nsql As String, Njoin As String, Ncriteria As String
'Variable de compteur
Dim i As Integer

Rsql = "SELECT DISTINCT articles.[artcode], articles.[artdesig] FROM
articles;"

' Création d'un nouvel objet Recordset (jeu d'enregistrement)
Set rst = New ADODB.Recordset
With rst
' Connexion du jeu d'engistrement à la connexion ouverte
précédemment
.ActiveConnection = conn
' Récupération de tous les enregistrements retournés par la
requête

.Open Rsql, conn, adOpenDynamic, adLockBatchOptimistic
End With

==> 3e partie (la suite mais on s'en fiche !)





Avatar
Thierry Euzenot
Ok,

Merci beaucoup, j'ai mis en place ce que tu m'as expliqué et ça marche
nickel :o)

Pour les accès simultanés je crois avoir trouvé, mais je vais certainement
aller faire un tour du côté du groupe accès ^^

Salutation

"Décidément ce groupe est une mine d'Or inépuisable :o)"

"michdenis" a écrit dans le message de
news:uC%
Bonjour Thierry,

"Est-ce que ça marche même si 5 ou 6 ordinateurs sont connectés en même
temps

sur la même base ?"

En théorie, oui, SAUF si 2 usagers essaient d'intervenir (modifier) sur
les mêmes enregistrements en même temps ! tu

auras plus d'informations sur le groupe de discussion Access sur la façon
dont Access gère cela.



Salutations!






"Thierry Euzenot" a écrit dans le message de
news:%

Oui effectivement ça à l'air judicieux :o)

Est-ce que ça marche même si 5 ou 6 ordinateurs sont connectés en même
temps

sur la même base ?

En effet la base va être sur le serveur et 6 ordinateurs auront accès à la
BDD 8h par jours....

"michdenis" a écrit dans le message de
news:%
Bonjour Tnierry,

en supplément à ce que Himself énonce,

Tu peux dans le haut d'un module standard, déclaré des variables
"public"



Public Conn As ADODB.Connection
Public Rst As ADODB.Recordset

Tu peux même ajouter des "Const Public" contenant la chaine de caractère
de tes requêtes si ces dernières sont "fixes"


Public Const Rsql_1= "SELECT DISTINCT articles.[artcode],
articles.[artdesig] FROM articles;"

Public Const Rsql_2= "Select ...."


Dans le ThisWorkbook de ton classeur :
'-------------------
Private Sub Workbook_Open()
OuvrirConnexionVersBaseDeDonnées
End Sub
'-------------------

Dans un module Standard :
'--------------------
Sub OuvrirConnexionVersBaseDeDonnées
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With
End Sub
'--------------------

Et dans une procédure quelconque lorsque tu auras besoin d'ouvrir un
recordset :

'---------------------
Sub MaSub()

Rst.Open Rsql_1, Conn adOpenKeyset
' Traitement du recordset

Rst.close

End sub
'---------------------

Et pour terminer en beauté : Dans le ThisWorkbook de ton classeur :

'------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Set Rst = Nothing, Set Conn = Nothing

End Sub
'------------------

Salutations!



"Thierry Euzenot" a écrit dans le message de
news:

Re-Bonjour à tous :o)

Petit à petit j'avance dans ma recherche/formation sur la gestion de BDD
via

VBA !

Mon code marche, mais j'aimerais l'optimiser un peu.

En fait la connexion à la base de donnée, c'est un morceau de code dont
je


vais avoir besoin dans beaucoup de routines, voire même dans plusieurs
modules. C'est pas très malin de recopier le code dans chaque sub() car
si


je veux faire une modif...
Donc mon idée c'était d'en faire une fonction. J'ai essayé... j'ai pas
réussi :o(

Quelqu'un pourrait m'aider svp ?

Thierry


Mon code (en fait largement inspiré de l'exemple Microsoft ^^) :

==> 1ère partie : Connexion à la base :

'Définit le nom de la connexion
Dim conn As ADODB.Connection

' Création de l'objet Connexion
Set conn = New ADODB.Connection
With conn
' Définition du fournisseur OleDB pour la connexion
.Provider = "Microsoft.JET.OLEDB.4.0"
' Ouverture d'une connexion vers Comptoir.mdb
.Open ThisWorkbook.Path & "art_st2e.mdb"
End With

==> 2e partie la requête (simple pour l'instant)

'Définit le nom de la requête
Dim rst As ADODB.Recordset
'Définit les variables de la requête
Dim Nsql As String, Njoin As String, Ncriteria As String
'Variable de compteur
Dim i As Integer

Rsql = "SELECT DISTINCT articles.[artcode], articles.[artdesig] FROM
articles;"

' Création d'un nouvel objet Recordset (jeu d'enregistrement)
Set rst = New ADODB.Recordset
With rst
' Connexion du jeu d'engistrement à la connexion ouverte
précédemment
.ActiveConnection = conn
' Récupération de tous les enregistrements retournés par la
requête

.Open Rsql, conn, adOpenDynamic, adLockBatchOptimistic
End With

==> 3e partie (la suite mais on s'en fiche !)