VBA Excel : attendre le chargement d'une feuille de calcul
Résolumikel831 Messages postés 220 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) ??
- VBA Excel : attendre le chargement d'une feuille de calcul
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
1 réponse
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 ....
montre alors ton code modifié.
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
Stop
La 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