Connection access en ouverture d'excel [Résolu]

Signaler
Messages postés
6
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
6 mars 2007
-
Messages postés
6
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
6 mars 2007
-
bonjour,

j'ai la fonction suivante
Function packing2(champs, letag, leprojet, litemeqpt As String)



Dim source As ADODB.Connection
Dim t_list As ADODB.Recordset
Dim chemin As String, texte_SQL As String
chemin = ActiveWorkbook.Path
' ouvre la base de données Access (microsoft jet)
Set source = New ADODB.Connection
source.Provider = "Microsoft.Jet.OLEDB.4.0;"
source.Open chemin & "\backoffice\packinglist.mdb"




Set t_list = New ADODB.Recordset
'requete SQL
texte_SQL = "SELECT [" & champs & "] FROM peclasse where tag='" & letag & "' and projet ='" & leprojet & "'"
Set t_list = source.Execute(texte_SQL)






'equipments = t_list.GetString
packing2 = t_list.Fields(0).Value




'ferme la requête et packinglist.mdb
t_list.Close
source.Close




End Function


je l'utilises au moins 1000 fois dans mon fichier excel
et c'est tres lent en calcul
je cherche pour accelerer le tps de calcul
a ouvrir la connection a la base de donnée seulement a l'ouverture
comment puis je faire?
les autres idées sont bienvenue

merci bcp pour l'aide

9 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
Salut,
Oui mais vu que ton recordset est remplacer à chaque requete, cela n'a pas gran intérêt Sauf bien sûr si tu as besoin de ce recordset partout.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
Salut,
Tu peux déjà mettre ton objet connection comme objet connu de tout ton Classeur (Public source As ADODB.Connection
Dans un module)
Et l'initialiser à l'événement Open de l'objet
PrivateSub Workbook_Open()
Set Source = New ADODB.Connection
Source.Provider = "Microsoft.Jet.OLEDB.4.0;"
Source.Open chemin & "\backoffice\packinglist.mdb"
EndSub, ----
[code.aspx?ID=41455 By Renfield]

Ensuite il ne te reste qu'à ne faire appel qu'à la requête SQL avec la même fonction.
=> en pensant a bien détruire les objets à la fin
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
6
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
6 mars 2007

ca ne marche pas
voici mon code

Function packing2(champs, letag, leprojet, litemeqpt As String)



'Dim source As ADODB.Connection
Dim t_list As ADODB.Recordset
Dim chemin As String, texte_SQL As String
chemin = ActiveWorkbook.Path
' ouvre la base de données Access (microsoft jet)
'Set source = New ADODB.Connection
'source.Provider = "Microsoft.Jet.OLEDB.4.0;"
'source.Open chemin & "\backoffice\packinglist.mdb"




Set t_list = New ADODB.Recordset
'requete SQL
texte_SQL = "SELECT [" & champs & "] FROM peclasse where tag='" & letag & "' and projet ='" & leprojet & "'"
Set t_list = source.Execute(texte_SQL)






'equipments = t_list.GetString
packing2 = t_list.Fields(0).Value




'ferme la requête et packinglist.mdb
t_list.Close
'source.Close




End Function




Private Sub Workbook_Open()
Set source = New ADODB.Connection
source.Provider = "Microsoft.Jet.OLEDB.4.0;"
source.Open chemin & "\backoffice\packinglist.mdb"
End Sub




Private Sub Workbook_Close()
source.Close
End Sub
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
Salut,
Lorsque tu dis "ca ne marche" , qu'entends tu exactement par la?
    - Cela ne diminue pas ton temps de calcul?
    - Tu as une erreur?

Est ce que ta base est volumineuse?

D'autre part tu peu supprimer cette ligne qui ne sert à rien puisque tu fais un autre Set juste après
Set t_list = New ADODB.Recordset


@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
6
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
6 mars 2007

ca me met dans mon champs excel => '#value!"
j'ai mis aussi la connection dans la fonction
Sub auto_open()
'
  
Dim source As ADODB.Connection
Set source = New ADODB.Connection
source.Provider = "Microsoft.Jet.OLEDB.4.0;"
chemin = ActiveWorkbook.Path
source.Open chemin & "\backoffice\packinglist.mdb"
MsgBox chemin & "\backoffice\packinglist.mdb"

car sinon la msgbox ne s ouvre pas
Messages postés
6
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
6 mars 2007

si je mets
msgbox source la ou est declaré la connection ce la m'affiche la chaine de connection
mais msgbox source dans une autre fonction affiche "" (rien)
en fait il ne conserve pas la chaine de connection par la suite
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
Re,
as tu déclarer ta source dans un module comme suit?:
Public Source as ADODB.Connection

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
6
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
6 mars 2007

Option Explicit
Dim source As ADODB.Connection

voici ce qui me manquait
ca marche maintenant je vais faire mes test
merci pour l'aide

est il possible de faire la meme chose avec le recordset?
Messages postés
6
Date d'inscription
dimanche 4 février 2007
Statut
Membre
Dernière intervention
6 mars 2007

ok merci bcp pour ton aide