Soucis avec: BackgroundQuery = False

Le
Emile63
Bonjour a tous,
Dans un classeur Excel, j'ai plusieurs tables qui se raffraîchissent
depuis Internet, dans différents query (qui se trouvent dans
différents onglets).
A l'ouverture, j'utilise une macro qui raffraîchit donc toutes les
données avec la commande:
ThisWorkbook.RefreshAll
Mon souci c'est que la macro continue la suite des instructions sans
attendre la fin du rafraîchissement des différents query's
J'ai lu qu'il y avait le paramètre :BackgroundQuery:=False
, mais je ne sais pas comment l'utiliser.
J'ai essayé comme ceci: ThisWorkbook.RefreshAll BackgroundQuery =
False
-Mais ça veut pas :-(
Est-ce que quelqu'un pourrait me venir en aide,
Merci d'avance,
Cordialement,

Emile
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #19112221
Bonjour.

BackgroundQuery est une propriété de tes tables. Il faut donc, pour
chacune d'elles, définir cette propriété à True ou False avant
l'actualisation :

Dim qt As QueryTable, sh As Worksheet
For Each sh In ThisWorkbook.Sheets
For Each qt In ActiveSheet.QueryTables
qt.BackgroundQuery = False
Next qt

Cordialement.
Daniel

Bonjour a tous,
Dans un classeur Excel, j'ai plusieurs tables qui se raffraîchissent
depuis Internet, dans différents query (qui se trouvent dans
différents onglets).
A l'ouverture, j'utilise une macro qui raffraîchit donc toutes les
données avec la commande:
ThisWorkbook.RefreshAll
Mon souci c'est que la macro continue la suite des instructions sans
attendre la fin du rafraîchissement des différents query's...
J'ai lu qu'il y avait le paramètre :BackgroundQuery:úlse
, mais je ne sais pas comment l'utiliser.
J'ai essayé comme ceci: ThisWorkbook.RefreshAll BackgroundQuery > False
-Mais ça veut pas... :-(
Est-ce que quelqu'un pourrait me venir en aide,
Merci d'avance,
Cordialement,

Emile


Emile63
Le #19112671
On 14 abr, 08:53, Emile63
Bonjour Daniel et merci pour ton aide.

Apparemment il manquait un petit "Next" à la fin de ta proposition,
que j'ai complété comme suit:
-----------------------------------------------------------
Sub test()
Dim qt As QueryTable, sh As Worksheet
For Each sh In ThisWorkbook.Sheets
MsgBox sh.Name
For Each qt In ActiveSheet.QueryTables
On Error Resume Next
MsgBox qt.Name
qt.BackgroundQuery = False
Next qt
Next sh
End Sub
-----------------------------------------------------------
Bien que j'ai compris le fonctionnement et la finalité, de ta
proposition, malheureusement ça fonctionne pas.
La (1ere) boucle Worksheet s'arrête avec une erreur a la seconde
feuille parcourue, c'est peut-être du au fait que la troisième feuille
est un graphique, (j'en ai plusieurs). J'ai essayé de m'en tirer avec
un:
On error resume next
Mais rien n'y fait, la boucle s'arrête là. (J'ai ajouté les msgbox
pour voir jusqu'ou elle fonctionnait..)
Aurais-tu une solution qui permet de passer par dessus les
graphiques... ?
Merci d'avance,
Cordialement,

Emile
Daniel.C
Le #19112881
Oups. Essaie :

Sub test()
Dim qt As QueryTable, sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
For Each qt In sh.QueryTables
qt.BackgroundQuery = False
Next qt
Next sh
End Sub

Daniel


On 14 abr, 08:53, Emile63
Bonjour Daniel et merci pour ton aide.

Apparemment il manquait un petit "Next" à la fin de ta proposition,
que j'ai complété comme suit:
-----------------------------------------------------------
Sub test()
Dim qt As QueryTable, sh As Worksheet
For Each sh In ThisWorkbook.Sheets
MsgBox sh.Name
For Each qt In ActiveSheet.QueryTables
On Error Resume Next
MsgBox qt.Name
qt.BackgroundQuery = False
Next qt
Next sh
End Sub
-----------------------------------------------------------
Bien que j'ai compris le fonctionnement et la finalité, de ta
proposition, malheureusement ça fonctionne pas.
La (1ere) boucle Worksheet s'arrête avec une erreur a la seconde
feuille parcourue, c'est peut-être du au fait que la troisième feuille
est un graphique, (j'en ai plusieurs). J'ai essayé de m'en tirer avec
un:
On error resume next
Mais rien n'y fait, la boucle s'arrête là. (J'ai ajouté les msgbox
pour voir jusqu'ou elle fonctionnait..)
Aurais-tu une solution qui permet de passer par dessus les
graphiques... ?
Merci d'avance,
Cordialement,

Emile


isabelle
Le #19113411
bonjour Emile,

en recherchant sur l'aide de la feuille de calcul avec le mot
"BackgroundQuery"

on nous propose la rubrique :
«Création de macros Visual Basic pour extraire des données externes»
au bas de cette rubrique il y a la remarque suivante :

Remarque Lors de l'enregistrement d'une macro comprenant une requête,
Microsoft Excel ne peut pas exécuter la requête en arrière-plan, même si
vous
avez sélectionné cette option. Pour modifier la macro afin qu'elle
s'exécute en
arrière-plan, modifiez l'instruction "BackgroundQuery := False" en
"BackgroundQuery := True" dans l'éditeur Visual Basic.

isabelle

Emile63 a écrit :
Bonjour a tous,
Dans un classeur Excel, j'ai plusieurs tables qui se raffraîchissent
depuis Internet, dans différents query (qui se trouvent dans
différents onglets).
A l'ouverture, j'utilise une macro qui raffraîchit donc toutes les
données avec la commande:
ThisWorkbook.RefreshAll
Mon souci c'est que la macro continue la suite des instructions sans
attendre la fin du rafraîchissement des différents query's...
J'ai lu qu'il y avait le paramètre :BackgroundQuery:úlse
, mais je ne sais pas comment l'utiliser.
J'ai essayé comme ceci: ThisWorkbook.RefreshAll BackgroundQuery > False
-Mais ça veut pas... :-(
Est-ce que quelqu'un pourrait me venir en aide,
Merci d'avance,
Cordialement,

Emile




Emile63
Le #19113571
Merci pour votre aide.
Daniel, ton dernier code était le bon.. ;-)
Isabelle, je te remercie pour ton intervention. Toutefois, en mettant
"VRAI" depuis le code de Daniel, toute la macro (assez longue)
s'éxécute alors que les raffraîchissements de données ne sont pas
encore terminés (la petite "terre" sur la barre d'état tourne encore
une fois les procédures terminées).
En mettant le tout sur "FAUX" cela semble fonctionner...
Je l'ai relancée plusieurs fois, et je n'ai plus d'erreurs...

Je vous remercie pour votre solicitude,
Cordialement,

Emile
Publicité
Poster une réponse
Anonyme