Requetes SQL dans Excel

Y

Yo

Guest
Bonjour,
voici mon petit problème (désolé si le message est long):
J'ai un classeur Excel qui contient 8 feuilles avec
chacune un tableau. Les 3 premiers tableaux sont remplis
grâce à des Requetes effectuées avec MSQuery et servent de
base de calcul aux autres tableaux.
Au total cela fait environ 114 requêtes MSquery et le
travail n'est pas terminé.
C'est là que le problème commence ; je n'ai pas envie de
remettre à jour mes cellules une par une en cliquant
sur 'Actualiser les données' 114 fois et c'est pour ça que
Microsoft a eu la bonne idée de mettre un
bouton 'Réactualiser Tout'.
Donc pour mettre à jour tout le classeur lorsque je le
désire je clique sur le dit bouton et au bout d'un certain
temps (je n'arrive pas à définir quelle requêtes) Excel me
met une erreur du type : [Microsoft][Pilote ODBC Microsoft
Access] Trop de tâches client.
puis : [Microsoft][Gestionnaire de pilotes ODBC] Echec
SQLSetConnectAttr du pilote
Après il y a tout le temps des erreurs puis seulement la
moitié des requêtes se mettent à jour.

Je crois comprendre par cette erreur que la classeur fait
trop de connexions à ma base de données Access et comme
j'utilise le même fichier Access pour toutes mes requêtes,
n'existe-t-il pas un moyen de faire référence à cette base
une fois pour toute et que les requêtes s'exécutent à
partir de l'ouverture ODBC déjà effectuée une fois??? Ou
existe-t-il une solution concrète pour palier ce problème?

En vous remerciant d'avance.

Yo.
 
@

@+Thierry

Guest
Salut Yo,

Je viens de te lire dans le MPFE !, je pense que tu auras plus de succès par làbas...

De mon coté je n'utilise pas msquery sur access , mais un AS400 et DataSelect pour faire des requête SQl, et par conséquent je ne connais pas ton problème.


Bonne Chance
@+Thierry
 
S

STéphane

Guest
bonjour

j'avais eu un problème similaire
il faudrait boucler plutôt sur la collection querytables de chaque feuille du classeur, et demander la rafraîchissement de chacune avec un "doevents", cette dernière méthode permet de donner la main sau système et d'attendre qu'il est fini de travailler.

il faudrait que je retrouve comment j'avais fait.
mais bon là je pars en vacances

donc je vais me faire encore plus rare quelques temps ;-)
bye
stephane
 
S

STéphane

Guest
Sub MiseAJour()

'maj des queries
For Each she In ActiveWorkbook.Sheets
she.Select
If ActiveSheet.QueryTables.Count > 0 Then
For Each tbl In she.QueryTables
tbl.Refresh
Next tbl
End If

'maj des tcd

For Each tcd In she.PivotTables
tcd.Refresh
Next tcd
Next she
End Sub

peut-être faut-il placer un doevents

bye
 
@

@+Thierry

Guest
Bonnes Vacances STéphane

Bonnes Vacances STéphane

Qu'elles soient longues et dûres !!!

à bientot sur le Forum

@+Thierry


PS pour Yo, la réponse de Denis semble pas mal non plus

Objet: Re: Echec Requetes SQL dans Excel
De: "michdenis"

Bonjour Yo,


As-tu essayé quelque chose du genre : Cette procédure devrait mettre à jour toutes tes requêtes.

Tu dois définir la variable ARR avec les noms des feuilles contenant tes requêtes.

(pas testé)
'-------------------------------
Sub MiseAjourQueryTable()

Dim Qt As QueryTable, Arr()

Arr = Array("Feuil1", "Feuil2", "Feuil3") 'à déterminer

With ThisWorkbook
For Each elt In Arr
For Each Qt In .Worksheets(elt).QueryTables
Qt.Refresh False
Next
Next
End With

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


Salutations!
 
Y

Yo

Guest
Oui j'ai vu sa réponse sur le MPFE hier soir et je l'ai testé. Je me ressort une erreur d'exécution '9' type "l'indice n'appartient pas à la sélection"pour la ligne
For Each Qt In .Worksheets(elt).QueryTables

Je ne vois pas d'où cela peut provenir...
En ce qui concerne le code de Stephane, il y avait juste à corriger une toute petite erreur lors du Refresh, mais l'ensemble fonctionne tout à fait correctement (du moins j'espère car je ne sais réellement si toutes les requêtes ont bien pris en compte le changement de la base ; mais je vais tester avec une base vide et voir si tout revient à 0)

Si pour le code de Michdenis tu as une suggestion pour que cela fonctionne... je suis à l'écoute.
 
Y

Yo

Guest
Gros Mea culpa :
le code de Denis fonctionne impeccablement aussi.
J'avais fait une erreur lors de la définition du tableau avec le nom des feuilles. Le résultat est aussi bon dans les deux cas avec un léger plus pour Stephane qui met à jour aussi les tableau croisés dyna.
Le doevents n'est nécessaire que si l'opération est vraiment trop longue à être traité ce qui peut s'avérer être possible dans mon cas avec mes 9 tables de 35000 lignes chacune...
On pourrait donc aussi l'appliquer au code de Denis lors de la MAJ des requetes.

Sinon merci à vous pour votre aide, c'est super.

Yo
 

Discussions similaires

Réponses
10
Affichages
319

Statistiques des forums

Discussions
314 662
Messages
2 111 638
Membres
111 242
dernier inscrit
Oyam