VBA Excel : attendre le chargement d'une feuille de calcul
Résolumikel831 Messages postés 237 Date d'inscription Statut Membre Dernière intervention -
Bonjour!
Je copie les données d'une page web dans une feuille de calcul Feuil2 via le code:
Set QT = ActiveSheet.QueryTables.Add(Connection:="URL;" & URL, Destination:=Range("A1"))
' configurer la QueryTable...
With QT
.WebSelectionType = xlEntirePage '... pour sélectionner toute la page
.Refresh BackgroundQuery:=False '... pour rafraîchir les données et les coller dans la feuille
.PreserveFormatting = True
.WebDisableDateRecognition = True
.RefreshPeriod = 0
.Refresh
End With
........SuiteCode
SuiteCode fait des recherches de valeurs et des calculs dans Feuill2
Mais j'ai constaté que des erreurs et des bugs survenaient pendant l'exécution de SuiteCode car j'ai l'impression que Feuille2 n'est pas complétement chargée (il y a le sablier qui clignote à l'écran pendant 5 à 10 s) ???
Est-il possible de lancer SuiteCode lorsque la Feuil2 est complétement chargée (plus le sablier) ??
1 réponse
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
Je ne pense pas qu'il soit utile de faire deux refresh().
Tu as programmé le second refresh(), me semble-t-il, de façon à ce que le code continue pendant que le refresh() s'exécute.
https://learn.microsoft.com/fr-fr/office/vba/api/excel.querytable.backgroundquery
-
Bonjour!
Merci pour ta réponse!
J'ai ajouté le second Refrech pour éviter d'avoir janv-14 dans Feuill2 lorsque la page web contenait 1-14 ... et ça a fonctionné.
Je viens d'enlever le 1er Refrech : je retrouve 1-14 comme souhaité, mais la partie CodeSuite bugue toujours car Feuil2 n'est pas complète .... -
-
Voici:
' configurer la QueryTable...
With QT
.WebSelectionType = xlEntirePage '... pour sélectionner toute la page
.PreserveFormatting = True
.WebDisableDateRecognition = True
.RefreshPeriod = 0
.Refresh
End With
' libérer l'objet QueryTable
Set QT = Nothing
'Stop
' Rechercher les agences dans "Feuil2"
Sheets("Feuil2").Select
Set MaPlage = Range("A1:C350")
MaPlage.Select
Set Debut = Selection.Find("N°")
If Debut Is Nothing Then
'Exit Sub
MsgBox "N° nontrouvé"
Stop
End If
StopLa cellule de Feuil2 contenant "N°" n'est pas trouvée (Début Is Nothing) tant que la feuille n'est pas complétement chargée (sablier à l'écran qui clignote) et le code s'arrête sur Stop . Dès qu'il n'y a plus le sablier, si je relance le code à Set Debut, tout le reste se déroule normalement comme souhaité .
Il faudrait donc que j'ai une technique qui "gèle" le code tant que Feuil2 n'est pas complète (plus de sablier à l'écran) cad environ une dizaine de secondes ...
-
Ton refresh() est programmé, me semble-t-il, de façon à ce que le code continue pendant que le refresh() s'exécute.
https://learn.microsoft.com/fr-fr/office/vba/api/excel.querytable.backgroundquery
-
Bonjour!
Je ne sais pas pourquoi ma réponse d'hier n'est pas passée?
C'était pour t'informer qu'après avoir repositionné le .Refresh BackgroundQuery:=False .. ainsi:
' configurer la QueryTable...
With QT
.WebSelectionType = xlEntirePage '... pour sélectionner toute la page
.PreserveFormatting = True
.WebDisableDateRecognition = True
.RefreshPeriod = 0
.Refresh BackgroundQuery:=False '..
End With
tout est rentré dans l'ordre : le code suivant s'exécute correctement, ouf!
Merci de ton aide
-