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

Signaler
Messages postés
9
Date d'inscription
mardi 20 avril 2021
Statut
Membre
Dernière intervention
8 juillet 2021
-
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


Configuration: Windows / Chrome 91.0.4472.124