Actualiser les feuilles d'un classeur une par une via VBA

Bonjour,

Je viens vers vous car je suis novice sur VBA et je n'arrive pas à trouver la fonction dont j'ai besoin sur le net... Ou alors je n'arrive pas à écrire avec la bonne syntaxe.

J'ai un classeur Excel qui contient toute ma BDD de mon logiciel métier. Elle est connectée en ODBC à la BDD HFSQL de mon logiciel métier. Chaque table se trouve sur une feuille différente et est liée par un connecteur ODBC.

Mon besoin est de pouvoir actualiser tout ce classeur pour que lorsque je change quelque chose sur mon logiciel, la base s'actualise et donc j'aimerai que mon classeur s'actualise pour avoir les dernières données à jour. J'ai testé d'actualiser tout le classeur avec CTRL+ALT+F5 et ça ne marche pas. Après plusieurs minutes de chargement le fichier se relance et rien ne s'est actualisé. Alors que quand je vais dans une feuille au hasard et que je fais ALT+F5 pour actualiser uniquement cette feuille cela fonctionne bien et en 3 secs ma feuille est à jour. Je pense que le problème est qu'il y a une grande quantité d'informations à traiter et que mon PC ou bien Excel ne suit pas. Il y a 500 tables dans ma base de donnée qui sont donc reparties sur 500 feuilles dans mon classeur chacune liée avec un connecteur ODBC. Quand je fais "actualiser tout" ça plante surement à cause de la masse de travail générée.

Vu que je sais qu'actualiser feuille par feuille fonctionne bien je me suis donc lancé dans une macro pour actualiser chaque feuille une par une mais étant débutant je n'y parviens pas...

Mon code /

Sub Actualiser_BDD()
'
'

'
   Dim WS As Worksheet

   For Each WS In ActiveWorkbook.Worksheets
    WS.Refresh
    Application.Wait (Now + TimeValue("0:00:03"))
    Sheets("Tables").Cells(1, 1).Value = WS.Name
   Next WS

End Sub

Le problème se situe sur WS.Refresh qui ne fonctionne pas. J'ai essayé WS.Calculate et ma macro fonctionne très bien mais la fonction Calculate n'est pas celle dont j'ai besoin car ce n'est pas vraiment une actualisation... J'ai essayé aussi ActiveWorksheet.Refresh ou plusieurs tests dans ce style mais ça bloque toujours ici...

Avez vous une solution pour que mon code fonctionne? Ou une meilleure idée pour parvenir à mes fins? Car j'avoue que cette méthode n'est pas idéale car avec Calculate qui à fonctionnée elle a bien pris 40 bonne minutes. Si il y a un moyen de l'alléger sans faire planter le fichier je suis preneur.

Merci par avance pour votre aide

Hello,

T'as essayé ceci ?

Worksheets("nom_de_feuille").ListObjects(1).QueryTable.Refresh False 

Super ça fonctionne merci beaucoup !

Petite question, pourquoi False?

Encore merci bonne journée

Hello,

Voici ce que dit l'aide de microsoft :

True pour redonner le contrôle à la procédure dès qu’une connexion de base de données est établie et la requête envoyée. L'objet QueryTable est mis à jour en arrière-plan.

False pour ne redonner le contrôle à la procédure qu'une fois que toutes les données ont été récupérées dans la feuille de calcul.

Rechercher des sujets similaires à "actualiser feuilles classeur via vba"