VBA Excel : attendre le chargement d'une feuille de calcul

Résolu
mikel831 Messages postés 220 Date d'inscription   Statut Membre Dernière intervention   -  
mikel831 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) ??

A voir également:

1 réponse

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

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

1
mikel831 Messages postés 220 Date d'inscription   Statut Membre Dernière intervention   18
 

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 ....

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > mikel831 Messages postés 220 Date d'inscription   Statut Membre Dernière intervention  
 

montre alors ton code modifié.

0
mikel831 Messages postés 220 Date d'inscription   Statut Membre Dernière intervention   18 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

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 ...
 

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > mikel831 Messages postés 220 Date d'inscription   Statut Membre Dernière intervention  
 

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

1
mikel831 Messages postés 220 Date d'inscription   Statut Membre Dernière intervention   18 > mikel831 Messages postés 220 Date d'inscription   Statut Membre Dernière intervention  
 

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

1