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

Soucis avec: BackgroundQuery = False

5 réponses
Avatar
Emile63
Bonjour a tous,
Dans un classeur Excel, j'ai plusieurs tables qui se raffra=EEchissent
depuis Internet, dans diff=E9rents query (qui se trouvent dans
diff=E9rents onglets).
A l'ouverture, j'utilise une macro qui raffra=EEchit donc toutes les
donn=E9es avec la commande:
ThisWorkbook.RefreshAll
Mon souci c'est que la macro continue la suite des instructions sans
attendre la fin du rafra=EEchissement des diff=E9rents query's...
J'ai lu qu'il y avait le param=E8tre :BackgroundQuery:=3DFalse
, mais je ne sais pas comment l'utiliser.
J'ai essay=E9 comme ceci: ThisWorkbook.RefreshAll BackgroundQuery =3D
False
-Mais =E7a veut pas... :-(
Est-ce que quelqu'un pourrait me venir en aide,
Merci d'avance,
Cordialement,

Emile

5 réponses

Avatar
Daniel.C
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


Avatar
Emile63
On 14 abr, 08:53, Emile63 wrote:

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
Avatar
Daniel.C
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 wrote:

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


Avatar
isabelle
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




Avatar
Emile63
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