Connection access en ouverture d'excel

Résolu
jahworks Messages postés 6 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 6 mars 2007 - 5 mars 2007 à 17:01
jahworks Messages postés 6 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 6 mars 2007 - 6 mars 2007 à 10:59
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

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 mars 2007 à 10:32
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
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 mars 2007 à 17:12
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
0
jahworks Messages postés 6 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 6 mars 2007
6 mars 2007 à 09:27
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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 mars 2007 à 09:35
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jahworks Messages postés 6 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 6 mars 2007
6 mars 2007 à 09:55
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
0
jahworks Messages postés 6 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 6 mars 2007
6 mars 2007 à 10:08
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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 mars 2007 à 10:12
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
0
jahworks Messages postés 6 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 6 mars 2007
6 mars 2007 à 10:29
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?
0
jahworks Messages postés 6 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 6 mars 2007
6 mars 2007 à 10:59
ok merci bcp pour ton aide
0
Rejoignez-nous