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

Résolu
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 - 21 avril 2024 à 12:35
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 - 23 avril 2024 à 08:35

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 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 Ambassadeur 1 551
22 avril 2024 à 08:19

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 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 16
Modifié le 22 avril 2024 à 13:23

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 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551 > mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024
22 avril 2024 à 14:48

montre alors ton code modifié.

0
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 16 > yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024
Modifié le 22 avril 2024 à 16:23

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 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551 > mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024
22 avril 2024 à 16:25

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 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 16 > mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024
23 avril 2024 à 08:35

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